Struts2工作流程
原理概述:
1、浏览器发起请求,经过一系列过滤器,到达核心过滤器StrutsPrepareAndExecuteFilter
2、通过actionMapper将请求交给Action代理,查询配置文件中需要调用的action,在调用前后会执行相关拦截器(登陆判断,用户权限)
3、创建一个actionInvocation实例,执行业务逻辑,返回结果集呈现给用户
缺点:
1、struts1的核心是个servlet ,与servlet API严重耦合,难于测试,而且还是单例,就造成了一定的限制。资源必须为线程安全或者同步
而struts2的核心是个过滤器,为每一个请求实例化一个对象,所以没有线程安全的问题。
2、struts1的Action类依赖于servlet API 属于侵入式设计 。struts2的Action与容器无关
3、struts1整合Jstl标签,所以就使用JSTL表达语言。struts2使用JSTL,也支持更灵活的OGNL
4、struts1用ActionForm对象来获取输入,并且还有验证功能。
struts2 Action属性作为输入属性,就减少了第二个输入对象的需要
详解:
1、在浏览器中输入http://localhost:8080/Self/LoginAction?account=123,就会向服务器端(tomcat)发送一个请求
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.selfpackage.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、tomcat会解析URL,在web.xml文件找到filter标签,过滤url-pattern中的地址
@Namespace("/")
@Action(value = "LoginAction", results = {
// 成功跳转到主页面main.jsp
@Result(name = "success", location = "main/main.jsp"),
//@Result(name = "success", type="chain", location="preselectgroupAction"),
// 失败跳转到登陆页面login.jsp
@Result(name = "input", type = "chain", location = "nav_login")})
public String login() throws Exception {
……
return success;
}
3、在struts.xml中的package标签中的namespace中得到它的值,这里通过注解实现
4、根据返回的String字符串(success),在result中找到name属性值为返回的String字符串的标签
5、最后jsp反馈到客户端

浙公网安备 33010602011771号