




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章-Struts2核心解析(上),上章回顾,了解什么是Struts2概述 如何手动搭建一个Struts2开发环境 如何编写一个演示示例,教学目标,通过本节课的学习: 深度掌握Struts2工作流程 熟练配置Struts2的配置文件 数量掌握Struts2的Action的各种用法,正式课程标题,1 Struts2工作流程 核心控制器FilterDispatcher 业务控制器Action 业务模型组件 视图组件 2 Struts2 配置文件 管理元素 用户请求处理元素 错误配置,3 Struts2的Action Action实现类 Action访问ActionContext Action直接访问ServletAPI Action的配置 Action动态方法调用 通配符配置,二. Struts2核心解析 (上),2.1 Struts2工作流程 2.2 Struts2 配置文件 2.3 Struts2的Action,2.1 Struts2工作流程,Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。,2.1 Struts2工作流程,1.核心控制器FilterDispatcher 2.业务控制器Action 3.业务模型组件 4.视图组件,1.核心控制器FilterDispatcher,核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。 一个请求在Struts2框架中的处理大概分为以下几个部骤: (1)客户端提交一个请求。 (2)请求被提交到一系列过滤器(先ActionContentCleanUp,然后其他过滤器,最后FilterDispatcher )。 (3) FilterDispatcher咨询ActionMapper是否需要调用某个Action来处理这个请求,如果ActionMapper决定需要调用某个Action, FilterDispatcher则把请求的处理交给ActionProxy。 (4) ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类,1.核心控制器FilterDispatcher,(5) ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前, ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器) (6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。 struts2设计的精巧之处就是使用了Action代理,Action代理可以根据系统的配置,加载一系列拦截器,由拦截器将HttpServletRequest参数解析出来,传入Action。同样,Action处理的结果也是通过拦截器传入HttpServletResponse,然后由HttpServletRequest传给用户。 拦截器是Struts2框架的核心,通过拦截器,实现了AOP(面向方面编程)。使用拦截器,可以简化WEB开发中的某些应用,例如,权限拦截器可以简化WEB应用中的权限检查。,2.业务控制器Action,业务控制器Action是由开发者自己编写实现的,Action类可以是一个简单的Java类 ,与ServletAPI完全分离。Action一般都有一个execute()方法,也可以定义其他业务控制方法。 Struts2提供了一个ActionSupport工具类,该类实现了Action接口和validate()方法,一般开发者编写Action可以直接继承ActionSupport类。编写Action类后,开发者必须在配置文件中配置Action。一个Action的配置应该包含下面几个元素: (1)该Action的name,即用户请求所指向的URL (2)Action所对应的class元素,对应Action类的位置 (3)指定result逻辑名称和实际资源的定位 Action是业务控制器,在编写Action的时候,尽量避免将业务逻辑放到其中,尽量减少Action与业务逻辑模块或组件的耦合程度。,3.业务模型组件,业务模型组件可以是实现业务逻辑的模块,在实际开发中,对业务模型组件的区分和定义都是比较模糊的。Struts2框架的目的就是使用Action来调用业务逻辑模块。,4.视图组件,Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等。Action返回结果只是一个简单的字符串,也就是一个逻辑上的视图名称,要与实际视图资源对应,必须通过配置文件来实现。 result元素指定了逻辑视图名称和实际视图名称的对应关系。每个result都有一个type属性,其值决定视图资源类型。,2.2 Struts2 配置文件,Struts2的配置文件是整个框架的联系纽带,是配置文件将Struts2的核心控制器FilterDispatcher、业务控制器Action、视图组件等联系在一起。配置文件在Struts2框架中起到了调度作用,也是降低各类组件耦合程度的一种手段。,2.2 Struts2 配置文件,Struts2框架的配置分类如下: (1)管理元素 Bean配置 常量配置 包配置 命名空间配置 包含配置,2.2 Struts2 配置文件,(2)用户请求处理元素 拦截器配置 Action配置 result配置 (3)错误配置 异常配置,2.2 Struts2 配置文件,1 配置web.xml文件 2 配置struts.xml文件 3 常量配置 4 包配置 5 命名空间配置 6 包含配置 7 Bean配置 8 拦截器配置 9 配置perties文件 10 配置通配符 11 Struts2的零配置,1 配置web.xml文件,Web应用项目都需要一个web.xml配置文件,该文件负责整个项目进行配置。 在web.xml中加以下配置片段 struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ,2 配置struts.xml文件,struts.xml文件具有重要的位置,所有的用户请求被Struts2核心控制器截获,然后ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,来查找相应的处理Action。 struts.xml文件的作用类似于Struts2框架的“地图”。默认情况下, Struts2框架将自动加载放在WEB-INF/classes路径下struts.xml。,2 配置struts.xml文件, /demo.jsp /welcome.jsp ,2 配置struts.xml文件, 定义一个默认的包“demo”,extends=“struts-default“说明该包继承了struts-default包, struts-default包在struts2-core-2.0.14.jar的struts-default.xml文件中。,3 常量配置,开发者可以在struts.xml中配置常量,来指定Struts2的一些属性值。 除了struts.xml和perties能够配置常量,web.xml也可以配置常量。,4 包配置,Struts2使用包来管理Action、拦截器等核心组件。包就是Struts2中多个Action、多个拦截器、多个拦截器引用组成的集合。 /demo.jsp /welcome.jsp ,4 包配置,Struts2中还提供了一种抽象包,抽象包指的是该包不能包含Action定义,但是可以定义bean等其他属性,如果一个包定义为抽象包,则需该包的abstract属性为“true”。 每个package元素下可以指定下面几种属性: (1)name:必填属性,指定该包的名称,其他包继承时使用此属性 (2)extends:可选属性,该属性指定该包继承其他包,同时继承其他包中的Action、拦截器等配置。 (3)namespace:可选属性,该属性定义该包的命名空间,指定用户请求的URL目录路径 (4) abstract:可选属性,该属性为true时说明该包是抽象包,不能定义Action,默认为false,5 命名空间配置,在Struts2的Action配置中,会存在相同Action命名的问题。用户在访问时,如果不加以区分,就会出现问题。 某个包可以显示地指定命名空间为根目录,可以使用 namespace=“/”来实现。 Struts2框架的命名空间配置为开发者提供了一个类似于文件目录的管理方式,可以在不同的命名空间中定义相同的Action,这样提高了系统的灵活性。,6 包含配置,在开发一个大的应用项目时,一般都是采用模块式开发的方式,多个程序员或者开发小组独立开发某个模块,然后集成在一起。Struts2的配置文件提供了include包含配置,开发者可以使用自己定义的*.xml配置文件,并使用该文件进行调试,然后使用include包含到struts.xml配置文件中,完成一个项目的Struts2框架配置。,7 Bean配置,Struts2的特点之一就是高可扩展性,Struts2的和行组件不是以编码方式整合在框架中的,而是采用了IOC(控制反转)来管理的。Struts2是一个开发的框架结构,开发者可以编写自己的核心组件来替代或者扩展Struts2默认的组件。这也是Struts2的魅力之一。 开发者如果开发自己的核心组件,需要开发组件的实现类,并修改Struts2的配置文件,来替换或扩展Struts2框架的组件定义,并将该组件的实现类部署在IoC容器中。Struts2框架的struts-default.xml文件中就定义了大量的核心组件,使用Bean元素来描述。,7 Bean配置,配置文件中的Bean元素定义有如下属性: (1)class:为必填属性,指定了该Bean的实现类 (2)type:可选属性,指定一个Struts2接口。即定义了一个Struts2的规范,Struts2规范由接口来实现 (3)name:可选属性,指定了Bean实例的名字,但是相同type类型的多个Bean,name不能相同。 (4)scope:可选属性,指定Bean的作用范围:default,singleton,request,session和thread。 (5)static:可选属性,指定该Bean是否指定了静态方法注入。一般情况下,如果指定了type属性,则不应该再指定为true (6)optional:可选属性,指定该Bean是否是一个可选Bean 对于一般的开发者,根本没有必要重新替换或者扩展Struts2的核心组件,也没有必要在配置文件中定义Bean,Sruts2默认的Bean配置已经完全满足开发的需要了。,8 拦截器配置,拦截器是Struts2的核心内容之一。拦截器的作用就是在执行Action处理用户请求之前或者之后,执行拦截器来进行某些操作。其实这种设计思想,就是AOP(面向方面编程)的编程思想。 如果配置了拦截器,那么在执行Action的execute()方法之前,需要执行拦截器的相关处理,Struts2框架的拦截器是通过动态代理方式实现的,后面将会详细介绍。 所谓拦截器栈,就是多个拦截器组成一个组合,也可以认为拦截器栈就是一个大的拦截器。 Struts2会预先定义一些默认的拦截器,例如数据校验拦截器。,9 配置perties文件,Struts2框架一般包含两个配置文件:struts.xml文件和perties文件。struts.xml定义了包、包的命名空间、Action、拦截器和拦截器栈等信息,主要用于Struts2框架的Action映射。 perties是一个属性定义文件,该文件定义了Struts2框架中的大量属性值、常量。开发者一般可以修改perties的内容来修改Struts2框架的配置参数。 perties文件是一个标准的key-Value格式的文本文件,Key表示Struts2框架的属性名称,对应的Value就是设置的参数值。 perties文件通常放在Web应用的WEB-INF/classes路径下。Struts2框架可以自动加载该文件。其实perties文件的内容均可在struts.xml中以形式加载。,10 配置通配符,随着Struts2应用项目的代码增加,会有越来越多的Action类被编写和定义,这样会导致配置文件中的定义越来越多,难于管理。在配置文件中使用通配符,可以将相似的Action定义在一起,管理起来相对简介。,11 Struts2的零配置,Struts2可以实现“零”配置,零配置并不是不需要进行任何配置,而是配置量相对较小,典型的就是不用配置struts.xml和perties来实现Struts2框架应用。零配置的思路就是元素属性可以通过规则和注解来表达。如果在struts.xml中不定义Action,会导致系统错误,而零配置功能是通过在web.xml文件中加入注释来实现配置的。 配置FilterDispatcher时可配置actionPackages初始化参数,该参数的值是系列的包名,多个包名之间以英文逗号隔开,Struts2会自动搜索并创建这些包下的所有Action实例。 注意:Struts2的零配置特征是Struts2新功能,可能会存在一些小Bug,所以企业开发者应慎重使用该特征。Struts2的零配置特性由struts2-codebehind-plugin插件支持,所以如果需要使用这种特性,一定要将struts2-codebehind-plugin.jar文件复制到Web应用的WEB-INF/lib路径下。,11 Struts2的零配置, struts2 org.apache.struts2.dispatcher.FilterDispatcher actionPackages ch2 struts2 /* ,11 Struts2的零配置,定义了一个actionPackages,值为ch2,ch2是一个包的路径,如果用户请求一个Action,Struts2框架将会检查ch2包及其子包,在这些包下,所有实现了Action接口的或者名称以Action结尾的类都会被检查导,并被当做Action。 它规定Struts2的Action的name由该Action类名决定:如果Action类的类名有Action后缀,则该后缀将被去掉;接着把Action类名首字母小写,其他部分保持不变作为Action的name。 例如,LoginAction类所对应Action的name为login;除此之外,Action的子包可自动作为命名空间。例如,我们指定自动加载的包路径为org.leegang.actions,如果有一个Action的全限定类名为org.leegang.actions.book.EditAction,则应通过http:/localhost:8080/book/edit.action来访问该Action,EditAction的book子包将作为该Action的命名空间。,11 Struts2的零配置,通过在web.xml文件中指定Struts2自动搜索并创建Action实例,可以将需要的Action配置在Web应用中那个,并为之指定合适的name属性。但前面使用Struts2.xml文件还可以配置结果映射,即管理逻辑视图名和逻辑视图资源的映射关系。Struts2使用Annotation来指定逻辑视图名和逻辑视图资源的映射关系。 Result支持的几个参数: name value type params Results可以组合多个Result,11 Struts2的零配置,Action的execute()方法执行后返回的result定义 package com.nnny.demo.action; import org.apache.struts2.config.Result; import org.apache.struts2.config.Results; Results( Result(name=“success“,value=“/success.jsp“), Result(name=“error“,value=“/input.jsp“) )public class WelCome private String personName; public String execute() return “success“; public String getPersonName() return personName; public void setPersonName(String personName) this.personName = personName; ,11 Struts2的零配置,在Action中,不仅可以注释result,还可以注释命名空间Namespace来指定该Action所属的命名空间,这个Annotation只有一个value属性,用来指定该Action所在的包要继承的父包。 除此以外,Struts2定义Action时会让它处于某个package之下,并可以为该package指定父包。为Action指定父包使用ParentPackage Annotation,这个Annotation只有一个value属性,用于指定该Action所在的package 。,2.3 Struts2的Action,1 Action实现类 2 Action访问ActionContext 3 Action直接访问ServletAPI 4 Action的配置 5 Action动态方法调用 6 通配符配置,1 Action实现类,对于Struts2来说,其最大的特点就是实现了Action和ServletApi的分离。 一般来说,Struts2框架中的Action会直接封装Http请求参数,一般的Action会包含与请求参数对应的属性,并提供该属性的getter和setter方法。 一般来说,不会区分Action的属性是否为传入的还是传出的,Struts2提供了一个类似于”仓库”的机制,Action可以使用getter和setter方法从“仓库”中存入或者取出属性值,只要包含用户Http请求参数的getter和setter方法即可。用户的Http也是通过post向“仓库”中传入值或者从“仓库”中取出值的。,1 Action实现类,为了规范用户开发Action的实现类,Struts2框架提供了一个Action接口,该接口提供了一个通用的规范。 Action接口很简单,定义了SUCCESS,NONE,ERROR,INPUT和LOGIN常量,开发者在编写自己的类时,实现Action接口,就可以在execute()方法中返回SUCCESS,NONE,ERROR,INPUT和LOGIN,而不是自己随意书写字符串,这样就规范了代码。,1 Action实现类,Struts2预设了一个工具类ActionSupport,该类已经实现了Action接口,并定义了execute()方法和数据校验validate()方法;除此之外,还包含了很多如异常处理,国际化等一系列常用方法。 开发者在编写自己的Action时,只要继承ActionSupport类就可以了,这样可以更加方便、快捷地实现业务控制器。,2 Action访问ActionContext,Struts2框架中有一个ActionContext类,该类中包含了所有将会访问的数据,Struts2框架的Action可以通过访问ActionContext来获得ServletAPI。 ActionContext是一个Action执行上下文,Action执行期间所用到的对象都保存到ActionContext中,例如Session、参数等数据。 ActionContext是一个局部线程,这意味着每个线程中的ActionContext内容都是唯一的。所以开发者也不必但心Action的线程安全。 开发者可以使用下面代码访问ActionContext ActionContext context=ActionContext.getContext();,3 Action直接访问ServletAPI,Struts2框架还提供了ServletActionContext辅助类来帮助开发者获得ServletAPI HttpServletRequest request=ServletActionContext.getRequest(); HttpServletResponse response=ServletActionContext.getResponse(); HttpSession session=request.getSession();,4 Action的配置,一个Action配置模块就是Web项目的“模块”,正式通过struts.xml配置文件或者其包含的配置文件来实现Action配置的。在Struts2框架中每一个Action都是一个工作单元。Action负责将一个请求对应到一个Action处理上面去,每当一个Action类匹配一个请求的时候,这个Action类就会被Struts2框架调用。 在一个Struts2应用程序中,一个指向Ac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药物计算相关知识考察模拟测试卷答案及解析
- 2025年外科胸腔镜手术模拟考试答案及解析
- 2025年产科紧急情况处理技能考核试卷答案及解析
- 丰润区2024-2025学年第二学期六年级数学期末学业展示试卷及答案
- 北京市顺义区2024-2025学年七年级上学期期末质量监测语文试卷及答案
- 2025YY经贸职业技术学院YY信息管理系统采购安装合同
- 2025年农业与食品行业农产品品牌建设策略报告
- 2025年AI伦理合规专员隐私影响评估考核题(含答案与解析)
- 混凝土制品质检员专业技能考核试卷及答案
- 2025年职业技能认证跨境培训平台市场竞争力评估报告
- 中东及非洲天然甜菊行业现状及发展机遇分析2024-2030
- 《山区公路桥梁典型病害手册(试行)》
- 常熟理工学院图书馆考试完整题库
- 招聘诚信承诺书
- 临床中医适宜技术书
- 装配式混凝土检查井施工及验收规程
- 矿山生态环境保护与恢复治理技术规范(试行)(HJ 651-2013)
- 2024小红书无货源精细化铺货实战课程
- 学生实习家长知情同意书(完美版)
- 涉警网络负面舆情应对与处置策略
- 新译林版高一必修三单词表全套
评论
0/150
提交评论