Struts1.x工作原理

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对象,将响应结果返回给前台

你可能感兴趣的:(Struts1.x工作原理)