《基于新信息技术的Java-EE应用开发实训》课件第八章.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《基于新信息技术的Java-EE应用开发实训》课件第八章.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于新信息技术的Java-EE应用开发实训 基于 信息技术 Java EE 应用 开发 课件 第八
- 资源描述:
-
1、第8章 Struts 2其他功能8.1 Struts 2类型转化8.2 Struts 2输入校验8.3 Struts 2国际化8.4 Struts 2的异常处理第8章 Struts 2其他功能8.1 Struts 2类型转化第8章 Struts 2其他功能Struts 2提供了非常强大的类型转换机制。Struts 2的类型转换可以基于OGNL表达式,只要我们把HTTP参数命名为合法的OGNL表达式,就可以充分利用Struts 2的类型转换机制。除此之外,Struts 2提供了很好的扩展性,开发者可以非常简单地开发出自己的类型转换器,完成字符串和自定义复合类型之间的转换,如果类型转换中出现未知异
2、常,类型转换器开发者无须关心异常处理逻辑,Struts 2的conversionError拦截器会自动处理该异常,并且在页面上生成提示信息。总之,Struts 2的类型转换器提供了非常强大的表现层数据处理机制,开发者可以利用Struts 2的类型转换机制来完成任意的类型转换。表现层数据的流向以及所需的类型转换如图8-1所示。第8章 Struts 2其他功能表现层另一个数据处理是数据校验,数据校验可分为客户端校验和服务器端校验两种。客户端校验和服务器端校验都是必不可少的,二者分别完成不同的过滤。客户端校验进行基本校验,如检验非空字段是否为空,数字格式是否正确等。客户端校验主要用来过滤用户的误操作
3、。客户端校验的作用是:拒绝误操作输入提交到服务器处理,降低服务器端负担。服务器端校验也必不可少,服务器端校验防止非法数据进入程序,导致程序异常、底层数据库异常。服务器端校验是保证程序有效运行及数据完整的手段。8.1.1 内建的类型转换对于大部分的常用类型,开发者无须理会类型转换,Struts 2可以完成大多数常用的类型转换。这些常用的类型转换是通过Struts 2内建的类型转换器完成的,Struts 2已经内建了字符串类型和如下类型之间的相互转换的转换器。boolean和Boolean:完成字符串和布尔值之间的转换。char和Character:完成字符串和字符之间的转换。int和Intege
4、r:完成字符串和整型值之间的转换。第8章 Struts 2其他功能long和Long:完成字符串和长整型之间的转换。float和Float:完成字符串和单精度浮点值之间的转换。double和Double:完成字符串和双精度浮点值之间的转换。Date:完成字符串和日期类型之间的转换,日期格式使用用户请求所在的Locale的SHORT格式。数组:在默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型的数组。集合:在默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串。因为Struts 2提供了上面这些类型转换器,所以如果需要把H
5、TTP请求参数转换成上面这些类型,则无须开发者进行任何特殊的处理。8.1.2 自动类型转换本节通过示例代码学习Struts 2内建的类型转换器。新建一个简单的Action文件:public class AddMaterialAction extends ActionSupport 第8章 Struts 2其他功能 /属性类型需要类型转换的对象 private Material material;public Material getMaterial()return material;public void setMaterial(Material material)this.material=
6、material;public String execute()throws Exception return SUCCESS;第8章 Struts 2其他功能 在Action中需要转换类型的Java Bean文件。public class Material /材料名 private String material;/材料价格 private Double bid;/材料数量 private int mount;/过期时间 private Date expireDate;第8章 Struts 2其他功能 public String getMaterial()return material;pu
7、blic void setMaterial(String material)this.material=material;public Double getBid()return bid;public void setBid(Double bid)this.bid=bid;public Date getExpireDate()第8章 Struts 2其他功能 return expireDate;public void setExpireDate(Date expireDate)this.expireDate=expireDate;public int getMount()return moun
8、t;public void setMount(int mount)this.mount=mount;第8章 Struts 2其他功能在Java Bean中有四个属性以及相对性的get()和set()方法。四个属性的类型分别是String、Double、int、Date类型。配置struts.xml文件。/addMaterial.jsp /showMaterial.jsp 新建一个输入页面addMaterial.jsp,在页面中分别录入对应Java Bean的四个属性,看看Struts 2内建的类型转换器是否自动工作。第8章 Struts 2其他功能类型转换 第8章 Struts 2其他功能 在
9、页面中输入相应的值,效果如图8-2所示。第8章 Struts 2其他功能当点击提交按钮后,页面跳转到Action并跳转到showMaterial.jsp页面展现给用户。showMaterial.jsp代码如下,主要通过Struts 2的标签输出前面从Action转过来的变量值。类型转换器 第8章 Struts 2其他功能 材料名:价格:库存量:过期日期:页面中的变量值已经转换成对应的数据类型,不再全部是在addMaterial.jsp页面中的字符串类型了,页面效果如图8-3所示。第8章 Struts 2其他功能8.1.3 类型转换中的错误表现层数据是由用户输入的,用户输入则是非常复杂的,正常用
10、户的偶然错误,还有恶意Cracker(破坏者)的恶意输入,都可能导致系统出现非正常情况。例如,在输入页面中,我们希望用户输入scott,tiger模式的字符串,希望用户输入的字符串用一个英文逗号作为用户名和密码的分隔符,如果用户输入多于一个的英文逗号,或者没有输入英文逗号,都将引起系统异常因为上面的类型转换器将无法正常分解出用户名和密码。实际上,表面层数据涉及的两个处理:数据校验和类型转换是紧密相关的,只有当输入数据是有效数据时,系统才可以进行有效的类型转换当然,有时候即使用户输入的数据能进行有效转换,但依然是非法数据。因此,有效的类型转换是基础,只有当数据完成了有效的类型转换,下一步才能做数
11、据校验。Struts 2提供了一个名为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中。我们查看Struts 2框架的默认配置文件struts-default.xml,该文件中有如下配置片段:第8章 Struts 2其他功能 input,back,cancel,browse 在上面默认拦截器栈中包含了conversionError拦截器引用,如果Struts 2的类型转换器执行类型转换时出现错误,该拦截器将负责将对应错误封装成表单域错误(fieldError),并将这些错误信息放入ActionContext中。显然,conversionError拦截器实际上是AOP中
12、的Throws处理。Throws处理当系统抛出异常时启动,负责处理异常。通过这种方式,Struts 2的类型转换器中只完成类型转换逻辑,而无须关心异常处理逻辑。因此,我们看第8章 Struts 2其他功能到上面的类型转换器无须进行任何异常处理逻辑。图8-4显示了Struts 2类型转换中的错误处理流程。图8-4只显示了类型转换器、conversionError拦截器和控制器之间的顺序图,并未完全刻画出系统中其他成员。当conversionError拦截器对转换异常进行处理后,系统会跳转到名为input的逻辑视图。第8章 Struts 2其他功能我们再来看上面自动类型转换的示例,在addMate
13、rial.jsp页面中输入无法转换的数值,例如,价格属性对应的文本输入框,本来应该输入数值,但是现在输入不是数值的字符。页面效果如图8-5所示。由于价格属性无法转换,系统会出现转换错误。这个错误Struts 2框架已经帮我们捕获处理。后台日志如下:警告:Error setting expression material.bid with value Ljava.lang.String;9b9a30ognl.MethodFailedException:Method setBid failed for object example.Materialff2be8 java.lang.NoSuchMe
14、thodException:example.Material.setBid(Ljava.lang.String;)Struts 2框架会转入input.jsp页面,等待用户再次输入。Struts 2会负责将转换错误封装成FieldError,并将其放在ActionContext中,这样就可以在对应视图中输出转换错误,如图8-6所示。第8章 Struts 2其他功能8.1.4 定义局部异常提示在默认情况下,使用标签会输出Invalid field value for field xxx的错误信息,其中xxx是Action中属性名,也是该属性对应的请求参数名。但是有时候我们希望自定义输出提示可能更
15、加人性化,此时可使用定义局部属性文件,在该文件中定义类型转换发生异常时会提示错误。我们在Action文件同目录下定义了名为“ActionName.properties”的属性文件,在该属性文件中对类型转换错误的属性进行定义。其中“material.bid”就是输入数据的JSP页面中定义的field的name。而“invalid.fieldvalue”则是固定不变的格式。这样设置后,系统就会在发生类型转换错误时候在页面上显示属性文件中定义的类型转换错误的提示信息。在Action 文件AddMaterialAction.java的相同目录下面,新建AddMaterialAction.propert
16、ies文件。经过上面更改后,异常输出提示如图8-7所示。#Action属性类型转换错误提示invalid.fieldvalue.material.bid=u6750u6599u4EF7u683Cu8F93u5165u9519u8BEF#材料价格输入错误第8章 Struts 2其他功能8.1.5 定义全局异常提示为每个Action定义局部异常提示有时是必要的,但实际工作一般会定义一个全局的异常提示的属性文件。先在struts.properties属性文件中更改自定义的属性文件名称。struts.custom.i18n.resources=messageResource添加自定义的属性文件mess
17、ageResource.properties。#0类型转换错误xwork.default.invalid.fieldvalue=0u7c7bu578bu8f6cu6362u9519u8bef在addMaterial.jsp页面中输入无法转换的数值。现在错误提示使用了全局自定义的提示,其实也就是修改了系统默认的xwork.default.invalid.fieldvalue属性值,效果如图8-8所示。第8章 Struts 2其他功能8.1.6 自定义类型转换器Struts 2的类型转换器实际上是基于OGNL实现的,在OGNL项目中有一个ognl.TypeConverter接口,这个接口就是实现类
18、型转换器必需的接口。不过ognl.TypeConverter接口中的方法过于复杂,所以OGNL项目提供了一个该接口的实现类:ognl.DefaultTypeConverter,通过继承该类实现类型转换器。新建一个自定义的类型转换器,它继承了ognl.DefaultTypeConverter,具体代码如下:public class MyConverter extends DefaultTypeConverter Override public Object convertValue(Map context,Object value,Class toType)return materialName
19、-+(String)value)0;第8章 Struts 2其他功能在自定义的类型转换器MyConverter中,重写了convertValue()方法。该方法完成类型转换。不过这种类型转换是双向的,当需要把字符串转化对象实例时,通过该方法实现,当把对象实例转换成字符串时也通过该方法实现。这种转换是通过toType参数类型是需要转换的目标类型。所以可以根据toType参数来判断转换方向。convertValue()方法参数和返回意义。第一个参数:context是类型转换环境的上下文。第二个参数:value是需要转换的参数,根据转换方向的不同value参数的值也是不一样的。该参数是一个字符串数组
20、类型,因为对于DefaultTypeConverter转换器而言,它必须考虑到最通用的情形,因此他把所有请求参数都视为字符串数组而不是字符串。相当于getParameterValues()获取的参数值。第三个参数:toType是转换后的目标类型。返回值:类型转换后的值。该值的类型也会随着转换的方向的改变而改变。由此可见转换的convertValue方法接受需要转换的值,需要转换的目标类型为参数,然后返回转换后的目标值。第8章 Struts 2其他功能完成自定义类型转换器编码后,通过属性文件注册并配置类型转换器。和定义局部异常提示的属性文件一样,在Action文件AddMaterialActio
21、n.java目录下面新建一个属性文件,文件命名规则是-conversion.properties,所以为AddMaterialAction.java定义的属性文件名称为AddMaterialAction.properties。在AddMaterialAction.properties文件中添加代码:material.material=example.MyConverter代码中“material.material”是指定转换addMaterial.jsp页面中“材料名”属性,转换器为自定义的example.MyConverter类。我们运行工程测试一下。在addMaterial.jsp页面输入
22、测试数据,效果如图8-9所示。第8章 Struts 2其他功能点击提交按钮后,“材料名”属性会通过自定义的类型转换器进行转换,在自定义类型转换器中把“材料名”属性自动添加前缀“materialName”,转换后的页面效果如图8-10所示。第8章 Struts 2其他功能8.2 Struts 2输入校验第8章 Struts 2其他功能8.2.1 Struts 2输入校验支持对于异常输入,轻则导致系统正常中断,重则导致系统崩溃。应用程序必须能正常处理表现层接收的各种数据,通常的做法是遇到异常输入应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常输入过滤掉。对异常输入的过滤,就是输入校验,也
23、称为数据校验。输入校验分为客户端校验和服务器端校验,客户端校验主要是过滤正常用户的误操作,主要通过JavaScript代码完成;服务器端校验是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。Struts 2框架提供了强大的类型转换机制,也提供了强大的输入校验功能,Struts 2的输入校验既包括服务器端校验也包括客户端校验。Struts 2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts 2的验证框架将会负责进行服务器校验和客户端校验。下面应用将会示范如何利用Struts 2的校验框架进行输入校验。使用Struts 2的校验框架进行
24、校验无须对程序代码进行任何改变,只需编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎样的规则。第8章 Struts 2其他功能本应用的表单代码如下:注册第8章 Struts 2其他功能上面代码定义了4个表单域,这4个表单域分别对应name、pass、age和birth这4个请求参数,假设本应用要求这4个请求参数满足如下规则:name和pass只能是字母和数组,且长度必须在4至25之间。年龄必须是1至150之间的整数。生日必须在1900-01-01和2050-02-21之间。下面是请求对应的Action代码:public class RegistAction extends Actio
25、nSupport private String name;第8章 Struts 2其他功能 private String pass;private int age;private Date birth;/此处省略了4个属性的setter和getter方法 /.private String pass;private int age;private Date birth;/此处省略了4个属性的setter和getter方法 /.第8章 Struts 2其他功能在上面Action中,我们仅提供了4个属性来封装用户的请求参数,并为这4个参数提供了对应的setter和getter方法。该Action继承
展开阅读全文