Struts的控制层

来源:互联网 发布:uicideboy 知乎 编辑:程序博客网 时间:2024/05/16 10:10

Struts的控制层的生命周期:


担任MVC/Model 2控制器角色核心的是ActionServlet.
ActionServlet必须在web.xml里进行配置。具体配置参数参见“web.xml参数设置.doc”
Servlet容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类,在上述情况下,Servlet容器都会在ActionServlet被加载后立即执行它的init()方法。具体的init()方法代码解读参见“ActionServlet的init()方法.doc”。
可以继承ActionServlet来定义自己的控制器,通常的目的是重新定义ActionServlet的init()方法,增加自己的初始化动作:
定义如下的类:
import sample;
public class ExtendedActionServlet extends ActionServlet {
        public void init() throws ServletException {
               super.init();
               //加入自己的代码
               ……………
        }
}
扩展完类后,还应该在web.xml文件中如下配置:
<servlet>
        <servlet-name>sample</servlet-name>
        <servlet-class>sample.ExtendedActionServlet</servlet-class>
</servlet>
<servlet-mapping>
       <servlet-name>sample</servlet-name>
       <url-pattern>/ *.do<url-pattern>
<servlet-mapping>
客户端的所有请求都必须先通过ActionServlet,在Struts 1.1中,有关于请求的处理大部份已交由RequestProcessor,当ActionServlet收到GET或POST的请求,其doGet() 或doPost()会呼叫process()方法来处理请求:
ActionServlet的doGet()方法:
    /**
     * Process an HTTP "GET" request.
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public void doGet(HttpServletRequest request,
              HttpServletResponse response)
        throws IOException, ServletException {

        process(request, response);

    }

ActionServlet的doPost()方法:
    /**
     * Process an HTTP "POST" request.
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public void doPost(HttpServletRequest request,
               HttpServletResponse response)
        throws IOException, ServletException {
        process(request, response);
    }
ActionServlet的process()方法:
protected void process(HttpServletRequest request,
                             HttpServletResponse response)
throws IOException, ServletException {
    //取得请求路径以选择应用程序模块来处理请求
    RequestUtils.selectApplication(request, getServletContext());
    /* getApplicationConfig(request)获得Applicationconfig对象
    * Applicationconfig对象调用getProcessor()方法获得RequestProcessor对象
    * RequestProcessor对象调用process()方法处理请求,具体的方法代码参见“RequestProcessor的process()方法.doc”
    */
    getApplicationConfig(request).getProcessor().process(request, response);
}
您可以继承RequestProcessor,并改写其中的processXXXXX()方法来自定义请求的处理方式
 
如果您要使用自己的 RequestProcessor,要要在struts-config.xml中使用<controller>标签来定义,例如:
struts-config.xml中:
<controller
    contentType="text/html;charset=GB2312"
   nocache="true"
    processorClass="onlyfun.caterpillar.CustomRequestProcessor"/>

原创粉丝点击