Atitit mvc框架的实现 目录 1.1. class MvcCtrol { 1 1.2. MvcFilter 1 1.3. MvcUtil 2 /springboothelloword/sr
Atitit mvc框架的实现
目录
/springboothelloword/src/springboothtml/MvcUtil.java
@MyComponent
public class MvcCtrol {
// http://localhost:8080/mvctest
@MyMapping("/mvctest")
public String mvctestMeth(HttpServletRequest req) {
return "data";
}
}
@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
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);
}
}
}
相关文章
- 基于cesuim三维框架开发的三维路径分析的实现「建议收藏」
- Spring MVC框架:第十二章:运行原理
- Spring MVC框架:第十章:拦截器
- Spring MVC框架:第三章:获取请求参数和页面跳转控制
- .Net MVC 框架基础知识「建议收藏」
- Spring MVC框架:第十七章:异常映射
- Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象
- Spring MVC框架:第八章:表单form:form标签
- Spring MVC框架:第九章:文件上传
- Spring MVC框架:第十章:拦截器
- Spring MVC框架:第十四章:数据校验
- todoMVC_mvc框架是什么
- Week2-脚手架架构设计和框架搭建
- 主框架组件化--披露API
- 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
- 【EventBus】事件通信框架 ( 取消注册 | 获取事件参数类型 | 根据事件类型获取订阅者 | 移除相关订阅者 )
- Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架详解编程语言
- 库使用MVC模式构建MySQL数据库连接(mvc连接mysql数据)
- 操作快速掌握Qt框架MySQL数据库操作(qtmysql数据库)
- 实现C MVC框架快速连接MySQL(c mvc连接mysql)
- MVC链接Oracle数据库的实现方法(Mvc链接oracle)
- Extjs4.1.x框架搭建采用Application动态按需加载MVC各模块完美实现
- 解析CI即CodeIgniter框架在Nginx下的重写规则
- 用Composer构建自己的PHP框架之设计MVC
- php实现最简单的MVC框架实例教程