您的位置:首页 > 编程语言 > Java开发

Struts2复习小结

2017-08-16 20:56 141 查看
这篇博客写的很烂,不建议大家浏览,只是作为我用来回忆怎样手动实现struts框架的笔记,很多细节这里都没讲清楚。

自己实现struts2过程

配置拦截器(Filter)至Web.xml,url-parrten配置为 /*

在Filter init代码中初始化Action配置 通过dom读取Action的配置信息

<action name="employee" class="com.BaseAction" method="execute">
<result name="index" type="forward">/WEB-INF/views/index.jsp</result>
</action>


首先来看Action需要存储哪些信息

public class ActionInfoBean {
private String name; // Action名称
private String className; // 类名
private String method; // 需要执行的方法
private List<Result> results; // 结果视图
}


使用ClassLoader加载classpath目录下的struts.xml 文件,然后通过dom对象来解析

NodeList nodeList = doc.getElementsByTagName("action");


获取配置的各项信息,以及结果视图

然后将获取到的信息封装成Bean存储在Map中key就是配置的name

当请求过来时,通过截取到的请求名来获取存储在Map中的Action,如果返回不为空,说明有对应的Action可以执行,通过ClassName来反射获取实例对象,invoke对应的方法

每个方法多会返回一个逻辑视图,通过Action中的视图List获取对应逻辑视图的目录

req.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(request, response);
rep.sendRedirect("/WEB-INF/view/index.jsp");


这样一次请求就已经完成了

在Filter中获取RequestUrl 然后截取其中的请求名来获取Action,如果没有获取到就chain.doFilter(request,response) 放行,然后return。

关于参数怎么封装在Filter的doFilter中,将Request,Response两个对象转成HttpServlet存储在ThreadLocal中,这样便可以线程安全

这样一个简单的Struts就可以实现了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts filter dom