零点起飞学JavaWeb开发之Struts2框架技术

上传人:ji****72 文档编号:50679976 上传时间:2018-08-09 格式:PPTX 页数:28 大小:235.43KB
返回 下载 相关 举报
零点起飞学JavaWeb开发之Struts2框架技术_第1页
第1页 / 共28页
零点起飞学JavaWeb开发之Struts2框架技术_第2页
第2页 / 共28页
零点起飞学JavaWeb开发之Struts2框架技术_第3页
第3页 / 共28页
零点起飞学JavaWeb开发之Struts2框架技术_第4页
第4页 / 共28页
零点起飞学JavaWeb开发之Struts2框架技术_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《零点起飞学JavaWeb开发之Struts2框架技术》由会员分享,可在线阅读,更多相关《零点起飞学JavaWeb开发之Struts2框架技术(28页珍藏版)》请在金锄头文库上搜索。

1、第20章 Struts 2框架技术 Struts 2作为一种优秀的MVC框架技术,提供了一系 列用于方便Web编程的技术,如国际化操作、数据 类型转换、表单数据验证等。这些技术是在Struts 2 框架的基础上建立起来的,一般情况下用户只需要 编写配置文件,就可以高效率地使用这些技术。通 过本章的学习,读者可以理解并且能够使用Struts 2 的框架技术,去应对Java Web开发中对该部分内容 的需求。20.1 Struts 2的国际化操作 随着Web技术的飞速发展,网站的使用也有国际化 的趋势。一个中文网站在被其他国家的用户访问时 ,就需要用该国家的语言去显示页面内容。Struts 2 框

2、架提供了一种国际化操作的接口,用户只需要编 写代表不同语言的资源文件并且进行简单的配置, 就可以在JSP页面、Action类中引用这些资源。本节 将对如何实现国际化操作以及一些技术细节进 行讲解。20.1.1 Struts 2实现国际化的原理 一般来说,Struts 2视图层的JSP页面不会使用硬代码,例如以“用 户名:”或“username:”作为表单的提示,而是用资源文件中的 Key值代替硬代码,例如使用userName这个Key(变量名)来代替 具体的字符串。该Key值在不同语言的资源文件中对应不同的值, 在中文资源文件中对应“用户名:”,在英文资源文件中对应 “username:”。在

3、用户注册页面中,国际化实现的过程如下所示。 (1)当某个地区的用户访问该Web应用时,在其请求参数中有一 个名字为request_locale的参数,它说明了要显示的语言。例如英文 使用地区的请求为“Register.action? request_locale=en_US”,而中 文使用地区的请求为“Register.action? request_locale=zh_CN”。 (2)用户发出请求,在Register处理请求之前,有一个名字为 I18nInterceptor的拦截器获取request_locale参数的值,把它存入 session中。 (3)Register处理请求,最后显示

4、register.jsp页面,这时会判断 session中request_locale参数的值,根据其值决定显示哪个资源文件 的Key值。如果request_locale=en_US,显示“username:”,如果 request_locale= zh_CN,显示“用户名:”。20.1.2 Struts 2实现国际化的一般步 骤 以下是一个具体的例子,这个例子按照步骤去实现 ,通过它可以了解怎样一步步实现国际化。1在配置文件中定义basename basename也就是资源文件的第一个单词,Struts 2框 架根据basename去查找资源文件。作为一个常量定 义,可以在不同的配置文件中去

5、实现。2编写中英文资源文件 不同的资源文件给相同的变量(Key)赋予不同的 值。这样JSP页面就可以根据Key值去显示不同语言 的字符串。3将中文资源文件转换为unicode 编码 由于中文资源文件中出现了非西欧字符,必须把中 文字符转换为unicode码,这是因为Java的国际化是 通过unicode编码实现的。4编写用户注册页面 下面编写使用Key值的用户注册页面register.jsp5编写Action类 不仅JSP页面可以使用Key获取对应资源文件中的 Value值,Action类中也可以使用特定的方法根据Key 值查找对应的Value值。用户编写的Action类一般继 承Action

6、Support类,该类提供了getText(Key)方法可 以获得资源文件中的Value值。6编写注册成功的success.jsp页面 success.jsp用来显示用户注册成功的欢迎界面,同样 它也要实现国际化。7运行 下面分别看显示中文和英文的效果。直接在浏览器 中输入http:/localhost:8080/ch20/register.jsp,显示页 面。20.1.3 使用不同范围的资源文件 Struts 2讲究模块化的开发方式,不同的模块可以定 义自己的资源文件,这样就不至于加载一个很庞大 的全局资源文件,而造成对系统性能产生影响。使 用globalMessages作为basename

7、的资源文件是全局资 源文件。除了这种形式的资源文件还有包资源文 件、Action资源文件、临时资源文件。下面分别进行 介绍。1包范围资源文件 可以为某个pachage指定其资源文件,这个文件就是 从属于包范围的,它可以被该package的所有Action 类以及JSP页面所使用。包资源文件名按照 package_language_country.properties的方式命名。2Action资源文件 可以为某个Action类指定其资源文件,这个文件被该 Action专用。Action资源文件的命名规则为: ActionName_language_country.properties。3临时资源

8、文件 临时资源文件指的是JSP页面在被Web容器解析时动 态加载的资源文件。在编写JSP文件时,可以使用 标签来指定该JSP文件要使用的资源文件。20.1.4 加载资源文件的顺序 Struts 2是按照特定的顺序来加载不同范围的资源文 件的,一般来说,这个顺序就是由小范围到大范 围。Action类和JSP页面都有可能用到资源文件,下 面对它们的加载顺序进行说明。1Action用到的资源文件的加载顺 序 假如现在有一个业务控制器childAction,它有一个父类 fatherAction,并且有一个接口fatherInterface,则按照下面的顺 序加载资源文件。 (1)childActio

9、n所在的目录下,查找basename为childAction的 资源文件。 (2)如果找不到对应的Key值,则在fatherAction所在的目录下 ,查找basename为fatherAction的资源文件。 (3)如果还找不到对应的Key值,则在fatherInterface所在的目 录下,查找basename为fatherInterface的资源文件。 (4)如果还找不到对应的Key值,则在包所在的目录下,查找 basename为package的资源文件。 (5)如果还找不到对应的Key值,则查找全局资源文件,即 basename为struts.custom.i18n.resources

10、常量值的资源文件。 (6)如果找到最后还找不到对应的Key值,则直接输出该Key 值的字符串值。2JSP用到的资源文件的加载顺序 JSP加载资源文件的顺序没有Action那么复杂,顺序 如下: (1)在标签指定的国际化资源文件中加 载Key值对应的Value。 (2)如果在临时资源文件中找不到对应的Key值, 则直接查找全局资源文件中的Key值。 (3)如果还找不到对应的Key值,则直接输出该 Key值的字符串值。20.2 Struts 2的类型转换 在Web应用中,用户通过视图层输入的数据都是字 符串,而后台模型层可能是预定义类型、日期类 型、复合类型、复合类型的集合等。Struts 2框架

11、提 供了数据格式转换的机制,程序员只需要按照规则 去使用即可。本节结合实例介绍如何使用Struts 2的 类型转换功能。20.2.1 预定义类型和日期类型的转 换 对于预定义类型和日期类型,Struts 2可以直接将JSP 表单中的参数和Action类的同名属性对应起来,实现 类型转换。其实,在前面几章中这样的例子已经出 现过了,这里为了加深印象,再通过一个例子回顾 一下。20.2.2 复合类型的转换 复合类型是指程序员通过JavaBean定义的类型,例 如可以用Book.Java定义一个Book类型。这样就可以 在Action类中定义一个Book类型的属性。Struts 2框 架的机制允许在

12、JSP表单中通过字符串给这个复合类 型赋值。20.2.3 复合类型集合的转换 复合类型的集合也即JavaBean对象的集合,在Action 类中可以使用JavaBean对象的集合做属性,Struts 2 可以实现客户端字符串与这种属性的转换。20.2.4 Struts 2类型转换异常处理 用户输入的字符串和即将转换的类型不符合,这时 会出现异常,例如,在出生日期文本框中输入字符 串“hello”。对于异常信息,Struts 2框架使用拦截器 进行处理:struts-default.xml文件中定义了一个名字 为conversionError的拦截器,这个拦截器对转换的异 常信息进行捕获。如果S

13、truts 2在进行类型转换的过 程中出现异常,则该拦截器获取异常信息,并将其 封装为一个fielderror保存在ActionContext中。例如示 例20-5中当在出生日期文本框中填写字符串时, fielderror信息就会显示在页面上。20.3 Struts 2数据验证 在Web开发中,必须要对用户输入的表单内容进行 验证,以检验输入的内容是否符合格式要求和逻辑 要求。例如,用户在“价格”文本框中输入非浮点型 字符串,不符合格式要求,或者在“出生日期”文本 框中输入“2-2-2050”,虽然符合格式要求,但是不符 合逻辑要求。Struts 2框架已经创建了一个用于数据 验证的机制,程序

14、员只需要重写特定的方法,或者 编写对应的配置文件就可以实现数据验证。下面结 合实例进行分析。20.3.1 使用validate()方法进行验证 程序员在编写Action类时,一般继承ActionSupport类,该类提供了一个进 行数据验证的方法void validate(),如下所示。 01public void validate() 02 03public void addFieldError(String fieldName, String errorMessage) 04 validationAware.addFieldError(fieldName, errorMessage); 0

15、5 在validate()方法中进行验证时,如果有异常信息,可以通过addFieldError() 方法将异常信息添加到ActionContext中。所以程序员在Action类中可以重 写validate()方法进行客户端表单的验证。下面通过一个例子来说明其使用 方法。20.3.2 使用配置文件进行验证 除了使用validate()方法进行验证,程序员还可以编 写XML文件进行某个Action对应表单的验证。这个 文件的命名规则为ActionName-validation.xml,并且 要保存在和Action类相同的目录下。例如,Reg类的 验证文件为Reg-validation.xml。下面通过例子来说明 怎样使用XML文件进行验证。20.4 数据验证时国际化操作的实例 分析 前面几节讲了国际化和数据验证。在对用户表单进 行验证时,可以把显示的提示信息进行国际化操 作。20.5 小 结 本章结合实例讲解了Struts 2的3种框架技术,它们在 实际的Web开发中经常使用。本章的重点是Struts 2 国际化、数据类型转换、数据验证的使用方法。通 过本章的学习读者应该能够配置并使用Struts 2的这 些框架技术。至于这些技术的细节内容,限于篇幅 没有做详尽的介绍,读者可以参考其他的资料。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号