Struts2运行流程
1、在web.xml中使用Struts的核心过滤器拦截所有请求。
struts2 class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter class>struts2 /*
2、核心过滤器根据struts.xml中配置的action的name找到对应的action的class,调用此action的拦截器、拦截器栈对请求进行预处理。
<package name="action" namespace="/" extends="struts-default">class="action.LoginAction"> package>
有2种配置action的方式,一种是在struts.xml中配置,另一种是使用约定,约定xxx.action对应XxxAction类,约定需要插件支持。
Servlet是使用Filter(过滤器)对请求进行预处理,Action是使用Interceptor(拦截器)对请求进行预处理。一组拦截器组成一个拦截器栈。
缺省拦截器配置时,会自动调用struts-default包中的默认拦截器栈来处理。
3、利用反射创建此action的实例(调用空参的构造器),再调用此action的setter方法将请求参数赋给成员变量。
4、调用指定的方法来处理请求,并返回一个String类型的值。
method="">
先找这个action有没有设置method属性,如果有method属性,且action类中有指定的方法,就调用指定的方法;
缺省method属性时,默认调用execute()。
5、按照里配置的,根据返回的字符串,确定要调用的页面。
6、根据struts.xml中配置的页面调用方式,调用页面,作为响应,返回给浏览器。
class="action.LoginAction"> /teacher.jsp /student.jsp /error.jsp
可以在
<package name="action" namespace="/" extends="struts-default">class="org.apache.struts2.result.ServletRedirectResult" default="true"/> class="action.LoginAction"> package>/teacher.jsp /student.jsp /error.jsp
这种配置需要设置为默认值才有效 default="true" 。
注意:
如果没有配置方式,会调用继承的struts-default中的配置(默认为dispatcher,转发)。
核心过滤器 StrutsPrepareAndExecuteFilter
MVC提倡所有请求都交给Servlet来处理,Struts2提倡所有请求都交给Action处理。由Servlet|Action调用相应页面来显示。
web.xml中会使用核心过滤器拦截所有请求。
核心过滤器,是一个过滤器,过滤器可以拦截所有请求,拦截器只能拦截对action的请求。
见名思义,prepare and execute。
核心过滤器在init()中会加载所有配置文件,初始化WebAPP,将struts.xml中的配置的action的name、class映射为一个Map。
在doFilter()中,按照Map中action的映射关系,根据action的name找到对应的class,创建Action实例,处理请求。