第10章 Structs2框架技术.docx

上传人:b****1 文档编号:23139170 上传时间:2023-05-08 格式:DOCX 页数:30 大小:709.78KB
下载 相关 举报
第10章 Structs2框架技术.docx_第1页
第1页 / 共30页
第10章 Structs2框架技术.docx_第2页
第2页 / 共30页
第10章 Structs2框架技术.docx_第3页
第3页 / 共30页
第10章 Structs2框架技术.docx_第4页
第4页 / 共30页
第10章 Structs2框架技术.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

第10章 Structs2框架技术.docx

《第10章 Structs2框架技术.docx》由会员分享,可在线阅读,更多相关《第10章 Structs2框架技术.docx(30页珍藏版)》请在冰豆网上搜索。

第10章 Structs2框架技术.docx

第10章Structs2框架技术

第10章Struts2框架技术

主要内容

◆Struts2快速入门

◆Struts2核心概念

◆OGNL与值栈

◆Struts2标签

◆拦截器

◆Struts2国际化

◆Struts2输入校验

◆Struts2类型转换

◆Struts2其它常见功能实现

Struts是整合了当前动态网站技术中Srvlet、JSP、JavaBean、JDBC、XML等相关开发技术基础之上的一种主流Web开发框架,是一种基于J2EE平台的经典MVC的框架。

采用Struts可以简化MVC设计模式的Web应用开发工作,很好地实现代码重用,使开发人员从繁琐的工作中解脱出来,来开发具有强扩展性的Web应用。

Struts2是JavaWeb项目开发中最经典的Web框架技术,受到许多软件开发人员喜爱与追捧,是软件企业招聘Java软件人才时要求必备的技能之一。

Struts是Apache软件基金会下Jakarta项目的一部分。

2007年发布Struts2.0,Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并,全新的Struts2框架。

其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。

Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。

10.1Struts2快速入门

Struts是一个优秀的开源MVC框架,可以到http:

//struts.apache.org/下载最新版的Struts以及文档和示例等。

本章以下载struts2.2.1.1的FullDistribution版本为例进行介绍。

将下载后的压缩文件解压之后,包含以下目录结构。

●apps:

该目录下存放了一些基于Struts2的简单示例,大学如struts2-blank.war是一个配置了Struts2的空白出

●Web应用项目。

这些示例对于初学者而言非常有用,社版便于迅速地理解Struts2。

●docs:

该目录下包含了Struts2的一些相关文档,如教程、Struts2API文档等,读者在开发Struts2项目时可参考这些文档。

●lib:

该目录下包括了Struts2的核心类库以及第三方插件类,开发Struts2应用项目的需要的JAR文件均存放在此目录下。

●src:

该目录下包含了实现Struts2的全部源代码。

注意:

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拦截器

ostruts拦截器内容

--定义Struts2的核心Filter名称为struts2-->

struts2

--指定核心Filter的实现类-->

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

--设置应用struts2核心Filter的URL映射-->

struts2

/*

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

……

经过以上三步,就可以在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="UTF-8"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

第一个Struts简单示例

请输入你的大名:


第二步创建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.

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

结果

hello,${username}

第四步在Struts.xml中配置Action

在src中建立struts.xml文件并写入以下内容

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

/WEB-INF/pages/hello.jsp

整个文件如下:

 

运行结果:

 

 

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文件的相应元素中寻找对应的物理视图(如在HelloAction中SUCCESS对应于/WEB-INF/page/hello.jsp),并返回给客户端。

10.2.Struts2核心概念

Struts2框架默认的配置文件为struts.xml,在eclipse开发工具中,直接放在src中。

 

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

/WEB-INF/pages/hello.jsp

配置元素名称

功能描述

include

包含其他的XML配置文件

constant

配置常量信息

package

包含一系列Action及拦截器配置信息,便于对Action进行统一管理

default-action-ref

配置默认Action

default-interceptor-ref

配置默认拦截器,对package范围内所有的Action有效

global-results

配置全局结果集,对package范围内所有的Action有效

interceptors

包含一系列拦截器配置信息

interceptor

配置一个拦截器,一般嵌套在元素内

interceptor-stack

配置拦截器堆栈信息,一般嵌套在元素内

interceptor-ref

配置Action应用的拦截器,嵌套在等元素内

action

包含与Action操作相关的一系列配置信息

result

配置Action的结果映射,嵌套在元素之内

param

配置参数信息,一般嵌套在等元素内

◆struts.xml--元素

作用:

原则上讲,一个Web项目的所有配置都可以放在struts.xml文件中,但随着应用规模的扩大,将直接导致struts.xml文件越来越臃肿,难以维护。

解决的方法就是把不同模块的配置信息放在不同的XML文件中,然后在struts.xml文件使用元素把这些XML文件包含在struts.xml中。

◆struts.xml--元素

作用:

使用元素可以定义一些Web应用中使用的常量

◆struts.xml--元素

作用:

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的属性值必须是唯一的。

◆struts.xml--元素

/WEB-INF/pages/hello.jsp

作用:

元素用来配置Action,该元素需嵌套在元素内,它包含如下属性:

name属性:

必选属性,用来设定Action的名称。

class属性:

可选属性,指定Action处理类对应的具体路径,若省略该属性,表示使用的是默认Action即ActionSupport类。

method属性:

可选属性,指定Action中的方法名。

converter属性:

可选属性,指定Action使用的类型转换器,其值可为true或false,默认为true,即使用类型转换器。

例子

/web-inf/page/{1}.jsp

在里面的意义:

 

注意:

未配置method属性,则请求会被转发到Action中的execute()方法进行处理。

但很多情况下Action可能需要处理多个业务逻辑,那么就需要在Action中定义多个方法以处理不同的业务逻辑,那么在元素中配置method属性,就可以在请求Action时把不同的请求转发给相应的方法进行处理。

◆struts.xml--元素

作用:

当一个Action在指定命名空间和默认命名空间都找不到该Action时,就会抛出一个“HTTP404”错误信息,此时可使用元素指定一个默认的Action,当配置文件中没有与请求Action匹配的信息时,Struts2框架就会自动调用这个默认的Action去处理。

/error/actionError.jsp

◆struts.xml--元素

作用:

用于配置Action的结果映射,既可以配置常规的结果映射,也可以实现动态结果映射,即根据请求动态决定返回哪个视图。

常见的映射类型有dispatcher、redirectAction、redirect、plainText等。

元素下的主要属性包括:

type属性:

可选属性,type属性用于指定跳转至结果视图的方式,如省略该属性表示默认的类型为dispatcher。

name属性:

可选属性,表示逻辑视图的名称,默认为SUCCESS。

10.2.2Action详解

在struts2框架中,Action负责处理业务逻辑,是整个struts2应用的核心。

1.Action类的基本格式

Action类的基本格式:

publicclassXXXActionextendsActionSupport{

//定义一个私有成员变量name,用于封装HTTP请求参数的属性。

privateStringname;

……

//setter和getter

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

……

//覆盖ActionSupport类的execute()方法,用于处理业务逻辑并返回相应的结果视图

publicStringexecute()

{//省略具体的业务逻辑

……

//返回SUCCESS代表的视图

returnSUCCESS;

}

//其它方法

……

}

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

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

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