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反馈到客户端

 

posted @ 2018-03-13 22:26  不是植物  阅读(154)  评论(0编辑  收藏  举报