第四课 Struts的控制器组件详解

Struts的控制器组件

1. Struts的控制器组件组成:

–ActionServlet组件:充当Struts框架的中央控制器

–RequestProcessor组件:充当每个子应用模块的请求处理器

–Action组件:负责处理一项具体的请求

2.Struts的控制器组件主要完成的任务:

–接收用户请求

–根据用户请求,调用合适的模型组件来执行相应的业务逻辑

–获取业务逻辑执行结果

–根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户

(1)ActionServlet类:

–ActionServlet是Struts的核心控制器组件。一个Struts应用只有一个ActionServlet实例。

负责主力所有用户的请求。

–Servlet容器在启动时,或者在用户首次请求时创建ActionServlet的实例。

(2)ActionServlet的初始化步骤:

–调用initInternal()方法,初始化Struts框架内在的消息资源。

–调用initOther()方法,从web.xml文件中加载ActionServlet的初始化参数。

–调用initServlet()方法,从web.xml文件中加载ActionServlet的URL映射信息。

–调用initModuleConfig()方法,加载并解析默认子应用模块的Struts配置文件,创建ModuleConfig对

象,把它存在ServletContext中。

–调用initModuleMessageResources()方法,加载并初始化默认子应用模块的消息资源,创建

MessageResuorces对象,并将它存储在ServletContext中。

–调用initModuleDataSources()方法,加载并初始化默认子应用模块的数据源。

–调用initModulePlugins()方法,加载并初始化默认子应用模块的所有插件。

–重复4~7初始化其它子模块

如图:

3.ActionServlet的process()方法:

–当ActionServlet实例接收到HTTP请求后,在doGet()或doPost()方法中都会调用process()方法来处理请求。

以下是ActionServlet的process()方法的源代码:

protected void process(HttpServletRequestrequest,

HttpServletResponse response)

throws IOException, ServletException {

ModuleUtils.getInstance().selectModule(request,

getServletContext());

getRequestProcessor(getModuleConfig(request)).process(request, response);

}

4.RequestProcessor的process()方法:

–调用processMultipart()方法。如果HTTP请求方式为POST,并且请求的contentType属性           以“multipart/formdata”开头,

标准的HttpServletRequest对象将被重新包装,以方便处

理“multipart”类型的HTTP请求。如果请求方式为GET,

或者contentType属性不是“multipart”,就直接返回原始

的HttpServletRequest对象。

–调用processPath()方法,获得请求URI的路径,这一信息

可用于选择合适的Struts Action组件。

–调用processLocale()方法,当ControllerConfig对象

的locale属性为true,将读取用户请求中包含的

Locale信息,然后把Locale实例保存在session范围内。

–调用processContent()方法,读取ControllerConfig对

象的contentType属性,然后调用

response.setContentType(contentType)方法,设置响应结果的文档类型和字符编码。

–调用processNoCache() 方法,读取ControllerConfig

对象的nocache属性,如果nocache属性为true,在

响应结果中加入特定的头参数: Pragma、Cache-Control和Expires,防止页面被存储在客户浏览器的缓存中。

–调用processPreprocess()方法。该方法不执行任何操作,直接返回true。子类可以覆盖这个方

法,执行客户化的预处理请求操作。

–调用processMapping()方法,寻找和用户请求的URI匹配的ActionMapping。如果不存在这样的

ActionMapping,向用户返回恰当的错误消息。

–调用processRoles()方法,先判断是否为Action配置了安全角色。如果配置了安全角色,就调用

isUserInRole()方法判断当前用户是否具备必需的角色。如果不具备,就结束请求处理流程,向

用户返回恰当的错误消息。

–调用processActionForm()方法,先判断是否为ActionMapping配置了ActionForm。如果配置了

ActionForm,就先从ActionForm的存在范围内寻找该ActionForm实例,如果不存在,就创建一个实

例。接下来把它保存在合适的范围中,保存时

使用的属性key为ActionMapping的name属性。

–调用processPopulate()方法。如果为ActionMapping

配置了ActionForm,就先调用ActionForm的reset()方法,再把请求中的表单数据组装到ActionForm中。

–调用processValidate()方法,如果为ActionMapping配置了

ActionForm,并且ActionMapping的validate属性为true,就调

用ActionForm的validate()方法。如果validate()方法返回的

ActionErrors对象中包含ActionMessage对象,说明表单验

证失败,就把ActionErrors对象存储在request范围内,再

把请求转发到ActionMapping的input属性指定的Web组件。

如果ActionForm的validate()方法执行表单验证成功,就继续执行下一步请求处理流程。

–调用processForward()方法,判断是否在ActionMapping中配

置了forward属性。如果配置了这个属性,就调用

RequestDispatcher的forward()方法,请求处理流程结束,否则继续下一步。

–调用processInclude()方法,判断是否在ActionMapping中配置了include属性。如果配置了

这个属性,调用RequestDispatcher的include()方

法,请求处理流程结束,否则继续下一步。

–调用processActionCreate()方法,先判断是否在Action缓存中存在这个Action实例,如果不存在,

就创建一个Action实例,把它保存在Action缓存中。

时间: 2024-11-02 23:40:59

第四课 Struts的控制器组件详解的相关文章

第三课 第四讲03_04_Linux用户及权限详解

第三课 第四讲03_04_Linux用户及权限详解1.库和进程是同级的.进程可以获取CPU时间,内存地址,调用各种文件2.权限:定义了计算机资源和服务的访问能力叫权限3.逻辑容器,用户 关联权限就是用户组.用于指派权限,不能独立登陆 4.文件属主,文件属组,其他,5.用户和组在计算机里面就是个标识符6.进程也有属主和属组进程的安全上下文(secure context),进程属主和资源属主7.文件r,w,xr:read可读,可用使用文件查看命令cat等命令查看文件内容w:write可写.可用使用文

Android 四大组件 详解

[置顶] Android四大组件详解 分类: Android四大组件2013-02-09 16:23 19411人阅读 评论(13) 收藏 举报 Android开发 注:本文主要来自网易的一个博主的文章,经过阅读,总结,故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个

基于jQuery的TreeGrid组件详解

一.TreeGrid组件相关的类 1.TreeGrid(_config) _config:json格式的数据,组件所需要的数据都通过该参数提供. 2.TreeGridItem(_root, _rowId, _rowIndex, _rowData) _root:显示组件实例的目标容器对象. _rowId:选中行的id. _rowIndex:选中行的索引. _rowData:json格式的行数据. 二._config参数详解 id:组件实例的id. width:组件实例的宽度. renderTo:用

vue.js基础知识篇(6):组件详解

第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 Vue.js的组件注册分为全局注册和局部注册. 全局注册使用Vue.component方法.第一个参数是组件名字,第二个参数是组件的构造函数,要么是function,要么是object. <!DOCTYPE html> <html lang="en"> <hea

Android组件系列----Activity组件详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3924567.html 联系方式:[email protected] [正文] 注:四大组件指的是应用组件:Activity.Service.BroadcastReceiver.ContentProvider:之前的控件指的是UI组件. 博文目录: 一.Activity简介 二.Activity的状

Tomcat系列之服务器的安装与配置以及各组件详解

Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 x86_64,软件版本为jdk-7u40.apache-tomcat-7.0.42.博文中的所有软件请到这里下载:http://yunpan.cn/QGBCLwrZnpLMS. 一.前言 在上一篇博文中我们主要讲解的Tomcat的基础知识以及相关的Java知识,对于不怎么清楚的博友可以参考一下:h

Android中Intent组件详解

Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作.与动作有关的数据等.Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将 Intent对象传递给所找到的组件,Android的媒婆任务就完成了. 在Google Doc中是这样描述Intent的(摘自Android中文翻译组)当接收到ContentR

struts拦截器的详解

1.拦截器:Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. WebWork中文文档解释:拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也提供了一种可以提取Action中可重用的代码的方式. 拦截器栈(Interceptor Stack):Struts2拦截器栈就是将拦截器按

Android基础之十四数据存储 之 SQLite数据库详解

Android基础之十四数据存储 之 SQLite数据库详解 SQLite 是一款 轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用. SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID( 原子性(Atomicity) .一致性(Consistency) . 隔离性(Isolation) . 持久性(Durability))事务,所以只要你以前使用过其他的关系型数据库,就可以很快地上手 SQLite.而