1、 Struts的核心是ActionServlet,它本质上就是一个Servlet,在Web.xml中配置ActionServlet为自动启动,指明Struts的配置文件所在位置,并指明Struts中工作条件
<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
//如果有多个配置文件,以逗号分隔
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2、 当服务器容器(Tomcat)启动时,自动加载ActionServlet,并执行init()方法,init方法会用Sax解析Web.xml中指定的Struts配置文件(struts-config.xml),读取里面的action、form-bean、forward、exception及资源文件和插件信息,并将其保存到Struts相应的MAP缓存中。
<struts-config>
<data-sources />
<form-beans>
<form-bean name="insertForm" type="com.form.InsertForm"></form-bean>
<form-bean name="updateForm" type="com.form.UpdateForm"></form-bean>
<form-bean name="searchForm" type="com.form.SearchForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action path="/insert" name="insertForm"
type="com.action.InsertAction" input="/insert.jsp" scope="request"
validate="true">
<forward name="search" path="/search.do"></forward>
</action>
<action path="/update" name="updateForm"
type="com.action.UpdateAction" input="/update.jsp" scope="request"
validate="true">
<forward name="search" path="/search.do"></forward>
</action>
<action path="/search" name="searchForm"
type="com.action.SearchAction" input="/search.jsp" scope="request"
validate="true">
<forward name="search" path="/search.jsp"></forward>
</action>
<action path="/delete" type="com.action.DeleteAction"
input="/search.jsp" scope="request" validate="true">
<forward name="search" path="/search.do"></forward>
</action>
</action-mappings>
<message-resources
parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml" />
</plug-in>
</struts-config>
3、 在客户端发来请求以后,Tomcat会检测请求的URL,如果以.do结尾,则交于Struts进行处理:Struts首先分析出请求Action的名称,然后在Action的MAP缓存中找到action的path属性与其对应的action信息,查看name属性是否指向form-bean,如果没有则跳转到第4步。如果有则在form-bean的MAP缓存中找到form-bean的name属性与此action的name属性相匹配的form-bean信息,通过form-bean的type属性找到此form-bean的实体类,利用反映机制得到此实体类的所有以set开头的属性并从URL请求参数中得到相对应的参数名称,调用实体类的set方法将其参数值注入到实体类的属性中。注入完成后检测此action信息的validte属性,如果为真,则执行form-bean的validte方法,如果验证不通过,则返回到action的input属性所指向的页面,如果通过则跳转到第4步
4、 查看此action的parameter、type方法,以确认调用Action的默认方法还是自定义方法进行业务处理,返回ActionForward对象,将响应结果返回给前台