struts2笔记整理.docx

上传人:b****8 文档编号:30633509 上传时间:2023-08-18 格式:DOCX 页数:23 大小:51.85KB
下载 相关 举报
struts2笔记整理.docx_第1页
第1页 / 共23页
struts2笔记整理.docx_第2页
第2页 / 共23页
struts2笔记整理.docx_第3页
第3页 / 共23页
struts2笔记整理.docx_第4页
第4页 / 共23页
struts2笔记整理.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

struts2笔记整理.docx

《struts2笔记整理.docx》由会员分享,可在线阅读,更多相关《struts2笔记整理.docx(23页珍藏版)》请在冰豆网上搜索。

struts2笔记整理.docx

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">

/WEB-INF/fanwan/hello.jsp

/WEB-INF/fanwan/fanwanAdd.jsp

在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中的配置如下:

struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

--自从Struts2.1.3以后,下面的FilterDispatcher已经标注为过时org.apache.struts2.dispatcher.FilterDispatcher-->

struts2

/*

在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中,通过节点的path属性指定访问该action的URL路径。

在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配置中的各项默认值

/WEB-INF/page/hello.jsp

1>如果没有为action指定class,默认是ActionSupport。

2>如果没有为action指定method,默认执行action中的execute()方法。

3>如果没有指定result的name属性,默认值为success。

六、Action中result的各种转发类型

引言:

在strut1.x中Action转发有两种类型:

1、服务器内部请求转发

2、浏览器重定向

注:

在浏览器重定向不能访问到WEB-INF目录下的试图文件,只能访问WebRoot目录下的试图文件,即浏览器重定向相当于直接访问该路径。

如下案例:

--服务器内部请求转发-->

/index.jsp

--浏览器重定向-->

/index.jsp

在Struts2.x中,

/WEB-INF/page/hello.jsp

result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有:

dispatcher(默认值)【服务器内部转发】、redirect【浏览器重定向】、redirectAction【重定向Action】、plainText【显示原始文件内容】。

通过result的type进行指定。

说明:

①、下面是redirectAction结果类型的例子,如果重定向的action中同一个包下:

helloworld

如下例:

extends="struts-default">

class="com.efanwan.strutsdemo.HelloWorldAction"method="execute">

/AddFan.jsp?

username=${username}

/AddFan.jsp?

username=${username}

list

如果重定向的action在别的命名空间下(即不同包下):

重定向action的包1

helloxixi

/fanwan/department

被定向的action的包2

extends="struts-default">

/WEB-INF/fanwan/fanwanAdd.jsp

②、plainText:

显示原始文件内容,例如:

当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。

/xxx.jsp

UTF-8

--指定读取文件的编码-->

③、在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。

如下:

view.jsp?

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配置

/index.jsp

若有其他的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;

}

......

}

/images

/WEB-INF/page/hello.jsp

上面通过节点为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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1