Struts2 运行流程
程序员文章站
2022-04-14 22:34:13
1、在web.xml中使用Structs的核心过滤器拦截所有请求。 2、核心过滤器在structs.xml中根据name找到指定的action,调用此action的拦截器、拦截器栈对请求进行预处理。 有2种配置action的方式,一种是在structs.xml中配置,另一种是使用约定,约定xxx.a ......
1、在web.xml中使用structs的核心过滤器拦截所有请求。
<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>
2、核心过滤器在structs.xml中根据name找到指定的action,调用此action的拦截器、拦截器栈对请求进行预处理。
<package name="action" namespace="/" extends="struts-default"> <action name="loginaction" class="action.loginaction"> <result name="teacher">/teacher.jsp</result> <result name="student">/student.jsp</result> <result name="error">/error.jsp</result> </action> </package>
有2种配置action的方式,一种是在structs.xml中配置,另一种是使用约定,约定xxx.action对应xxxaction类,约定需要插件支持。
servlet是使用filter(过滤器)对请求进行预处理,action是使用interceptor(拦截器)对请求进行预处理。一组拦截器组成一个拦截器栈。
拦截器可在<action>中配置,也可在<package>中配置,在<action>中配置的只对当前action有效,在<package>中配置的对整个<package>下的所有action都有效。
<package>有必需属性 extends="struts-default",即此<package>的配置继承structs-default.xml中 <package name="struts-default"></package> 的配置。
缺省拦截器配置时,会自动调用structs-default包中的默认拦截器栈来处理。
3、利用反射创建此action的实例(调用空参的构造器),再调用此action的setter方法将请求参数赋给成员变量。
4、根据<action>中的method属性,调用此action指定的方法来处理请求,并返回一个string类型的值。
缺省method属性时,默认为execute。
<action name="loginaction" class="action.loginaction" method=""> <result name="teacher">/teacher.jsp</result> <result name="student">/student.jsp</result> <result name="error">/error.jsp</result> </action>
5、按照<action>里配置的<result>,根据返回的字符串,确定要调用的页面。
6、根据structs.xml中配置的方式,调用页面,作为响应,返回给浏览器。
<action name="loginaction" class="action.loginaction"> <result name="teacher" type="redirect">/teacher.jsp</result> <result name="student" type="dispatcher">/student.jsp</result> <result name="error">/error.jsp</result> </action>
可以在<result>中配置逐个配置,也可以在<package>下统一配置。
<package name="action" namespace="/" extends="struts-default"> <result-types> <result-type name="redirect" class="org.apache.struts2.result.servletredirectresult" default="true"/> </result-types> <action name="loginaction" class="action.loginaction"> <result name="teacher">/teacher.jsp</result> <result name="student">/student.jsp</result> <result name="error">/error.jsp</result> </action> </package>
这种配置需要设置为默认值才有效 default="true" 。
注意:<package>对子元素的顺序是有要求的。
如果没有配置方式,会调用继承的struct-default中的配置(默认为dispatcher,转发)。