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的位置。


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

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

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


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

方法

功能

processPath

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

processMapping

利用路径来获得相应的 ActionMapping

processActionForm

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

processActionCreate

初始化 Action

processActionPerform

调用 Action 的 execute 方法

processForwardConfig

处理 Action 返回的 ActionForward

你可能感兴趣的:(servlet)