struts2笔记 文档.docx
- 文档编号:23355999
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:46
- 大小:80.85KB
struts2笔记 文档.docx
《struts2笔记 文档.docx》由会员分享,可在线阅读,更多相关《struts2笔记 文档.docx(46页珍藏版)》请在冰豆网上搜索。
struts2笔记文档
Struts2
概述
Struts2是在WebWork2基础发展而来的。
和struts1一样,Struts2也属于MVC框架。
不过有一点大家需要注意的是:
尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。
那么既然有了struts1,为何还要推出struts2。
主要是因为struts2有以下优点:
1>在软件设计上Struts2没有像struts1那样跟ServletAPI和strutsAPI有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和strutsAPI。
Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。
publicclassOrderListActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
}
}
2>Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
3>Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。
在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
4>Struts2提供支持多种表现层技术,如:
JSP、freeMarker、Velocity等
5>Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。
6>提供了全局范围、包范围和Action范围的国际化资源文件管理实现
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作:
1》找到开发Struts2应用需要使用到的jar文件.
2》编写Struts2的配置文件
3》在web.xml中加入Struts2MVC框架启动配置
搭建Struts2开发环境--开发Struts2应用依赖的jar文件
大家可以到http:
//struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip,目前最新版为2.1.8。
下载完后解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。
不同的应用需要的JAR包是不同的。
下面给出了开发Struts2程序最少需要的JAR。
struts2-core-2.x.x.jar:
Struts2框架的核心类库
xwork-core-2.x.x.jar:
XWork类库,Struts2在其上构建
ognl-2.6.x.jar:
对象图导航语言(ObjectGraphNavigationLanguage),struts2框架通过其读写对象的属性
freemarker-2.3.x.jar:
Struts2的UI标签的模板使用FreeMarker编写
commons-logging-1.x.x.jar:
ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK1.4+的日志记录。
commons-fileupload-1.2.1.jar文件上传组件,2.1.6版本后必须加入此文件
搭建Struts2开发环境--Struts2应用的配置文件
Struts2默认的配置文件为struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模版如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中,struts框架是通过Servlet启动的。
在struts2中,struts框架是通过Filter启动的。
他在web.xml中的配置如下:
--自从Struts2.1.3以后,下面的FilterDispatcher已经标注为过时
在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。
注意:
struts2读取到struts.xml的内容后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml中加入如下配置:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
访问HelloWorld应用
在struts1中,通过
在struts2中,情况就不是这样了,访问struts2中action的URL路径由两部份组成:
包的命名空间+action的名称,例如访问本例子HelloWorldAction的URL路径为:
/test/helloworld(注意:
完整路径为:
http:
//localhost:
端口/内容路径/test/helloworld)。
另外我们也可以加上.action后缀访问此Action。
Action名称的搜索顺序
.获得请求路径的URI,例如url是:
http:
//server/struts2/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到action时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“”),如果在默认namaspace的package里面还寻找不到该action,页面提示找不到action
3.寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤4;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action时就会直接跑到默认namaspace的package里面去找名字为test的action,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
4.寻找namespace为/path1的package,如果不存在这个package则执行步骤5;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action时就会直接跑到默认namaspace的package里面去找名字为test的action,在默认namaspace的package里面还寻找不到该action,页面提示找不到action
5.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。
Action配置中的各项默认值
1>如果没有为action指定class,默认是ActionSupport。
2>如果没有为action指定method,默认执行action中的execute()方法。
3>如果没有指定result的name属性,默认值为success。
Action中result的各种转发类型
result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有:
dispatcher(默认值)、redirect、redirectAction、plainText。
在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。
如下:
id=${id}
下面是redirectAction结果类型的例子,如果重定向的action中同一个包下:
如果重定向的action在别的命名空间下:
plaintext:
显示原始文件内容,例如:
当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。
--指定读取文件的编码--> 多个Action共享一个视图--全局result配置 当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。 struts1中提供了全局forward,struts2中也提供了相似功能: 为Action的属性注入值 Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。 注意: 属性必须提供setter方法。 publicclassHelloWorldAction{ privateStringsavePath; publicStringgetSavePath(){ returnsavePath; } publicvoidsetSavePath(StringsavePath){ this.savePath=savePath; } ...... } 上面通过节点为action的savePath属性注入“/images” 指定需要Struts2处理的请求后缀 前面我们都是默认使用.action后缀访问Action。 其实默认后缀是可以通过常量”struts.action.extension“进行修改的,例如: 我们可以配置Struts2只处理以.do为后缀的请求路径: xmlversion="1.0"encoding="UTF-8"? > DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd"> 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 如: 细说常量定义 常量可以在struts.xml或struts.properties中配置,建议在struts.xml中配置,两种配置方式如下: 在struts.xml文件中配置常量 在struts.properties中配置常量 struts.action.extension=do 因为常量可以在下面多个配置文件中进行定义,所以我们需要了解struts2加载常量的搜索顺序: struts-default.xml struts-plugin.xml struts.xml struts.properties web.xml 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值. 常用的常量介绍 --指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的输出--> --该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 --> --设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭--> --当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开--> --开发模式下使用,这样可以打印出更详细的错误信息--> --默认的视图主题--> –与spring集成时,指定由spring负责action对象的创建--> –该属性设置Struts2是否支持动态方法调用,该属性的默认值是true。 如果需要关闭动态方法调用,则可设置该属性为false。 --> --上传文件的大小限制--> Struts2的处理流程 为应用指定多个struts配置文件 在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。 为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。 下面的struts.xml通过 xmlversion="1.0"encoding="UTF-8"? > DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd"> 通过这种方式,我们就可以将Struts2的Action按模块添加在多个配置文件中。 动态方法调用 如果Action中存在多个方法时,我们可以使用! +方法名调用指定方法。 如下: publicclassHelloWorldAction{ privateStringmessage; .... publicStringexecute()throwsException{ this.message="我的第一个struts2应用"; return"success"; } publicStringother()throwsException{ this.message="第二个方法"; return"success"; } } 假设访问上面action的URL路径为: /struts/test/helloworld.action 要访问action的other()方法,我们可以这样调用: /struts/test/helloworld! other.action 如果不想使用动态方法调用,我们可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用。 使用通配符定义action publicclassHelloWorldAction{ privateStringmessage; .... publicStringexecute()throwsException{ this.message="我的第一个struts2应用"; return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2笔记 文档 struts2 笔记