首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

深入 Struts 1.1(3)ActionServlet

深入 Struts 1.1(3)ActionServlet

ActionServlet我们首先来了解 MVC 中的控制器。在 Struts 1.1 中缺省采用 ActionServlet 类来充当控制器。当然如果 ActionServlet 不能满足你的需求,你也可以通过继承它来实现自己的类。这可以在 /WEB-INF/web.xml 中来具体指定。
要掌握 ActionServlet,就必须了解它所扮演的角色。首先,ActionServlet 表示 MVC 结构中的控制器部分,它需要完成控制器所需的前端控制及转发请求等职责。其次,ActionServlet 被实现为一个专门处理 HTTP 请求的 Servlet,它同时具有 servlet 的特点。在 Struts 1.1 中它主要完成以下功能:      
  • 接收客户端请求
  • 根据客户端的 URI 将请求映射到一个相应的 Action 类
  • 从请求中获取数据填充 Form Bean(如果需要)
  • 调用 Action 类的 execute() 方法获取数据或者执行业务逻辑
  • 选择正确的视图响应客户
此外,ActionServlet 还负责初始化和清除应用配置信息的任务。ActionServlet 的初始化工作在 init 方法中完成,它可以分为两个部分:初始化 ActionServlet 自身的一些信息以及每个模块的配置信息。前者主要通过 initInternal、initOther 和 initServlet 三个方法来完成。
我们可以在 /WEB-INF/web.xml 中指定具体的控制器以及初始参数,由于版本的变化以及 Struts 1.1 中模块概念的引进,一些初始参数被废弃或者移入到 /WEB-INF/struts-config.xml 中定义。下面列出所有被废弃的参数,相应地在 web.xml 文件中也不鼓励再使用。
  • application
  • bufferSize
  • content
  • debug
  • factory
  • formBean
  • forward
  • locale
  • mapping
  • maxFileSize
  • multipartClass
  • nocache
  • null
  • tempDir
ActionServlet 根据不同的模块来初始化 ModuleConfig 类,并在其中以 XXXconfig 集合的方式保存该模块的各种配置信息,比如 ActionConfig,FormBeanConfig 等。
初始化工作完成之后,ActionServlet 准备接收客户请求。针对每个请求,方法 process(HttpServletRequest request, HttpServletResponse response) 将被调用。该方法指定具体的模块,然后调用该模块的 RequestProcessor 的 process 方法。
1
2
3
4
5
6
protected void process(HttpServletRequest request,
        HttpServletResponse response)
        throws IOException, ServletException {
    RequestUtils.selectModule(request, getServletContext());
    getRequestProcessor(getModuleConfig(request)).process(request, response);
}




RequestProcessor 包含了 Struts 控制器的所有处理逻辑,它调用不同的 processXXX 方法来完成不同的处理。下表列出其中几个主要的方法:
方法功能processPath获取客户端的请求路径processMapping利用路径来获得相应的 ActionMappingprocessActionForm初始化 ActionForm(如果需要)并存入正确的 scope 中processActionCreate初始化 ActionprocessActionPerform调用 Action 的 execute 方法processForwardConfig处理 Action 返回的 ActionForward
返回列表