利用java反射模拟struts2工作(二)
继上一篇文章模拟struts2的工作机制,上一篇主要是对配置文件的编写以及解析,接着是使用servlet来控制对action的访问以及result返回的处理。由servlet来充当Control层,首先来看一下web.xml的配置。
再来看一下对url请求处理。
不管客户端是以get或post类型请求都将交给execute来处理,然而execute加了synchronized 关键字,主要是为了线程安全,为什么要在execute方法中每次都装载一次webwork.xml文件呢,这样设计的目的主要是为了有时需要改变webwork.xml中的逻辑时不需要再去重启服务器这样的麻烦事儿。
看一下方法执行后的结果交给了ResultManager类来处理,在返回值的处理使用了设计模式中的状态模式来处理,由于富应用的兴起,不能只是简单的视图跳转,所以可以通过状态模式来扩展自己想以各种各样的类型来返回数据给客户端,在这我只写了两个类型处理,分别是Jsp与Json状态类型。先来看一下两个状态的顶层接口。
然后再来看一下ResultManager类如何来控制result类型的控制访问的。/** * */package test.ajax;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * * @author 张廷 2011-5-29下午07:51:24 * */public class AjaxAction {private User user;public String execute(HttpServletRequest req, HttpServletResponse resp) {System.out.println("success!");return "";}public String ajaxTest(HttpServletRequest req, HttpServletResponse resp) {user.setAge(18);user.setBirth("1988-12-12");user.setSex("男");user.setUsername("admin");return "ajaxResponse";}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}
测试结果表明json结果已经返回到客户端,在客户端自己需要下载json2.js来解析服务器端返回的json数据。
看……一个简单的MVC小框架就已经出来了,但是一个真正的MVC框架考虑的远不止这些,还有更多的工作需要去分析设计,这只是为了理解一下MVC模式。 1 楼 easyhaohao 2011-06-11 动态方法调用那不好用吗?请求进不去BaseServlet 2 楼 z276356445t 2011-06-12 easyhaohao 写道动态方法调用那不好用吗?请求进不去BaseServlet
你是指的用动态代理吗?怎么进不baseServlet?