提到Struts框架,就不能不提Servlet,它在MVC体系中担当着C(Controller控制器)的角色。在Struts中,Servlet的初始化通过配置文件web.xml来完成,例如:
<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>action</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>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
在上面例子中,指定org.apache.struts.action.ActionServlet作为中心Servlet,它处理所有的request,并作出相应的处理。关于Struts的请求-响应处理流程可参看代码org.apache.struts.action.RequestProcessor。下面我只对一些关键部分作出描述。例如:
<action-mappings>
<action path="/processSimple"
type="examples.simple.ProcessSimpleAction"
name="simpleForm"
scope="request"
input="/jsp/simple/Simple.jsp"
cancellable="true"
validate="true">
<forward name="success" path="/jsp/simple/SimpleResults.jsp"/>
</action>
</action-mappings>
1. ActionServlet接到用户的request,(如processSimple.do),在struts-config.xml里面找到相应的ActionMapping。
2. 调用processActionForm()方法,ActionServlet先检查request或session中(scope设置),是否有form bean实例存在(name设置)。如果有,返回这个实例,否则创建一个form bean实例(name设置)。然后将这个form bean实例放在request或session中。
3. 调用processPopulate(),来处理步骤2中的form bean实例,先调用ActionForm的reset()方法,然后将request的表单数据填充到ActionForm中。
4. 调用processValidate(),ActionServlet检查ActionMapping的validate设置,如果设置为false,什么都不做;如果没有设置或设置为true,将调用步骤3中form bean实例(已经填充了数据)的validate方法。
<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>action</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>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
在上面例子中,指定org.apache.struts.action.ActionServlet作为中心Servlet,它处理所有的request,并作出相应的处理。关于Struts的请求-响应处理流程可参看代码org.apache.struts.action.RequestProcessor。下面我只对一些关键部分作出描述。例如:
<action-mappings>
<action path="/processSimple"
type="examples.simple.ProcessSimpleAction"
name="simpleForm"
scope="request"
input="/jsp/simple/Simple.jsp"
cancellable="true"
validate="true">
<forward name="success" path="/jsp/simple/SimpleResults.jsp"/>
</action>
</action-mappings>
1. ActionServlet接到用户的request,(如processSimple.do),在struts-config.xml里面找到相应的ActionMapping。
2. 调用processActionForm()方法,ActionServlet先检查request或session中(scope设置),是否有form bean实例存在(name设置)。如果有,返回这个实例,否则创建一个form bean实例(name设置)。然后将这个form bean实例放在request或session中。
3. 调用processPopulate(),来处理步骤2中的form bean实例,先调用ActionForm的reset()方法,然后将request的表单数据填充到ActionForm中。
4. 调用processValidate(),ActionServlet检查ActionMapping的validate设置,如果设置为false,什么都不做;如果没有设置或设置为true,将调用步骤3中form bean实例(已经填充了数据)的validate方法。