在Struts中,担任MVC/Model 2控制器角色核心的是ActionServlet,所有的请求都必须先通过它,在Struts 1.1中,有关于请求的处理大部份已交由RequestProcessor,当ActionServlet收到GET或POST的请求,其doGet()或doPost()会呼叫process()方法来处理请求:
代码: |
protected void process(HttpServletRequest request, |
RequestUtils是个工具类,ActionServlet呼叫其selectApplication()方法,藉由request.getServletPath()来取得请求路径以选择应用程序模块来处理请求,之后从ApplicationConfig对象取得RequestProcessor对象,将使用者的请求委托它来进行处理。
通常我们将ActionServlet当作黑盒子,我们只是使用它,然而您也可以继承ActionServlet来定义自己的控制器,但由于在Struts 1.1中大部份的请求已经委托RequestProcessor来处理,继承ActionServlet来定义自己的控制器请求处理意义已经不大,通常的目的是重新定义ActionServlet的init()方法,增加自己的初始化动作:
代码: |
public class CustomActionServlet extends ActionServlet { |
预设的RequestProcessor对象是org.apache.struts.action.RequestProcessor,您可以藉由观看process()方法的原始码来了解它作了哪些事情:
代码: |
public void process(HttpServletRequest request, |
您可以继承RequestProcessor,并改写其中的processXXXXX()方法来自定义请求的处理方式,如果您要使用自己的RequestProcessor,要要在struts-config.xml中使用<controller>卷标来定义,例如:
代码: |
<controller |
在Struts 1.1中,新增了<controller>卷标,它用于指定给ActionServlet的一些参数,在Struts 1.1之前,这些参数是在<init-params>中加以指定,使用<controller>卷标,应用程序中不同的模块也可以指定各自的参数给ActionServlet。
本文详细解析了Struts框架中的核心控制器ActionServlet及其处理流程,包括如何通过RequestProcessor处理请求,以及如何定制自己的控制器。

被折叠的 条评论
为什么被折叠?



