Struts2流程

在这里插入图片描述

1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
2.web容器去读这个工程的web.xml ,在web.xml中配置struts2的核心过滤器FilterDispatcher以及其他过滤器,FilterDispatcher应放在其他过滤器的最后面,用于拦截所有请求。配置如下:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3.该请求顺序经过web.xml中配置的过滤器,最终找到FilterDispatcher,回调doFilter()去拦截请求。
4.FilterDispatcher将拦截的请求发送给ActionMapper,由ActionMapper负责识别当前的请求是否需要调用某个Action来处理该请求。
5.ActionMapper告诉FilterDispatcher需要处理这个请求,并创建ActionProxy,FilterDispatcher把该请求交给ActionProxy处理。
6.ActionProxy询问ConfigurationManager,读取Struts.xml ,根据struts.xml中配置的action的name找到对应的action的class,调用此action的拦截器、拦截器栈对请求进行预处理。配置如下:

<package name="action" namespace="/" extends="struts-default">
    <action name="loginAction" class="action.LoginAction" method="toLogin">
        <result name="success" type="dispatcher">/login.jsp</result>
        <result name="error">/error.jsp</result>
    </action>
</package>
<package>有必需属性 extends="struts-default",即此<package>的配置继承struts-default.xml中 <package name="struts-default"></package> 的配置。缺省拦截器配置时,会自动调用struts-default包中的默认拦截器栈来处理。
先找这个action有没有设置method属性,如果有method属性,且action类中有指定的方法,就调用指定的方法。缺省method属性时,默认调用execute()。
按照<action>里配置的<result>,根据返回的字符串,确定要调用的页面。

7.ActionProxy创建一个ActionInvocation实例。
8.ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器),拦截器的执行顺序为:Interceptor1->Interceptor2。
9.执行execute()方法,根据execute方法返回的结果,也就是Result,在struts.xml中匹配选择下一个页面。
10.得到返回结果Result后,再次运行拦截器的时候,顺序就变成Interceptor2->Interceptor1了。
11.ActionInvocation对象执行完毕 ,这时候已经得到了HttpServletResponse对象。
12.HttpServletResponse对象再按照请求进来的反方向通过web.xml中配置的过滤器,最终向客户端展示结果.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值