zoukankan      html  css  js  c++  java
  • Atitit mvc框架的实现 目录 1.1. class MvcCtrol { 1 1.2. MvcFilter 1 1.3. MvcUtil 2 /springboothelloword/sr

    Atitit mvc框架的实现

     

    目录

    1.1. class MvcCtrol { 1

    1.2. MvcFilter 1

    1.3. MvcUtil 2

     

    /springboothelloword/src/springboothtml/MvcUtil.java

    http://localhost:8080/mvctest

     

      1. class MvcCtrol {

    @MyComponent

    public class MvcCtrol {

        //  http://localhost:8080/mvctest

    @MyMapping("/mvctest")

    public String mvctestMeth(HttpServletRequest req) {

     

    return "data";

    }

     

    }

      1. MvcFilter 

     

     

    @WebFilter(urlPatterns = "/*", filterName = "mvcFilter")

    public class MvcFilter implements Filter {

     

    @Override

    public void destroy() {

    // TODO Auto-generated method stub

     

    }

     

    @Override

    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) {

    try {

     

     

    // get url out mapper

       Map<String, MethodObj> url_method_maps = MvcUtil.get_url_out_mapper();

     

    HttpServletRequest httpServletRequest = (HttpServletRequest) arg0;

    HttpServletResponse httpServletResponse = (HttpServletResponse) arg1;

    String uri = httpServletRequest.getRequestURI();

    System.out.println(uri);

     

     if(url_method_maps.get(uri)==null)

     {

    arg2.doFilter(arg0, arg1);

    return;

     }

    MethodObj MethodObj1= url_method_maps.get(uri);  

    Object  classObj = ConstructorUtils.invokeConstructor(MethodObj1.classProp, null);  

    Method meth = MethodObj1.methodProp;

    Object[] args =MvcUtil.getArgs(meth,arg0,arg1); //new Object[] {};

    String r = (String) meth.invoke(classObj, args);

    outputHtml(httpServletResponse, r);

    return;  //not to next ,beirs springmvc show err,cause cant this mappering  

     

     

     

     

      1. MvcUtil 

     

    package springboothtml;

     

    import java.lang.reflect.Method;

    import java.lang.reflect.Parameter;

    import java.util.List;

    import java.util.Map;

    import java.util.function.Consumer;

     

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServletRequest;

     

    import com.google.common.collect.Lists;

    import com.google.common.collect.Maps;

     

    public class MvcUtil {

     

    public static Object[] getArgs(Method meth, ServletRequest arg0, ServletResponse arg1) {

    List li=Lists.newArrayList();

    Parameter[] Parameters_arr= meth.getParameters();

    for (Parameter parameter : Parameters_arr) {

    Class<?> type1 = parameter.getType();

    if  (  type1 ==HttpServletRequest.class)

    {

    li.add(arg0);

    }

    }

    return li.toArray();

    }

     

    public static  Map<String, MethodObj> get_url_out_mapper() {

    Map<String, MethodObj> url_method_maps = Maps.newLinkedHashMap();

    ClassListForeach(new Consumer<Class<?>>() {

     

    @Override

    public void accept(Class<?> cls) {

     

    MyComponent MyComponentAnno = (MyComponent) cls.getAnnotation(MyComponent.class);

    if (MyComponentAnno == null)

    return;

     

    // 获取一个类的注解,根据注解名

    Method[] methds = cls.getMethods();

    for (Method method : methds) {

    MyMapping anno1 = (MyMapping) method.getAnnotation(MyMapping.class);

    if (anno1 == null)

    continue;

    String uri_mapping = anno1.value();

    MethodObj MethodObj1 = new MethodObj();

    MethodObj1.classProp = cls;

    MethodObj1.methodProp = method;

    url_method_maps.put(uri_mapping, MethodObj1);

    }

     

    }

    });

     

    return url_method_maps;

    }

     

    private static void ClassListForeach(Consumer<Class<?>> consumer) {

    List<Class<?>> li_allclass = Lists.newArrayList();

    li_allclass.add(MvcCtrol.class);

    for (Class class1 : li_allclass) {

    consumer.accept(class1);

    }

     

    }

     

    }

     

  • 相关阅读:
    ArcGIS Server GP服务发布与测试(基础版)
    【转】arcgis server site 快速恢复与重建
    ArGIS Server 服务的更新
    ArcMap中,如何查看当前工具是否在执行?如何将工具调到前台来执行?
    【转】ArcGIS 创建切片缓存方法工具总结
    ArcGIS Server 增加缓存路径
    修改ArcGIS Server Account / 站点管理员的 账号、密码
    ArcGIS Server 创建站点失败
    ArcGIS Server,4000端口被占用
    JS 中如何判断字符串类型的数字
  • 原文地址:https://www.cnblogs.com/attilax/p/15197432.html
Copyright © 2011-2022 走看看