Struts处理请求的过程

来源:互联网 发布:淘宝第三方推广 编辑:程序博客网 时间:2024/03/29 21:59

Struts的核心控制组件是:ActionServlet,它是org.apache.struts.action.ActionServlet类型的Servlet

      他继承javax.Servlet.Http.HttpServlet,并实现了init()doGet()/doPost()destroy()Servlet生命周期所用到的方法。还添加了一个process(),它本身不复杂,但它会调用其他的复杂方法。

      spring框架有一样,web容器在启动的时候,先是初始化web.xml中配置的ActionServletActionServlet再加载配置文件。(配置文件写明了不同的请求的不同的ActionMapping)

      其它接受客户端请求的作出响应的过程如下:

1.    查找servlet并找到相应的action

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

2Servlet容器根据<servlet-mapping>元素的name属性,在web..xml文件中找到相应的servlet

2.    查找相应的action

1Servlet根据浏览器是post还是get请求调用doPost()doGet()方法,在其中调用ActionServletprocess()方法。

2Process()获取RequestProcessor对象,调用RequestProcessor对象的process()方法。

3 RequestProcessor对象的Process()方法,读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URIaction元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的name匹配值找到相应的ActionForm bean

3.    Actionform重设,赋值,验证

       1、创建新的ActionFormc对象。

       2、保存ActionForm对象。

              保存为用户请求(request)或会话(session)的属性。Actionform的作用域由ActionMapping配置中的scope属性值来决定。名称为配置文件中的ActionMapping中的Attributte决定。

       2、调用ActinFormreset()方法初始化ActionForm

              调用reset方法的目的是为了对ActionForm中的值进行复位操作。通常情况要覆盖reset()方法,把ActionForm的值恢复为默认值。

       3、调用ActionForm beansetter方法为AtionForm赋值。

       4、验证。

如果validate属性为trueActionServlet会调用form对象的validate方法进行表达验证。此方法返回ActionErros对象,里面包含ActionMessage对象,封装了错误消息。通过标记库的errors标记可以将这里返回的错误信息显示在页面上。Validate()没有返回任何异常,那么就会继承进行下面的处理。

strutsValidator验证组件比较好用,需求加两个文件validation.xmlvalidator-rules.xml。这个组件的使用我会在下一次说明。

4.    action进行真正的业务处理

ActionServlet查找这个XXaction实例是否存在,不存在就创建一个实例,然后调用他的excute方法进行业务处理。

5.         返回forward,转到客户端

最后调用mapping.findForward(“abc”)方法,从ActionMapping元素中查找nameabcforward元素,然后返回这个forward元素对应的页面。其实就是查找ActionMapping本身的HashMap

 

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

 

原创粉丝点击