Struts的处理页面请求的过程

来源:互联网 发布:windows loader 2.1.8 编辑:程序博客网 时间:2024/04/27 15:00

根据使用体会并结合书总结了一下这个处理过程,加深理解
我一开始作项目就用的这个框架,用熟了以后感觉挺好用的。,但好像有很多人说她不好用,说webwork好用。我没用过这个。
作用:struts 负责 web层.
要理解Struts-config.xml文件,弄清楚struts处理页面得过程。
下面为客户点击或提交form到服务器端处理,得到响应的过程
如提交×××Action.do后

1)查找servlet
Servlet容器在web..xml文件中寻找url-pattern属性为*.do的<servlet-mapping>元素:

代码
  1. <servlet-mapping>  
  2.     <servlet-name>action</servlet-name>  
  3. <url-pattern>*.do</url-pattern>  
  4. </servlet-mapping>  

servlet容器根据<servlet-mapping>元素的name属性,在web..xml文件中找到相应的servlet。
代码
  1. <servlet>  
  2.     <servlet-name>action</servlet-name>  
  3. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  4. </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的运行过程。

原创粉丝点击