Struts1核心类之RequestProcessor详解
Struts框架只允许应用中存在一个ActionServlet类,但是可以存在多个客户化的RequestProcessor类,每个子应用模块都可以有单独的RequestProcessor类,?
?
ActionServlet主要负责初始化,以及介绍请求并找到合适的RequestRrocessor,之后真正干活的是RequestProecssor和Action.?
在ActionServlet的doGet/doPost中会调用process方法而最终会调用RequestProcessor类的process方法.而在process又调用了17个 processXXX其它方法来完成工作。下面介绍这个方法.?
?
?
在RequestProcessor类的process方法中,会访问ControllerConfig、ActionMappig和ActionForward实例的属性,ControllerConfig类和struts配置文件的<controlle>r元素对应,ActionMapping类和<action>元素对应,ActionForward和<forward>元素对应,process方法通过访问这三个类实例的属性来获得相关的配置信息。
?
补充下一下调用RequestUtils的方法:
RequestUtils.applicationInstance(java.lang.String className):通过类名返回一个类实例-------processActionCreate方法中用到。
?
RequestUtils.createActionForm(HttpServletRequest request,ActionMapping mapping,ModulConfig modulConfig,ActionServlet servlet):
先从request或者session中查找ActionForm,如果存在的话就直接返回,否则就创建它的实例,把它存在request或者session范围内,在把它返回。------processActionForm方法中用到
?
RequestUtils.populate(Object obj,HttpServletRequest request):
把Http请求的参数值封装到指定的JavaBean中,请求的参数名和JavaBean的属性名相匹配,当ActionServlet把用户输入的标单数据封装到ActionForm 时,就调用它。-------processPopulate方法中用到。
?
扩展RequestProcessor只需两步即可。
1). 继承RequestProcessor,实现自定义的processXXXXX()处理方法。例如xxxRequestProcessor
2). 在struts-config.xml文件中配置xxxRequestProcessor。用户重写了RequestProcessor ,但Struts 并不知道,必须配置才可以。下面是配置本示例:
?
?