Struts(三)ActionServlet

Struts框架中所使用的组件有:

  ActionServlet 控制器

  ActionClass是开发者自己写的类,包含事务逻辑,。

  ActionForm 显示模块数据

  ActionMapping 帮助控制器将请求映射到操作

  ActionForward 用来指示操作转移的对象

  ActionError 用来存储和回收错误

  Struts标记库可以减轻开发显示层次的工作

       首先介绍控制器ActionServlet在框架中所扮演的角色和责任。

            框架中的控制器组件是由org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。

       Struts 的ActionServlet 控制导航流。他是web容器首先调用的类。

       当 ActionServlet 从容器接收到一个请求, ActionServlet 通过查找请求的路径可以决定使用哪个ActionForm,它使用URI来决定哪个Action 将用来处理请求。以后的所有控制操作也是从ActionServlet开始进行调用的。

       Struts controller基本功能是:

       1. 截获用户的Http请求

       2. 把这个请求映射到相应的Action类,如果这是此类收到的第一个请求,将初始化实例并缓存。

       3. 创建或发现一个ActionForm实例(看配置文件是否定义),然后将请求过程传递到写一个业务层。

       4. 调用Action实例的processActionPerform方法并将ActioForm bean,ActionMapping对象,request和response对象传给它。  

       5.processActionPerform返回一个ActionForward对象,此对象连接到相应的jsp页面.

         具体的调用流程参见上一篇文章。

      我们需要在web.xml中声明ActionServlet,并且将它配置成启动时进行加载。

        <load-on-startup>2</load-on-startup>表明ActionServlet在web容器启动是加载。即当web容器启动的时候就知道了Struts这个框架的存在了。

        <servlet-mapping>配置的信息是让web容器知道待请求什么样(*.do)URL格式的时候使用ActionServlet,<servlet-name>action</servlet-name>则告诉web容器ActionServlet的位置。

  1. ActionServlet配置 
  2.  
  3. <servlet> 
  4.  
  5.      <servlet-name>action</servlet-name> 
  6.  
  7.      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>      
  8.  
  9.      <load-on-startup>2</load-on-startup> 
  10.  
  11. </servlet> 
  12.  
  13. <!-- Standard Action Servlet Mapping --> 
  14.  
  15. <servlet-mapping> 
  16.  
  17.       <servlet-name>action</servlet-name> 
  18.  
  19.       <url-pattern>*.do</url-pattern> 
  20.  
  21. </servlet-mapping> 


        ActionServlet提供了一组能够被Action对象使用的方法。如果 ActionServlet 不能满足我们的需求,我们也可以通过继承它来实现自己的类。当然还需要在 /WEB-INF/web.xml 中来具体指定。否则web容器也不知道我们写的类。

       此外,ActionServlet 还负责初始化和清除应用配置信息的任务。ActionServlet 的初始化工作在 init 方法中完成,它可以分为两个部分:初始化 ActionServlet 自身的一些信息以及每个模块的配置信息。前者主要通过 initInternal、initOther 和 initServlet 三个方法来完成。

      初始化工作完成之后,ActionServlet 准备接收客户请求。针对每个请求,方法 process(HttpServletRequest request, HttpServletResponse response) 将被调用。该方法指定具体的模块,然后调用该模块的 RequestProcessor 的 process 方法。

  1. protected void process(HttpServletRequest request, 
  2.  
  3.    HttpServletResponse response) 
  4.  
  5.              throws IOException, ServletException { 
  6.  
  7.        RequestUtils.selectModule(request, getServletContext()); 
  8.  
  9.        getRequestProcessor(getModuleConfig(request)).process(request, response); 
  10.  


       RequestProcessor 是控制器中的一个非常重要的类,在调用了ActionServlet之后,就是RequestProcessor这个类起作用了,包含了 Struts 控制器的几个核心的处理逻辑,它调用不同的 processXXX 方法来完成不同的处理。下表列出其中几个最主要的方法,这几个方法在上一篇文章的具体流程中都用到了,简单列举如下。

方法

功能

processPath

获取客户端的请求路径,截取到有用路径

processMapping

利用路径来获得相应的 ActionMapping

processActionForm

初始化 ActionForm(如果需要)并存入正确的 scope 中

processActionCreate

初始化 Action

processActionPerform

调用 Action 的 execute 方法

processForwardConfig

处理 Action 返回的 ActionForward

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值