博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC框架的实现
阅读量:5107 次
发布时间:2019-06-13

本文共 1479 字,大约阅读时间需要 4 分钟。

现在web开发基本都是MVC的架构了,struts、springMvc 等等。其中一个重要的功能就是将客户发起的请求,分发至我们定义的Action里面的方法之中。

闲暇之余,我也做了一个类似于spring的方式,在Action中配置注解RequestMapping,将前端的请求分发至action的方法中。实现的过程还是比较简单的。

 

1. 实现url映射的注解

2. 在servlet容器启动时,解析配置当中所有的模块。解析模块中的所有方法。将对应的URL以及处理方法保存起来。

3. 在servlet处理请求时,取得请求的servlet容器,然后从保存的URL映射中取处理的类和方法。如果没有则404,如果有则调用该方法处理。

4.然后根据方法的返回值,返回响应的jsp页面。

 

代码非常简陋,只是为了弄懂如何通过注解实现URL映射。源码:

demo的效果如下:

Action中配置:

/**
*
* @author yingzi.zhu
*/
@RequestMapping("/my")
public class MyAction {
 
@RequestMapping("/sayHello")
public String add(HttpServletRequest request, HttpServletResponse response){
request.setAttribute("param", "Hello, everyone");
return "hello";
}
 
}

web.xml中的配置如下:

yservlet
org.yz.mvc.action.YServlet
entrance
org.yz.mvc.MainModule
 
 
yservlet
*.test
 

其中 org.yz.mvc.MainModule 为主入口,作用是通过@YMvc注解,标记模块。

/** * * @author yingzi.zhu */@YMvc(MyAction.class)public class MainModule {    }

hello.jsp。测试Action中的返回,从Request中取值。在页面显示。

 
 
JSP Page
 
 

<%= request.getAttribute("param") %>

 
 

 

最后的显示结果。

 

 

整个映射过程还是比较简单的。只需要在web.xml中进行servlet配置,然后在入口中配置要加载的Action。然后在Action中配置匹配的路径。

 

实现的思路是:

1. 在servlet类中,获取web.xml中配置的入口模块

2. 在入口模块中解析注解 @YMvc 的内容。

3. 根据解析的内容继续解析 配置了URL映射的模块,分别解析类名的注解以及方法的注解

4. 将注解以及处理类存放在map里面。如 前面demo中的  (/my/sayHello, MyAction, add)

5. 在servlet有请求时,解析请求的路径,从map中取匹配

6. 配置到了,则调用Java类的反射机制,来执行配置的方法。获取方法的返回值

7. 将使用请求转发,将请求转发至 方法的返回值。

转载于:https://www.cnblogs.com/atio/p/3483415.html

你可能感兴趣的文章
arm linux g 找不到,/ bin / sh:1:arm-linux-gcc:在ubuntu上找不到
查看>>
linux时钟 跳变,关于am3359 linux下系统时间跳变的问题
查看>>
c语言比较十个数大小冒泡法,【C语言】用选择法、冒泡法分别对10个整数从小到大排序...
查看>>
判断奇偶数的程序c语言子函数,C程序检查数字是偶数还是奇数
查看>>
c语言输入r1 r2垫片的面积,新C语言实验学生版
查看>>
用C语言输屮10个数从小到大,C语言程序设计习题打印.docx
查看>>
android自动运行脚本,android 启动自动调用自己创建的脚本(应用程序)
查看>>
荣耀v30pro鸿蒙5g,荣耀V30Pro“5G标杆,不止于快”
查看>>
android 表情功能的完整处理方案,Android表情的处理方案记录
查看>>
android 测试bootstrap,手机自动化测试:appium源码分析之bootstrap十三 2
查看>>
电池寿命增压器为android,一个涡轮增压器的寿命只有10年?
查看>>
android 数据库 时间,在Android Studio中将当前时间添加到SQLite数据库
查看>>
linux 分布式smb,Ubuntu 13.10安装Samba服务器实现局文件共享
查看>>
android 手势数据库,AndroidStudio:手势识别
查看>>
android onnewintent home,android - OnCreate fires twice from onNewIntent - Stack Overflow
查看>>
android sensorhub框架,init.angler.sensorhub.rc
查看>>
eclipse中写安卓的html页面跳转,菜鸟实现(二) eclipse 安卓 点击TextView 跳转页面...
查看>>
android懒加载简书,Android优化--Fragment懒加载
查看>>
js抓取list中item的html,html - i want add item in list (vue.js) - Stack Overflow
查看>>
mysql格式化html,MySQL FORMAT()用法及代码示例
查看>>