struts2笔记整理.docx
- 文档编号:30633509
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:23
- 大小:51.85KB
struts2笔记整理.docx
《struts2笔记整理.docx》由会员分享,可在线阅读,更多相关《struts2笔记整理.docx(23页珍藏版)》请在冰豆网上搜索。
struts2笔记整理
Struts2.x笔记
一、Struts2.x概述
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文件.
大家可以到http:
//struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip,目前最新版为2.1.6。
下载完后解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。
不同的应用需要的JAR包是不同的。
下面给出了开发Struts2程序最少需要的JAR。
struts2-core-2.x.x.jar:
Struts2框架的核心类库
xwork-2.x.x.jar:
XWork类库,Struts2在其上构建
ognl-2.6.x.jar:
对象图导航语言(ObjectGraphNavigationLanguage),struts2框架通过其读写对象的属性
freemarker-2.3.x.jar:
Struts2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar:
ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK1.4+的日志记录。
commons-fileupload-1.2.1.jar文件上传组件,2.1.6版本后必须加入此文件
2)编写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">
extends="struts-default"> 在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。 在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。 配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,他不对应java的类包,如果其他包要继承该包,必须通过该属性进行引用。 包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分,如访问上面例子的Action,访问路径为: /test/helloworld.action。 namespace属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。 通常每个包都应该继承struts-default包,因为Struts2很多核心的功能都是拦截器来实现。 如: 从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。 struts-default定义了这些拦截器和Result类型。 可以这么说: 当包继承了struts-default才能使用struts2提供的核心功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载struts-default.xml文件。 包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含action。 将struts2.x放于WEB-INF/class目录下,在开发阶段可将其放在src目录下 3)在web.xml中加入Struts2MVC框架启动配置 在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-blank-2.1.2.war复制到tomcat的webapps中,重启Tomcat,系统会自动将其解压,类似地,其他****.war文件亦同。 三、访问struts2.x的Action 在struts1中,通过 在struts2中,情况就不是这样了,访问struts2中action的URL路径由两部份组成: 包的命名空间+action的名称,例如访问本例子HelloWorldAction的URL路径为: /test/helloworld(注意: 完整路径为: http: //localhost: 端口/内容路径/test/helloworld)。 另外我们也可以加上.action后缀访问此Action。 四、Action访问的搜索顺序 1.获得请求路径的URI,例如url是: http: //server/struts2/path1/path2/path3/test.action 2.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package则转步骤3; 3.寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package,则转步骤4; 4.寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个package,就去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串""),如果还是找不到,页面提示找不到action。 五、Action配置中的各项默认值 1>如果没有为action指定class,默认是ActionSupport。 2>如果没有为action指定method,默认执行action中的execute()方法。 3>如果没有指定result的name属性,默认值为success。 六、Action中result的各种转发类型 引言: 在strut1.x中Action转发有两种类型: 1、服务器内部请求转发 2、浏览器重定向 注: 在浏览器重定向不能访问到WEB-INF目录下的试图文件,只能访问WebRoot目录下的试图文件,即浏览器重定向相当于直接访问该路径。 如下案例: --服务器内部请求转发--> --浏览器重定向--> 在Struts2.x中, result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)【服务器内部转发】、redirect【浏览器重定向】、redirectAction【重定向Action】、plainText【显示原始文件内容】。 通过result的type进行指定。 说明: ①、下面是redirectAction结果类型的例子,如果重定向的action中同一个包下: 如下例: extends="struts-default"> class="com.efanwan.strutsdemo.HelloWorldAction"method="execute"> /AddFan.jsp? username=${username} /AddFan.jsp? username=${username} 如果重定向的action在别的命名空间下(即不同包下): 重定向action的包1 被定向的action的包2 extends="struts-default"> ②、plainText: 显示原始文件内容,例如: 当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。 --指定读取文件的编码--> ③、在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。 如下: id=${id} 如果在result转发传递中文(一般不在url中传递中文),故而需进行URL编码: username=URLEncoder.encode(“西西稀饭”,”UTF-8”);再进行url传递,如需获取传递的参数可直接是用: ${param.username},但这样获取到的username是乱码的,如需获取显示传递过的中文,需使用: <%=URLDecoder.decode(newString(request.getParameter(“username”).getBytes(“ISO8859-1”),”UTF-8”))%>(导包.URLDecoder) 注意: 通过EL表达式${}获取Action中属性值,{}中的参数与getXXX或setXXX的“XXX”相同,但第一个字母需要小写! 七、多个Action共享一个试图文件---全局result配置 若有其他的package中的Action调用这个试图文件,需继承该package,即extends=”base”. Result的调用是根据Action返回的String与result的name值匹配的。 八、为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(生产环境下使用),开发阶段最好打开,打开后,每次修改struts文件系统会自动重新加载,故而不需要再重启服务器--> --开发模式下使用,这样可以打印出更详细的错误信息--> --默认的视图主题--> –与spring集成时,指定由spring负责action对象的创建--> –该属性设置Struts2是否支持动态方法调用,该属性的默认值是true。 如果需要关闭动态方法调用,则可设置该属性为false。 -->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 笔记 整理