Struts控制器组件-ActionServlet
来源:互联网 发布:windows建立软链接 编辑:程序博客网 时间:2024/06/03 02:08
org.apache.struts.action.ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都是先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件,Struts框架只允许在一个应用中配置一个ActionServlet类,在应用的生命周期中,仅创建ActionServlet类的一个实例,这个ActionServlet实例可以同时响应多个用户请求。
1. Struts框架初始化过程
Servlet容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类,这两种情况下,Servlet容器都会在ActionServlet被加载后立即执行它的init()方法,这可以保证当ActionServlet处理用户请求时已经被初始化,init()其流程如下:
(1) 调用initInternal()方法,初始化Struts框架内在的消息资源,如与系统日志相关的通知、警告和错误消息。
(2) 调用initOther()方法,从web.xml中加载ActionServlet的初始化参数,如config。
(3) 调用initServlet()方法,从web.xml文件中加载ActionServlet的URL映射信息。此外还会注册web.xml和Struts配置文件所使用的DTD文件,这些DTD文件用来验证web.xml和Struts配置文件的语法。
(4) 调用initModuleConfig()方法,加载并解析默认子应用模块的Struts配置文件;创建ModuleConfig对象,把它存储在ServletContext中。
(5) 调用initModuleMessageResources()方法,加载并初始化默认子应用模块的消息资源;创建MessageResources对象,把它存储在ServletContext中。
(6) 调用initModuleDataSources()方法,加载并初始化默认子应用模块的数据源。如果在Struts配置文件中没有配置<data-sources>元素,忽略此步。
(7) 调用initModulePlugins()方法,加载并初始化默认子应用模块的所有插件。
(8) 当默认子应用模块被成功地初始化后,如还包括其他子应用模块,将重复以上流程4-7,分别对其他子应用模块进行初始化。
2. ActionServlet的process()方法
当ActionServlet实例接收到HTTP请求后,在doGet()或doPost()方法中都会调用process()方法来处理请求,ActionServlet的process()方法代码:
protected void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
ModuleUtils.getInstance().selectModule(request, getServletContext() );
getRequestProcessor(getModuleConfig(request)).process(request,response);
}
selectModule()方法选择负责处理当前请求的子应用模块,然后把子应用模块相关的ModuleConfig和MessageResources对象存储到request范围中,这使得框架的其余组件可以方便地从request范围中读取这些对象,从而获取应用配置信息和消息资源。process()方法完成实际的预处理请求操作。
3. 扩展ActionServlet方法
从Struts1.1开始,多数功能被移到org.apache.struts.action.RequestProcessor类中,以便减轻ActionServlet类的控制负担。如实际应用确实要扩展ActionServlet类,则可以创建一个ActionServlet类的子类,然后在web.xml文件中配置这个客户化ActionServlet类,覆盖init()方法时,一定注意在init()中加上super.init(),保证ActionServlet默认的初始化操作正确执行。web.xml配置:
<servlet>
<servlet-name>netstore</servlet-name>
<servlet-class>netstore.framework.ExtendedActionServlet</serlvet-class>
</servlet>
<servlet-mapping>
<servlet-name>netstore</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
“/action/*”表明ActionServlet负责处理所有以action开头的URL。
- Struts控制器组件-ActionServlet
- struts控制器组件--actionServlet类
- Struts控制器ActionServlet
- Struts ActionServlet控制器对象
- struts控制器actionServlet
- SSH-Struts(二)—控制器(ActionServlet)
- Struts控制器组件
- Struts控制器组件
- 定制Struts控制器组件
- Struts控制器组件
- Struts控制器组件
- Struts控制器组件-RequestProcess
- Struts控制器组件-Action
- 定制Struts控制器组件
- Struts控制器组件
- 定制Struts控制器组件
- Struts控制器组件
- Struts控制器组件
- 100行Java代码构建一个线程池
- JAVA-字符串处理中的重点
- 做一个简单的访问来源统计
- SQL Server日期计算
- Java数据库接口JDBC入门基础讲座
- Struts控制器组件-ActionServlet
- java api-cn online
- 一个简单的基于System.Web.Mail的ASP.Net邮件发送程序
- 质量事故——警钟长鸣,向《Ajax设计模式与最佳实践》的译者们道歉!
- 如何用DOS命令结束一个进程
- 结束进程的 DOS 命令
- DataTable操作中的性能问题
- 用泛型时遇到的尴尬问题
- 透过IT看人性