第03章Strts2应用课堂

上传人:仙*** 文档编号:47000518 上传时间:2021-12-16 格式:PPT 页数:102 大小:1.23MB
收藏 版权申诉 举报 下载
第03章Strts2应用课堂_第1页
第1页 / 共102页
第03章Strts2应用课堂_第2页
第2页 / 共102页
第03章Strts2应用课堂_第3页
第3页 / 共102页
资源描述:

《第03章Strts2应用课堂》由会员分享,可在线阅读,更多相关《第03章Strts2应用课堂(102页珍藏版)》请在装配图网上搜索。

1、1济南大学信息学院济南大学信息学院 刘鹍刘鹍2第3章 Struts 2应用3.1 Struts 2概述概述3.2 Struts 2基本应用及工作流程基本应用及工作流程3.3 Struts 2标签库应用标签库应用3.4 Struts 2拦截器拦截器3.5 Struts 2国际化应用国际化应用3.6 Struts 2文件上传文件上传3.7 Struts 2综合应用实例综合应用实例添加学生信息添加学生信息33.1 Struts 2概述43.1 Struts 2概述3.1.1 MVC简介简介MVC有以下优点: 多个视图可以对应一个模型。多个视图可以对应一个模型。 模型返回的数据与显示逻辑分离。模型返回

2、的数据与显示逻辑分离。 应用被分隔为三层,降低了各层之间的耦合,提供应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。了应用的可扩展性。 控制层的概念也很有效,由于它把不同的模型和不控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求,因此控制层同的视图组合在一起,完成不同的请求,因此控制层可以说是包含了用户请求权限的概念。可以说是包含了用户请求权限的概念。 MVC更符合软件工程化管理的精神。不同的层各更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序

3、代码。工程化和工具化产生管理程序代码。53.1.2 Struts 2体系结构Struts 2的基本流程如下: Web浏览器请求一个资源。 过滤器Dispatcher查找请求,确定适当的Action。 拦截器自动对请求应用通用功能,如验证和文件上传等操作。 Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。 结果被返回到浏览器。可能是HTML、图片、PDF或其他。63.1.2 Struts 2体系结构 Struts 2框架的应用着重在控制上。简单的流程是:页面控制器页面。最重要的是控制器的取数据与处理后传数据的问题。Struts 2的体系结构还可以参考图3.1,更直

4、观地展现出其流程。图3.1 Struts 2体系结构73.2 Struts 2基本应用及工作流程83.2 Struts 2基本应用及工作流程3.2.1 简单简单Struts 2实例开发实例开发1. 下载下载Struts 2框架框架 MyEclipse 6没有对Struts 2的支持,所以需要用户自己下载Struts 2开发包。登录http:/struts.apache.org/下载Struts 2完整版,本书使用的是Struts 2.0.14。将下载的Zip文件解压缩,它是一个典型的Web结构。打开其文件夹,里面包含以下4个文件: apps:包含基于Struts 2的示例应用,是学习Strut

5、s 2非常有用的资料。 docs:包含Struts 2的相关文档,如Struts 2快速入门、Struts 2文档、API文档等内容。 lib:包含Struts 2框架的核心类库,以及Struts 2的第三方插件类库。 src:包含Struts 2框架的全部源代码。2. 建立一个建立一个Web项目项目 打开MyEclipse,建立一个Web项目,命名为“Struts 2.0”。93.2.1 简单Struts 2实例开发3. 加载加载Struts 2基本类库基本类库下面把这几个类库添加到项目中。右击项目名,选择【Build Path】【Configure Build Path】菜单项,出现如图3

6、.2所示的对话框。单击【Add External JARs】按钮,进入下载的Struts 2目录的lib文件夹,选中上面的5个Jar包,单击【OK】按钮完成类库的添加。图3.2 添加Struts 2的Jar包103.2.1 简单Struts 2实例开发4. 修改修改web.xml文件文件打开项目中的WebRoot/WEB-INF/web.xml文件,修改其代码如下: struts 2org.apache.struts2.dispatcher.FilterDispatcherstruts 2/*113.2.1 简单Struts 2实例开发 5. 创建创建hello.jsp选择【WebRoot】【

7、new】【jsp】菜单项,在File Name中输入文件名“hello.jsp”,修改后的代码如下: struts 2应用应用 请输入姓名:请输入姓名: 123.2.1 简单Struts 2实例开发 6. Action实现类实现类右击src文件夹,选择【new】【Package】菜单项,在name框中输入包名“org.action”,右击该包,依此类推,建立class,命名为“StrutsAction”,修改后的代码如下:public class StrutsAction extends ActionSupportprivate String name;public String getNam

8、e() return name;public void setName(String name) this.name=name;public String execute() throws Exception if(!name.equals(HelloWorld)Map request=(Map)ActionContext.getContext().get(request);request.put(name,getName();return success;elsereturn error;133.2.1 简单Struts 2实例开发 7. 创建并配置创建并配置struts.xml文件文件 任

9、何一个Struts 2程序都不能缺少struts.xml文件,它是Struts 2运行的核心。右击src文件夹,选择【new】【file】菜单项,在File name框中输入“struts.xml”,修改后的代码如下:/welcome.jsp/hello.jsp143.2.1 简单Struts 2实例开发 8. 创建创建welcome.jsp 创建welcome.jsp,其步骤和上面创建hello.jsp类似,这里不再重复叙述。其代码如下: struts 2应用应用 hello !153.2.1 简单Struts 2实例开发 9. 部署和运行部署和运行 启动Tomcat后,在浏览器中输入“ht

10、tp:/localhost:8080/Struts2.0/hello.jsp”,会看到如图3.3所示的界面。当在输入框中输入“张三”时,会出现如图3.4所示界面。如果输入“HelloWorld”,就会返回当前页面。图3.3 运行界面 图3.4 运行成功界面163.2.2 Struts 2工作流程及各种文件详解1. Struts 2的工作流程的工作流程Struts 2框架中的配置文件struts.xml会起映射作用,它会根据“*”来决定调用用户定义的哪个Action类。例如在项目Struts 2.0中,请求为struts.action,前面“*”的部分是“struts”,所以在struts.xm

11、l中有个Action类的name为“struts”,这表示该请求与这个Action来匹配,就会调用该Action中class属性指定的Action类。但是在Struts 2中,用户定义的Action类并不是业务控制器,而是Action代理,其并没有和Servlet API耦合。所以Struts 2框架提供了一系列的拦截器,它负责将HttpServletRequest请求中的请求参数解析出来,传入到用户定义的Action类中。173.2.2 Struts 2工作流程及各种文件详解2. Struts 2中各种文件详解中各种文件详解 (1)web.xml文件后面的webapp标签中配置了下面这样一段

12、: 可以看出,里面配置了一个过滤器,那么就先来介绍过滤器的使用。 Filter过滤器是Java项目开发中的一种常用技术。它是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的内容进行处理,通常用于权限控制、编码转换等场合。 struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*183.2.2 Struts 2工作流程及各种文件详解 所有过滤器必须实现所有过滤器必须实现java.Serlvet.Filter接口接口,这个接口中含有,这个接口中含有3个个过滤器类必须实现的方法:过滤器类必须实现的方法:

13、init(FilterConfig):Servlet过滤器的初始化方法,过滤器的初始化方法,Servlet容器创建容器创建Servlet过滤器实例后将调用这个方法。过滤器实例后将调用这个方法。 doFilter(ServletRequest,ServletResponse,FilterChain):完成实际:完成实际的过滤操作,当用户请求与过滤器关联的的过滤操作,当用户请求与过滤器关联的URL时,时,Servlet容器将先调容器将先调用过滤器的用过滤器的doFilter方法,返回响应之前也会调用此方法。方法,返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤器

14、。参数用于访问过滤器链上的下一个过滤器。 destroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法可容器在销毁过滤器实例前调用该方法,这个方法可以释放以释放Servlet过滤器占用的资源,过滤器类编写完成后,必须要在过滤器占用的资源,过滤器类编写完成后,必须要在web.xml中进行配置,格式如下:中进行配置,格式如下: 过滤器名过滤器名 过滤器对应类过滤器对应类参数名称参数名称参数值参数值 193.2.2 Struts 2工作流程及各种文件详解 过滤器的关联方式有过滤器的关联方式有3种:与一个种:与一个URL关联、与一个关联、与一个URL目录下的所有资源关联、与一个目录下的

15、所有资源关联、与一个Servlet关联。关联。 与一个与一个URL资源关联:资源关联: 与一个与一个URL目录下的所有资源关联:目录下的所有资源关联: 与一个与一个Servlet关联:关联:过滤器名过滤器名xxx.jsp过滤器名过滤器名/*过滤器名过滤器名Servlet名称名称203.2.2 Struts 2工作流程及各种文件详解 (2)struts.xml文件文件struts.xml文件通常放在文件通常放在Web应用程序的应用程序的WEB-INF/classes目录下,该目录下,该目录下的目录下的struts.xml将被将被Struts 2框架自动加载。框架自动加载。struts.xml文件

16、是一个文件是一个XML文件,文件前面是文件,文件前面是XML的头文件,然后是的头文件,然后是标签,位于标签,位于Struts 2配置的最外层,其他标签都是包含在它里面的。配置的最外层,其他标签都是包含在它里面的。 (3)package元素元素与与Java中的包不同的是,中的包不同的是,Struts 2中的包可以扩展另外的包,从而中的包可以扩展另外的包,从而“继继承承”原有包的所有定义,并可以添加自己包的特有配置,以及修改原有包的原有包的所有定义,并可以添加自己包的特有配置,以及修改原有包的部分配置。从这一点上看,部分配置。从这一点上看,Struts 2中的包更像中的包更像Java中的类。中的类

17、。package有以有以下几个常用属性:下几个常用属性: name:该属性是必选的,指定包的名字,这个名字将作为引用该包的键。:该属性是必选的,指定包的名字,这个名字将作为引用该包的键。 extends:该属性是可选的,允许一个包继承一个或多个先前定义的包。:该属性是可选的,允许一个包继承一个或多个先前定义的包。 abstract:该属性是可选的,将其设置为:该属性是可选的,将其设置为true,可以把一个包定义为抽象的。,可以把一个包定义为抽象的。 namespace:该属性是可选的,将保存的:该属性是可选的,将保存的action配置为不同的名称空间。配置为不同的名称空间。213.2.2 St

18、ruts 2工作流程及各种文件详解例子:例子:/foo.jsp/bar.jsp/moo.jsp/bar.jsp223.2.2 Struts 2工作流程及各种文件详解(4)Action元素 当一个请求匹配到某个Action名字时,框架就使用这个映射来确定如何处理请求。 如果一个请求要调用Action类中的其他方法,就需要在Action配置中加以配置。例如,如果在org.action.StrutsAction中有另外一个方法为: 那么如果想要调用这个方法,就必须在Action中配置method属性,其配置方法为:/welcome.jsp/hello.jsppublic String find()

19、throws Exceptionreturn SUCCESS;/welcome.jsp/hello.jsp233.2.2 Struts 2工作流程及各种文件详解 (5)result元素 一个result代表一个可能的输出。当Action类中的方法执行完成时,返回一个字符串类型的结果代码,框架根据这个结果代码选择对应的result,向用户输出。 param中的中的name属性有两个值:属性有两个值: location:指定逻辑视图。:指定逻辑视图。 parse:是否允许在实际视图名中使用:是否允许在实际视图名中使用OGNL表达式,参数默认为表达式,参数默认为true。 result中的中的nam

20、e属性有如下值:属性有如下值: success:表示请求处理成功,该值也是默认值。:表示请求处理成功,该值也是默认值。 error:表示请求处理失败。:表示请求处理失败。 none:表示请求处理完成后不跳转到任何页面。:表示请求处理完成后不跳转到任何页面。 input:表示输入时如果验证失败应该跳转到什么地方(关于验证后面:表示输入时如果验证失败应该跳转到什么地方(关于验证后面会介绍)。会介绍)。 login:表示登录失败后跳转的目标。:表示登录失败后跳转的目标。 参数值参数值 243.2.2 Struts 2工作流程及各种文件详解 type(非默认类型)属性支持的结果类型有以下几种:chai

21、n:用来处理:用来处理Action链。链。chart:用来整合:用来整合JFreeChart的结果类型。的结果类型。dispatcher:用来转向页面,通常处理:用来转向页面,通常处理JSP,该类型也为默认类型。,该类型也为默认类型。freemarker:处理:处理FreeMarker模板。模板。httpheader:控制特殊:控制特殊HTTP行为的结果类型。行为的结果类型。jasper:用于:用于JasperReports整合的结果类型。整合的结果类型。jsf:JSF整合的结果类型。整合的结果类型。redirect:重定向到一个:重定向到一个URL。redirect-action:重定向到一

22、个:重定向到一个Action。stream:向浏览器发送:向浏览器发送InputStream对象,通常用来处理文件下载,还可用于返对象,通常用来处理文件下载,还可用于返回回AJAX数据。数据。tiles:与:与Tiles整合的结果类型。整合的结果类型。velocity:处理:处理Velocity模板。模板。xslt:处理:处理XML/XLST模板。模板。plaintext:显示原始文件内容,如文件源代码。:显示原始文件内容,如文件源代码。253.2.2 Struts 2工作流程及各种文件详解 redirect-action类型用于当一个Action处理结束后,直接将请求重定向到另一个Actio

23、n。如下列配置:/welcome.jsp/hello.jspstruts263.2.2 Struts 2工作流程及各种文件详解(6)ActionSupport类 ActionSupport类为Action提供了一些默认实现,主要包括预定义常量、从资源文件中读取文本资源、接收验证错误信息和验证的默认实现。 下面是ActionSupport类所实现的接口: Action接口同样位于com.opensymphony.xwork2包,定义了一些常量和一个execute()方法。public interface Action public static final String SUCCESS=succ

24、ess;public static final String NONE=none; public static final String ERROR=error; public static final String INPUT=input;public static final String LOGIN=login; public String execute() throws Exception;public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleP

25、rovider,Serializable 273.2.2 Struts 2工作流程及各种文件详解 由于由于3.2.1节的例子中继承了节的例子中继承了ActionSupport类,所以可以看出,类,所以可以看出,在在execute的返回值中,其代码可以改为:的返回值中,其代码可以改为:public String execute() throws Exception if(!name.equals(HelloWorld)Map request=(Map)ActionContext.getContext().get(request);request.put(name,getName();return

26、 SUCCESS;elsereturn ERROR;public interface Action public static final String SUCCESS=success;public static final String NONE=none; public static final String ERROR=error; public static final String INPUT=input;public static final String LOGIN=login; public String execute() throws Exception;283.2.3 S

27、truts 2数据验证及验证框架的应用 1. 数据校验数据校验 下面来看其实现,可以把3.2.1节的例子中的Action类改写成。 如果执行该方法之后,Action类的fieldErrors中已经包含了数据校验错误信息,将把请求转发到input逻辑视图处,所以要在Action配置中加入以下代码:/welcome.jsp/hello.jsp/hello.jsp/result293.2.3 Struts 2数据验证及验证框架的应用 把JSP页面改写一下(标签的具体应用会在3.3节具体讲解): struts 2 303.2.3 Struts 2数据验证及验证框架的应用 修改之后,部署运行。不输入任何

28、姓名直接提交,将会看到如图3.5所示的界面。图3.5 校验结果313.2.3 Struts 2数据验证及验证框架的应用2. Struts 2验证框架的应用验证框架的应用 Struts 2提供了校验框架,只需要增加一个校验配置文件,就可提供了校验框架,只需要增加一个校验配置文件,就可以完成对数据的校验。以完成对数据的校验。Struts 2提供了大量的数据校验器,包括表单域提供了大量的数据校验器,包括表单域校验器和非表单域校验器两种。校验器和非表单域校验器两种。 (1)必填字符串校验器 其校验规则定义文件如下:其校验规则定义文件如下:true姓名是必需的!姓名是必需的!323.2.3 Struts

29、 2数据验证及验证框架的应用 (2)必填校验器)必填校验器 该校验器的名字是该校验器的名字是required,也就是,也就是属性中的属性中的type=required,该校验器要求指定的字段必须有值,与必填字符串,该校验器要求指定的字段必须有值,与必填字符串校验器最大的区别就是可以有空字符串。如果把上例改为必填校验器,校验器最大的区别就是可以有空字符串。如果把上例改为必填校验器,其代码应为:其代码应为:姓名是必需的!姓名是必需的!333.2.3 Struts 2数据验证及验证框架的应用 (3)整数校验器)整数校验器 该校验器的名字是该校验器的名字是int,该校验器要求字段的整数值必须在指定范,

30、该校验器要求字段的整数值必须在指定范围内,故其有围内,故其有min和和max参数。如果有个参数。如果有个age输入框,要求其必须是整输入框,要求其必须是整数,且输入值必须在数,且输入值必须在18与与100之间,该校验器的配置应该为:之间,该校验器的配置应该为:18100年龄必须在年龄必须在18至至100之间之间343.2.3 Struts 2数据验证及验证框架的应用 (4)日期校验器)日期校验器 该校验器的名字是该校验器的名字是date,该校验器要求字段的日期值必须在指定,该校验器要求字段的日期值必须在指定范围内,故其有范围内,故其有min和和max参数。其配置格式如下:参数。其配置格式如下:

31、1980-01-012009-12-31日期必须在日期必须在1980-01-01至至2009-12-31之间之间353.2.3 Struts 2数据验证及验证框架的应用 (5)邮件地址校验器)邮件地址校验器 该校验器的名称是该校验器的名称是email,该校验器要求字段的字符如果非空,就,该校验器要求字段的字符如果非空,就必须是合法的邮件地址。如下面的代码:必须是合法的邮件地址。如下面的代码:必须输入有效的电子邮件地址必须输入有效的电子邮件地址 363.2.3 Struts 2数据验证及验证框架的应用 (6)网址校验器)网址校验器 该校验器的名称是该校验器的名称是url,该校验器要求字段的字符如

32、果非空,就必,该校验器要求字段的字符如果非空,就必须是合法的须是合法的URL地址。如下面的代码:地址。如下面的代码:必须输入有效的网址必须输入有效的网址 373.2.3 Struts 2数据验证及验证框架的应用 (7)字符串长度校验器)字符串长度校验器 该校验器的名称是该校验器的名称是stringlength,该校验器要求字段的长度必须,该校验器要求字段的长度必须在指定的范围内,一般用于密码输入框。如下面的代码:在指定的范围内,一般用于密码输入框。如下面的代码:620密码长度必须在密码长度必须在6到到20之间之间383.2.3 Struts 2数据验证及验证框架的应用 (8)正则表达式校验器)

33、正则表达式校验器 该校验器的名称是该校验器的名称是regex,它检查被校验字段是否匹配一个正则表,它检查被校验字段是否匹配一个正则表达式。如下面的代码:达式。如下面的代码: 学号必须是学号必须是6位的数字位的数字 39济南大学信息学院济南大学信息学院 刘鹍刘鹍40回顾:Struts 2Struts 2开发步骤及工作流程开发步骤及工作流程Struts 2数据验证及验证框架数据验证及验证框架413.3 Struts 2标签库应用423.3 Struts 2标签库应用OGNL(.、#、$、%)数据标签数据标签控制标签控制标签表单标签表单标签非表单标签非表单标签433.3 Struts 2标签库应用3

34、.3.1 Struts 2的的OGNL表达式表达式在介绍标签库前,有必要先来学习在介绍标签库前,有必要先来学习Struts 2的的OGNL表达式。表达式。1. OGNL表达式表达式 OGNL表达式是表达式是Struts 2框架的特点之一。框架的特点之一。 标准的标准的OGNL会设定一个根对象(会设定一个根对象(root对象)。假设使用对象)。假设使用标准标准OGNL表达式来求值(不是表达式来求值(不是Struts 2 OGNL),如果),如果OGNL上下文有两个对象上下文有两个对象foo对象和对象和bar对象,同时对象,同时foo对象被对象被设置为根对象(设置为根对象(root),则利用下面的

35、),则利用下面的OGNL表达式求值。表达式求值。 #foo.blah / 返回返回foo.getBlah()#bar.blah / 返回返回bar.getBlah()blah / 返回返回foo.getBlah(),因为,因为foo为根对象为根对象443.3.1 Struts 2的OGNL表达式 在Struts 2框架中,值栈(Value Stack)就是OGNL的根对象。假设值栈中存在两个对象实例Man和Animal,这两个对象实例都有一个name属性,Animal有一个species属性,Man有一个salary属性。假设Animal在值栈的顶部,Man在Animal后面,如图3.6所示。

36、图3.6 一个包含了Animal和Man的值栈 453.3.1 Struts 2的OGNL表达式下面的代码片段能更好地理解OGNL表达式。最后一行实例代码返回的是animal.getName()返回值,即返回了Animal的name属性,因为Animal是值栈的顶部元素,OGNL将从顶部元素搜索,所以会返回Animal的name属性值。如果要获得Man的name值,则需要如下代码:Struts 2允许在值栈中使用索引,实例代码如下:允许在值栈中使用索引,实例代码如下:species / 调用调用animal.getSpecies()salary / 调用调用man.getSalary()nam

37、e / 调用调用animal.getName(),因为,因为Animal位于值位于值栈的顶部栈的顶部0.name / 调用调用animal.getName()1.name / 调用调用man.getName()man.name463.3.1 Struts 2的OGNL表达式 Struts 2中的OGNL Context是ActionContext,如图3.7所示。 图3.7 Struts 2的OGNL Context结构示意图473.3.1 Struts 2的OGNL表达式 由于值栈是Struts 2中OGNL的根对象。如果用户需要访问值栈中的对象,则可以通过如下代码访问值栈中的属性: $fo

38、o / 获得值栈中的foo属性 如果访问其他Context中的对象,由于不是根对象,在访问时需要加#前缀。 application对象:用来访问ServletContext 如如#application.userName或者或者#application “userName” 相当于调用相当于调用Servlet的的getAttribute(userName)。 session对象:用来访问HttpSession, 如如#session.userName或者或者#session“userName” 相当于调用相当于调用session.getAttribute(userName)。 request对

39、象:用来访问HttpServletRequest属性的Map 如如#request.userName或者或者#request“userName” 相当于调用相当于调用request.getAttribute(userName)。483.3.1 Struts 2的OGNL表达式如在3.2.1节中StrutsAction类中代码:这就是先得到request对象,然后把值放进去,在该例的success.jsp中有:其中#request.name相当于调用了Map request=(Map)ActionContext.getContext().get(request);request.put(name

40、,getName();request.getAttribute(“name”);493.3.1 Struts 2的OGNL表达式2. OGNL集合操作集合操作使用如下代码直接生成一个List对象:下面的代码可以直接生成一个Map对象:对于集合类型,OGNL表达式可以使用in和not in两个元素符号。其中,in表达式用来判断某个元素是否在指定的集合对象中;not in判断某个元素是否不在指定的集合对象中,代码如下所示:#key: value1, key2: value2, e1, e2, e3 503.3.1 Struts 2的OGNL表达式除了in和not in之外,OGNL还允许使用某个规

41、则获得集合对象的子集,常用的有以下3个相关操作符。 ?:获得所有符合逻辑的元素。 :获得符合逻辑的第一个元素。 $:获得符合逻辑的最后一个元素。如下面的代码:该代码可以获得Person的所有性别为male的relatives集合。Person .relatives.?# this.gender=male513.3.2 数据标签 数据标签属于非UI标签,主要用于提供各种数据访问相关的功能,数据标签主要包括以下几个。property:用于输出某个值。:用于输出某个值。set:用于设置一个新变量。:用于设置一个新变量。param:用于设置参数,通常用于:用于设置参数,通常用于bean标签和标签和ac

42、tion标签的子标签。标签的子标签。bean:用于创建一个:用于创建一个JavaBean实例。实例。action:用于在:用于在JSP页面直接调用一个页面直接调用一个Action。date:用于格式化输出一个日期。:用于格式化输出一个日期。debug:用于在页面上生成一个调试链接,当单击该链接时,可以看到:用于在页面上生成一个调试链接,当单击该链接时,可以看到当前值栈和当前值栈和Stack Context中的内容。中的内容。il8n:用于指定国际化资源文件的:用于指定国际化资源文件的baseName。include:用于在:用于在JSP页面中包含其他的页面中包含其他的JSP或或Servlet资

43、源。资源。push:用于将某个值放入值栈的栈顶。:用于将某个值放入值栈的栈顶。text:用于输出国际化(国际化内容会在后面讲解)。:用于输出国际化(国际化内容会在后面讲解)。url:用于生成一个:用于生成一个URL地址。地址。523.3.2 数据标签1. 标签标签 property标签的作用是输出指定值。property标签输出value属性指定的值。如果没有指定的value属性,则默认输出值栈栈顶的值。该标签有如下几个属性:default:该属性是可选的,如果需要输出的属性值为:该属性是可选的,如果需要输出的属性值为null,则显示则显示default属性指定的值。属性指定的值。escape

44、:该属性是可选的,指定是否:该属性是可选的,指定是否escape HTML代码。代码。value:该属性是可选的,指定需要输出的属性值,如果没:该属性是可选的,指定需要输出的属性值,如果没有指定该属性,则默认输出值栈栈顶的值。该属性也是最有指定该属性,则默认输出值栈栈顶的值。该属性也是最常用的,如前面用到的:常用的,如前面用到的:id:该属性是可选的,指定该元素的标志。:该属性是可选的,指定该元素的标志。533.3.2 数据标签2. 标签标签 该标签有如下几个属性:下面是一个简单例子,展示了property标签访问存储于session中的user对象的多个字段:使用set标签使得代码易于阅读:

45、name:该属性是必选的,重新生成新变量的名字。:该属性是必选的,重新生成新变量的名字。scope:该属性是可选的,指定新变量的存放范围。:该属性是可选的,指定新变量的存放范围。id:该属性是可选的,指定该元素的引用:该属性是可选的,指定该元素的引用id。54 3. 标签标签param标签主要用于为其他标签提供参数,该标签有如下几个属性:3.3.2 数据标签例如,要为例如,要为name为为fruit的参数赋值:的参数赋值:apple或者或者如果想指定如果想指定fruit参数的值为参数的值为apple字符串,则应该这样写:字符串,则应该这样写:name:该属性是可选的,指定需要设置参数的参数名。

46、:该属性是可选的,指定需要设置参数的参数名。value:该属性是可选的,指定需要设置参数的参数值。:该属性是可选的,指定需要设置参数的参数值。id:该属性是可选的,指定引用该元素的:该属性是可选的,指定引用该元素的id。553.3.2 数据标签4. 标签标签该标签有如下几个属性:下面是一个简单的例子:有一个Student类,该类中有name属性,并有其getter和setter方法: name:该属性是必选的,用来指定要实例化的JavaBean的实现类。id:该属性是可选的,如果指定了该属性,则该JavaBean实例会被放入StackContext中,从而允许直接通过id属性来访问该JavaB

47、ean实例。public class Student private String name;public String getName() return name;public void setName(String name) this.name=name;563.3.2 数据标签 运行结果:图3.8 bean标签实例界面 573.3.2 数据标签 5. 标签标签 使用action标签可以允许在JSP页面中直接调用Action。该标签有以下几个属性:id:该属性是可选的,该属性将会作为该Action的引用标志id。name:该属性是必选的,指定该标签调用哪个Action。namespace

48、:该属性是可选的,指定该标签调用的Action所在的namespace。executeResult:该属性是可选的,指定是否要将Action的处理结果页面包含到本页面。如果值为true,就是包含,false就是不包含,默认为false。ignoreContextParam:该属性是可选的,指定该页面中的请求参数是否需要传入调用的Action。如果值为false,将本页面的请求参数传入被调用的Action。如为true,不将本页面的请求参数传入到被调用的Action。583.3.2 数据标签6. 标签标签date标签主要用于格式化输出一个日期。该标签有如下属性:nice属性为true时,一般不指

49、定format属性。因为nice为true时,会输出当前时刻与指定日期的时差,不会输出指定日期。当没有指定format,也没有指定nice=true时,系统会采用默认格式输出。其用法为:format:该属性是可选的,如果指定了该属性,将根据该属性指定的格式来格式化日期。nice:该属性是可选的,该属性的取值只能是true或false,用于指定是否输出指定日期和当前时刻之间的时差。默认为false,即不输出时差。name:属性是必选的,指定要格式化的日期值。id:属性是可选的,指定引用该元素的id值。593.3.2 数据标签 7. 标签标签 include标签用于将一个JSP页面或一个Servl

50、et包含到本页面中。该标签有如下属性: 例子:value:该属性是必选的,指定需要被包含的JSP页面或Servlet。id:该属性是可选的,指定该标签的id引用。603.3.3 控制标签控制标签有以下几个:if:用于控制选择输出的标签。:用于控制选择输出的标签。elseif:用于控制选择输出的标签,必须和:用于控制选择输出的标签,必须和if标签结合使用。标签结合使用。else:用户控制选择输出的标签,必须和:用户控制选择输出的标签,必须和if标签结合使用。标签结合使用。append:用于将多个集合拼接成一个新的集合。:用于将多个集合拼接成一个新的集合。generator:用于将一个字符串按指定

51、的分隔符分隔成多个字:用于将一个字符串按指定的分隔符分隔成多个字符串,临时生成的多个子字符串可以使用符串,临时生成的多个子字符串可以使用iterator标签来迭代标签来迭代输出。输出。iterator:用于将集合迭代输出。:用于将集合迭代输出。merge:用于将多个集合拼接成一个新的集合,但与:用于将多个集合拼接成一个新的集合,但与append的拼接方式不同。的拼接方式不同。sort:用于对集合进行排序。:用于对集合进行排序。subset:用于截取集合的部分元素,形成新的子集合。:用于截取集合的部分元素,形成新的子集合。613.3.3 控制标签1. /标签标签这3个标签可以组合使用,但只有if

52、标签可以单独使用,而elseif和else标签必须与if标签结合使用。if标签可以与多个elseif标签结合使用,但只能与一个else标签使用。其用法格式如下:标签体标签体 标签体标签体 . 标签体标签体623.3.3 控制标签 2. 标签标签该标签主要用于对集合进行迭代,这里的集合包含List、Set,也可以对Map类型的对象进行迭代输出。该标签的属性如下:value:该属性是可选的,指定被迭代的集合,被迭代的集合通常都由OGNL表达式指定。如果没有指定该属性,则使用值栈栈顶的集合。id:该属性是可选的,指定集合元素的id。status:该属性是可选的,指定迭代时的IteratorStatu

53、s实例,通过该实例可判断当前迭代元素的属性。如果指定该属性,其实例包含如下几个方法:int getCount():返回当前迭代了几个元素。:返回当前迭代了几个元素。int getIndex():返回当前被迭代元素的索引。:返回当前被迭代元素的索引。boolean isEven:返回当前被迭代元素的索引元素是否是偶数。:返回当前被迭代元素的索引元素是否是偶数。boolean isOdd:返回当前被迭代元素的索引元素是否是奇数。:返回当前被迭代元素的索引元素是否是奇数。boolean isFirst:返回当前被迭代元素是否是第一个元素。:返回当前被迭代元素是否是第一个元素。boolean isLa

54、st:返回当前被迭代元素是否是最后一个元素。:返回当前被迭代元素是否是最后一个元素。633.3.3 控制标签应用举例: 控制标签控制标签 tr style=background-color:silver 643.3.3 控制标签 通过添加Struts 2必须的Jar包,再建立上面JSP文件,修改web.xml后,就可以部署运行,运行结果如图3.9所示。图3.9 iterator标签实例运行结果653.3.3 控制标签 3. 标签标签应用举例,可以把上例的JSP文件进行修改,其代码为: tr style=background-color:silver 663.3.3 控制标签 部署运行,运行结果

55、如图3.10所示。图3.10 append标签实例运行界面673.3.3 控制标签4标签标签假设有2个集合,第一个集合包含3个元素,第二个集合包含2个元素,分别用append标签和merge标签方式进行拼接,它们产生新集合的方式有所区别。下面分别列出:用用append方式拼接,新集合元素顺序为:方式拼接,新集合元素顺序为:l第第1个集合中的第个集合中的第1个元素个元素l第第1个集合中的第个集合中的第2个元素个元素l第第1个集合中的第个集合中的第3个元素个元素l第第2个集合中的第个集合中的第1个元素个元素l第第2个集合中的第个集合中的第2个元素个元素用用merge方式拼接,新集合元素顺序为:方式

56、拼接,新集合元素顺序为:l第第1个集合中的第个集合中的第1个元素个元素l第第2个集合中的第个集合中的第1个元素个元素l第第1个集合中的第个集合中的第2个元素个元素l第第2个集合中的第个集合中的第2个元素个元素l第第1个集合中的第个集合中的第3个元素个元素683.3.4 表单标签大部分的表单标签和HTML表单元素是一一对应的关系,如下面的代码片段:还有下面这种情况,如果有这样一个JavaBean类,类名为“User”,该类中有两个属性:一个是username;另一个是password,并分别生成它们的getter和setter方法,在JSP页面的表单中可以这样为表单元素命名:对应着:对应着:对应

57、着:对应着:用户名:用户名:对应着:对应着:密码:密码:693.3.4 表单标签 1. 标签标签 2. 标签标签或者为:703.3.4 表单标签 3. 标签标签 4. 标签标签或者为:713.3.4 表单标签 5. 标签标签6. 标签标签head标签主要用于生成HTML页面的head部分。在介绍标签时说过,要在head中加入该标签,主要原因是标签中有一个日历小控件,其中包含了JavaScript代码,所以要在head部分加入该标签。或者为:723.3.5 非表单标签非表单标签主要用于在页面中生成一些非表单的可视化元素。这些标签不经常用到,下面大致介绍一下这些标签: a:生成超链接。 actio

58、nerror:输出Action实例的getActionMessage()方法返回的消息。 component:生成一个自定义组件。 div:生成一个div片段。 fielderror:输出表单域的类型转换错误、校验错误提示。 tablePanel:生成HTML页面的Tab页。 tree:生成一个树形结构。 treenode:生成树形结构的节点。733.4 Struts 2拦截器743.4 Struts 2拦截器3.4.1 拦截器配置拦截器配置定义拦截器使用元素。其格式为:只要在与之间配置子元素即可传入相应的参数。其格式如下:参数值.753.4 Struts 2拦截器3.4.1 拦截器配置拦截器

59、配置通常情况下,一个Action要配置不仅一个拦截器,往往多个拦截器一起使用来进行过滤。这时就会把需要配置的几个拦截器组成一个拦截器栈。定义拦截器栈用元素,由于拦截器栈是由各拦截器组合而成的,所以需要在该元素下面配置子元素来对拦截器进行引用。其格式如下:763.4.1 拦截器下面是默认拦截器的配置方法: 773.4.2 拦截器实现类 Struts 2提供了一些接口或类供程序员自定义拦截器。如Struts 2提供了com.opensymphony. xwork2.interceptor.Interceptor接口,程序员只要实现该接口就可完成拦截器实现类。该接口的代码如下:该接口中有三个方法:l

60、init():该方法在拦截器被实例化之后、拦截器执行之前调用。lintercept(ActionInvocation invocation):该方法用于实现拦截的动作。ldestroy():该方法与init()方法对应,拦截器实例被销毁之前调用,用于销毁在init()方法中打开的资源。import java.io.Serializable;import com.opensymphony.xwork2.ActionInvocation;public interface Interceptor extends Serializablevoid init();String intercept(Act

61、ionInvocation invocation) throws Exception;void destroy();783.4.3 实例应用自定义拦截器 下面来配置拦截器,如果输入框中输入的内容是“hello”,返回当前页面。实现该功能只需要在原项目的基础上配置拦截器即可。首先编写拦截器实现类,代码如下:package org.tool;import org.action.StrutsAction;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.op

62、ensymphony.xwork2.interceptor.AbstractInterceptor;public class MyInterceptor extends AbstractInterceptorpublic String intercept(ActionInvocation arg0) throws Exception / 得到得到StrutsAction类对象类对象StrutsAction action=(StrutsAction)arg0.getAction();/ 如果如果Action类中的类中的name属性的值为属性的值为hello,返回错误页面,返回错误页面if(act

63、ion.getName().equals(hello)return Action.ERROR;/ 继续执行其他拦截器或继续执行其他拦截器或Action类中的方法类中的方法return arg0.invoke();793.4.3 实例应用自定义拦截器 在struts.xml配置文件中进行拦截器配置,修改后的代码如下:/welcome.jsp/hello.jsp/hello.jsp803.4.3 实例应用自定义拦截器 经过这样简单的配置后,重新部署项目,在运行界面输入“hello”,也会经过拦截返回到当前页面,如图3.11、图3.12所示。 图3.11 运行界面 图3.12 提交后返回当前页面81

64、3.5 Struts 2国际化应用823.5 Struts 2国际化应用下面以登录界面为例,讲解国际化应用内容。1. 建立项目建立项目打开MyEclipse,建立一个Web项目,命名为“Test”。2. 加载加载Struts 2的基本类库的基本类库该步骤与3.2.1节中的第3步步骤相同,这里不再赘述。3. 修改修改web.xml其内容见3.2.1节第4步。833.5 Struts 2国际化应用 4. 建立资源文件建立资源文件 需要在项目的src文件夹下建立一个名为“struts.properties”的文件。只需要在该文件中编写下面代码: 下面来建立两个资源文件,分别为中文和英文。struts

65、.custom.il8n.resources=资源文件名该例中资源文件名为“messgageResource”,故struts.properties应为:struts.custom.il8n.resources= messgageResourceusername=DLMpassword=KLlogin=loginusername=登录名password=口令login=登录843.5 Struts 2国际化应用 将上面文件以“messageResource_temp.properties”为文件名保存在项目的WEB-INF/classes文件夹下,因为该文件包含了非西欧字符,所以必须用nati

66、ve2ascii命令来处理。选择【开始】【运行】菜单项,输入“cmd”,看到如图3.13所示的界面。图3.13 输入cmd后的界面853.5 Struts 2国际化应用 然后输入找到项目的class路径下,如“D:lybworkspaceTestWebRootWEB-INFclasses”,得到如图3.14所示的界面。在命令行输入“native2ascii messageResource_temp.properties messageResource_zh_CN.properties”。这样就会在class路径下产生messageResource_zh _CN.properties文件。图3.14 找到项目的class路径863.5 Struts 2国际化应用 5. 建立建立login.jsp文件文件 Struts 2访问国际化消息主要有以下三种方式: 在JSP页面中输出国际化消息,可以使用Struts 2的标签,该标签可以指定name属性,该属性指定国际化资源文件中的key。 在Action中访问国际化消息,可以使用ActionSupport类的getText()方法,该方法可以接收

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!