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
- class MvcCtrol {
@MyComponent
public class MvcCtrol {
// http://localhost:8080/mvctest
@MyMapping("/mvctest")
public String mvctestMeth(HttpServletRequest req) {
return "data";
}
}
- 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
- 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);
}
}
}
Atitit mvc框架的实现 目录 1.1. class MvcCtrol { 1 1.2. MvcFilter 1 1.3. MvcUtil 2 /springboothelloword/sr相关推荐
- PHP: 手把手编写自己的 MVC 框架实例教程
1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- MVC框架运行流程和目录结构
1. 框架运行流程 用最通俗最简单的方法来解释一个MVC框架的运行流程: 通过入口文件载入函数库,加载自动加载的类,然后启动框架,启动框架后通过路由解析地址,然后 ...
- php mvc实例下载,php实现简单的MVC框架实例
本文实例讲述了php实现简单的MVC框架.分享给大家供大家参考.具体如下: 在开始之前需要知道的知识 1.php基础知识 2.单一入口, 不知道的可以看看这里 具备以上两点, 那我们就可以开始啦. 哈 ...
- Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)
前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...
- koa-grace:一个基于koa的node多应用MVC框架
春节期间没回家留在北京写了一个基于koa的node MVC框架:koa-grace ,大家有兴趣可以star & fork下,谢谢支持啦!! 项目地址: https://github.com/ ...
- Spring MVC 框架搭建及详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...
- dedeCMS,标准的MVC框架运行原理和缓存
2019独角兽企业重金招聘Python工程师标准>>> 1.织梦的工作原理: a.模板引擎: b.内核文件的载入.读取: 运行原理:url->配置文件->公共 ...
- ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 ...
- PHP MVC框架核心类
现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/Framework.clas ...
- mvc框架自个儿搭建
mvc 框架 自己搭建 php框架 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体现出敏捷开发的效果就OK了,作为一个PHPer要提高自己的对PHP和MVC的框架的认识,所以自己 ...
最新文章
- GridView控件修改、删除示例(修改含有DropDownList控件)
- java 反射 orm_Java-反射机制简介
- sass 在线转换器
- Word字体与像素的对应关系(转)
- 信息系统项目管理知识--信息安全
- python编程入门课_程序设计入门—Python
- Python 日期 的 加减 等 操作
- 简述工业机器人示教再现的一般步骤_基于激光焊缝跟踪传感器的工业机器人焊缝跟踪系统的应用焊接寻位...
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解
- 微信红包发放接口服务器签名失败,微信现金红包接口开发注意的事项
- nginx 域名跳转
- 7.过渡案例:①进度条 ②小米图标翻转(父盒子一定要加初始值!!!)
- html文档绝对引用,excel中的绝对引用怎么用 excel中引用绝对引用是哪个键
- 个性化定制将成鞋服行业未来开拓新方向
- 讯飞语点,移动灵犀,搜狗语音助手对比测试
- IPhone4S自定义铃声
- extjs中dateField日期精确到时分秒的扩展控件
- 微信小程序 - 一键复制功能
- 动态规划的背包问题 (共六题)
- 带账号、密码ssh的脚本
热门文章
- python操作sql_Python操作MSSQL
- idea 新建spring clound 项目_手把手教你spring源码搭建
- html表格两种颜色,html – 表格细胞两个颜色背景对角线
- linux系统日志读取,linux系统日志
- GUID和UUID、CLSID、IID 区别及联系
- [elixir! #0024] 引擎盖下, `Channel.push` 如何运作
- 教你从进程中判断病毒木马的存在
- Python开发第一步的环境搭建
- 60佳优秀的国外电子商务网站设计案例(上篇)
- zk不同页面之间的即时刷新