第10章 Structs2框架技术Word文档下载推荐.docx
《第10章 Structs2框架技术Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第10章 Structs2框架技术Word文档下载推荐.docx(30页珍藏版)》请在冰点文库上搜索。
注意:
lib目录下有很多JAR文件,对于基本的Struts2Web项目至少要:
struts2-core-2.2.2.1.jar;
xwork-2.2.1.1.jar;
ognl-3.0.jar;
freemarker-2.3.16.jar;
commons-fileupload-1.2.1.jar;
commons-io-1.3.2.jar
且勿把Struts2软件包中所有的JAR文件都添加到项目中,因为其中的某些JAR文件依赖于其他的JAR文件(而这些JAR文件不在Struts2软件包中),添加到项目中会造成项目不能运行。
Struts2的安装步骤
o复制上述JAR文件至WEB-INF/lib目录下web.xml中配置struts拦截器<
filter>
ostruts拦截器<
filter>
内容
<
filter>
<
!
--定义Struts2的核心Filter名称为struts2-->
filter-name>
struts2<
/filter-name>
--指定核心Filter的实现类-->
filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
/filter-class>
/filter>
filter-mapping>
--设置应用struts2核心Filter的URL映射-->
url-pattern>
/*<
/url-pattern>
/filter-mapping>
o在src目录下创建struts.xml。
该文件是Struts2的核心配置文件。
?
xmlversion="
1.0"
encoding="
UTF-8"
>
DOCTYPEstrutsPUBLIC
"
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
http:
//struts.apache.org/dtds/struts-2.0.dtd"
struts>
……
/struts>
经过以上三步,就可以在Javaweb中添加了Structs2框架的支持。
10.2Structs2简单示例
内容:
一个支持Struts2框架的JavaWeb应用项目。
在index.jsp页面输入姓名,在hello.jsp页面输出用户姓名。
•在Eclipse新建一个支持Struts2框架的JavaWeb应用项目;
•配置web.xml;
•创建struts.xml;
•创建Action及JSP页面。
第一步:
创建dynamicwebproject项目,把Structs2的包放入WEB-INF中的lib中,
创建index.jsp
%@pagelanguage="
java"
contentType="
text/html;
charset=UTF-8"
pageEncoding="
%>
DOCTYPEhtmlPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
"
//www.w3.org/TR/html4/loose.dtd"
html>
head>
metahttp-equiv="
Content-Type"
content="
title>
第一个Struts简单示例<
/title>
/head>
body>
formaction="
user/HelloAction"
method="
post"
请输入你的大名:
inputtype="
text"
name="
username"
/>
br>
submit"
value="
提交"
/form>
/body>
/html>
第二步创建HelloAction类。
packagecom.jlp.action;
//导入ActionSupport类,用户自定义的StrutsAction需要继承此类
importcom.opensymphony.xwork2.ActionSupport;
/**
*HelloAction类,处理Struts2的业务逻辑
*/
publicclassHelloActionextendsActionSupport{
//定义一个私有成员变量name,用于获取表单中对应名称输入域的信息。
privateStringusername;
//setter和getter
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
//覆盖ActionSupport类的execute()方法,用于处理业务逻辑,并返回相应结果视图
publicStringexecute()
{
//返回SUCCESS代表的视图
returnSUCCESS;
}
第三步定义处理结果视图hello.jsp.
结果<
hello,${username}
第四步在Struts.xml中配置Action
在src中建立struts.xml文件并写入以下内容
encoding="
DOCTYPEstrutsPUBLIC
packagename="
default"
namespace="
/user"
extends="
struts-default"
actionname="
HelloAction"
class="
com.jlp.action.HelloAction"
<
resultname="
success"
/WEB-INF/pages/hello.jsp<
/result>
/action>
/package>
整个文件如下:
运行结果:
10.1.3STRUTS2工作流程
Struts应用开发流程是按:
“请求-响应”式开发的。
开发流程:
客户端向Web容器(如Tomcat)发送请求(如请求访问index.jsp)。
第二步:
请求经过一系列的过滤器的过滤之后,把该请求传递给Struts2的核心过滤器StrutsPrepareAndExecuteFilter。
第三步:
核心过滤器接收到请求信息之后,会根据请求的URL(如/login/HelloAction)搜索Action的映射信息。
第四步:
如找到对应的映射信息,则在struts.xml文件中对应定义的Action(如HelloAction)被实例化,并且执行该Action实例的execute()方法,处理用户请求信息。
此外,如果在struts.xml文件中还定义了被请求Action的一些拦截器,那么该Action实例被调用前后,这些拦截器也会被先后执行。
第五步:
Action对请求处理完毕以后将返回一个逻辑视图,该逻辑视图将在struts.xml文件的相应<
result>
元素中寻找对应的物理视图(如在HelloAction中SUCCESS对应于/WEB-INF/page/hello.jsp),并返回给客户端。
10.2.Struts2核心概念
Struts2框架默认的配置文件为struts.xml,在eclipse开发工具中,直接放在src中。
配置元素名称
功能描述
include
包含其他的XML配置文件
constant
配置常量信息
package
包含一系列Action及拦截器配置信息,便于对Action进行统一管理
default-action-ref
配置默认Action
default-interceptor-ref
配置默认拦截器,对package范围内所有的Action有效
global-results
配置全局结果集,对package范围内所有的Action有效
interceptors
包含一系列拦截器配置信息
interceptor
配置一个拦截器,一般嵌套在<
interceptors>
元素内
interceptor-stack
配置拦截器堆栈信息,一般嵌套在<
interceptor-ref
配置Action应用的拦截器,嵌套在<
interceptor-stack>
,<
action>
等元素内
action
包含与Action操作相关的一系列配置信息
result
配置Action的结果映射,嵌套在<
元素之内
param
配置参数信息,一般嵌套在<
global-result>
◆struts.xml--<
include>
元素
作用:
原则上讲,一个Web项目的所有配置都可以放在struts.xml文件中,但随着应用规模的扩大,将直接导致struts.xml文件越来越臃肿,难以维护。
解决的方法就是把不同模块的配置信息放在不同的XML文件中,然后在struts.xml文件使用<
元素把这些XML文件包含在struts.xml中。
includefile="
struts-login.xml"
/include>
◆struts.xml--<
constant>
使用<
元素可以定义一些Web应用中使用的常量
constant
name="
struts.i18n.encoding"
value="
/>
package>
Struts2框架的核心组件是Action和拦截器等,Struts2框架使用包(package)来管理Action和拦截器等。
包是多个Action、多个拦截器和多个拦截器引用的集合。
元素配置包的信息,每个<
元素定义一个包的配置。
●name属性:
必选属性,指定该包的名字,是引用该包的唯一标识。
●namespace属性:
可选属性,定义该包的命名空间。
namespace属性值和Action名称组合在一起,在项目中决定了该Action的URL。
●extends属性:
可选属性,在Struts2中,包也是可以继承的,extends属性的作用是指定该包是否继承其他的包。
包可以继承一个或多个父包的中Action定义、拦截器定义、拦截器栈等配置。
●abstract属性:
可选属性,若该属性值为“true”表示该包为抽象包,在抽象包中不能有任何Action定义。
Struts2的配置文件总是从上到下处理的,所以在struts.xml文件中父包的定义应该在子包的前面。
另外,关于namespace属性的使用需要注意以下几点:
元素若没有指定namespace属性,则该包使用默认的命名空间,默认的命名空间总是"
;
若设置namespace属性值为“/”时,即指定了包的命名空间为根命名空间,此时所有根路径下的Action请求都会去这个包中查找对应的资源信息。
若一个<
元素指定namespace="
/ch10"
,必须注意的是“ch10”前的斜线“/”不能省略,并且该包下所有的Action处理的URL应该是“/ch10/Action名”,其完整的URL为http:
//主机地址:
端口/上下文路径/ch10/XXXAction.action。
Struts2查找Action的次序为:
先在指定的路径下查找Action;
如果找不到则会去默认的路径找Action;
如果仍找到,则抛出异常。
另外,当默认命名空间中存在与根命名空间同名的Action时,根命名空间的配置信息优先级高于默认命名空间中的配置信息。
命名空间只有一个级别,例如一个Action的URL为“/a/b/get.action”,则系统将先在“/a/b”的命名空间下查找,如果找不到,就直接到默认命名空间查找get.action,而不是在“/a”的命名空间下查找。
Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action。
不同的命名空间可以有同名的Action。
在struts.xml配置文件中,可以配置多个<
元素,但每<
元素中的namespace的属性值必须是唯一的。
元素用来配置Action,该元素需嵌套在<
元素内,它包含如下属性:
name属性:
必选属性,用来设定Action的名称。
class属性:
可选属性,指定Action处理类对应的具体路径,若省略该属性,表示使用的是默认Action即ActionSupport类。
method属性:
可选属性,指定Action中的方法名。
converter属性:
可选属性,指定Action使用的类型转换器,其值可为true或false,默认为true,即使用类型转换器。
例子
*"
类名,类似于javabean"
{1}User"
{1}"
/web-inf/page/{1}.jsp<
在里面的意义:
若<
未配置method属性,则请求会被转发到Action中的execute()方法进行处理。
但很多情况下Action可能需要处理多个业务逻辑,那么就需要在Action中定义多个方法以处理不同的业务逻辑,那么在<
元素中配置method属性,就可以在请求Action时把不同的请求转发给相应的方法进行处理。
default-action-ref>
当一个Action在指定命名空间和默认命名空间都找不到该Action时,就会抛出一个“HTTP404”错误信息,此时可使用<
元素指定一个默认的Action,当配置文件中没有与请求Action匹配的信息时,Struts2框架就会自动调用这个默认的Action去处理。
ch10"
default-action-refname="
ErrorAction"
/default-action-ref>
/error/actionError.jsp<
用于配置Action的结果映射,既可以配置常规的结果映射,也可以实现动态结果映射,即根据请求动态决定返回哪个视图。
常见的映射类型有dispatcher、redirectAction、redirect、plainText等。
元素下的主要属性包括:
type属性:
可选属性,type属性用于指定跳转至结果视图的方式,如省略该属性表示默认的类型为dispatcher。
可选属性,表示逻辑视图的名称,默认为SUCCESS。
10.2.2Action详解
在struts2框架中,Action负责处理业务逻辑,是整个struts2应用的核心。
1.Action类的基本格式
Action类的基本格式:
publicclassXXXActionextendsActionSupport{
//定义一个私有成员变量name,用于封装HTTP请求参数的属性。
privateStringname;
……
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
……
//覆盖ActionSupport类的execute()方法,用于处理业务逻辑并返回相应的结果视图
{//省略具体的业务逻辑
//其它方法
2.Action接口和ActionSupport类
Action接口和ActionSupport类在com.opensymphony.xwork包中。
其中,Action接口定义了5个字符串常量
SUCCESS
NONE
ERROR
INPUT
LOGIN,
另外还定义了一个返回字符串类型的execute()方法。
ActionSuport类是一个默认的Action实现类,如果一个Action在struts.xml配置文件的<
元素中没有指定class属性,那么默认该Action为ActionSupport类。
在ActionSupport类中除了实现Action接口之外,该类还增加了获取国际化信息的方法getText()、数据校验的方法validate()、默认的处理用户请求的方法execute()等。
3.调用含有多个方法的action
在一个Action中集成了多个业务逻辑的方法。
先看一个含多个方法的Act