Struts的处理页面请求的过程

作用:struts 负责 web层.
要理解Struts-config.xml文件,弄清楚struts处理页面的过程。
下面为客户点击或提交form到服务器端处理,得到响应的过程
如提交×××Action.do后
1)查找servlet
Servlet容器在web..xml文件中寻找url-pattern属性为*.do的<servlet-mapping>元素:
<servlet-mapping>   
    <servlet-name>action</servlet-name>   
<url-pattern>*.do</url-pattern>   
</servlet-mapping> 

servlet容器根据<servlet-mapping>元素的name属性,在web..xml文件中找到相应的servlet。
<servlet>   
    <servlet-name>action</servlet-name>   
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>   
</servlet>  

2)找到相应action
servlet容器把请求转发给ActionServlet,这个servlet根据请求路径,在struts的配置文件里按照这个路径找到相应的XXXaction,(其实ActionServlet检索的是ActionMapping对象,在容器启动的时候,初始化Actionservlet会加载struts-config.Xml文件,把配置信息放到相应的配置类实例里,如Action的配置信息就放在ActionMapping对象中,里面是个map,每个action元素可以有多个forward子元素,每个forward子元素配置信息放在一个ActionForward对象里)

3)给form赋值
ActionServlet根据action元素的name属性,创建一个form对象,把客户从页面提交的表单数据传给form对象,一般是request范围内有效(我经常用动态formbean,struts把提交的数据组装成对象放到form里,挺好用的)。

4)表单验证
如果validate属性为true,ActionServlet会调用form对象的validate方法进行表达验证。此方法返回ActionErros对象,里面包含ActionMessage对象,封装了错误消息。如果没有ActionMessage对象表示验证成功,并放在request范围内。
用struts的表单验证也比较好用,需求加两个文件validation.xml,validator-rules.xml。关于这个东东,我在单独写她怎么用

5)action进行真正的业务处理
ActionServlet查找XXXaction实例是否存在,不存在就创建一个实例,然后调用他的excute方法。
在这里可以调用service的一些方法,进行crud操作。

6)返回forward,转到客户端
最后调用mapping.findForward(“forward”)方法,从action元素中查找name为XXXActin的forward子元素,然后返回ActionForward对象。其实就是查找ActionMapping本身的HashMap。
Excute()方法把ActionForward对象返回给ActionServlet,ActionServlet根据这个forward把响应转到具体页面。

到此对一个请求的处理完毕。里面贯穿了struts的运行过程。

你可能感兴趣的:(apache,xml,Web,servlet,struts)