深入 Struts 1.1(3)ActionServlet
- UID
- 1066743
|
深入 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 |
|
|
|
|
|