正文

Struts的控制层2007-03-12 22:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23882.html

分享到:


担任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"/>
struts-config.xml:

阅读(1966) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册