Struts2-类型转换与输入验证.ppt_第1页
Struts2-类型转换与输入验证.ppt_第2页
Struts2-类型转换与输入验证.ppt_第3页
Struts2-类型转换与输入验证.ppt_第4页
Struts2-类型转换与输入验证.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts第二章,类型转换与输入验证,1,目标,2.1 拦截器 2.2 类型转换 2.3 输入验证 2.4 fielderror标签,2,Struts截拦器,截拦器是Struts2中最重要的概念之一,Struts中有80%的功能都通过截拦器实现. 截拦器意义: 提高更高层次的解耦,无须侵入框架本身便可以添加新的功能. 截拦器是AOP的一种实现,底层通过动态代理模式完成,3,Struts截拦器与Action的关系,将一些功能放到截拦器,可以降低Action的复杂性,提高重用性. 截拦器的典型使用 封装请求参数 文件上传 异常处理 拦截器是Action的截拦器,4,截拦器工作原理,5,截拦器运行的关键代码,6,默认截拦器,如果没有为Action指定截拦器,则使用defaultStack作为默认截拦器 下面的功能由默认截拦器提供 请求参数封装 文件上传 类型转换异常处理 一旦为Action指定了截拦器,则默认截拦器不再起作用,必须显示指定默认截拦器.,7,截拦器定义,截拦器是一个继承自AbstractInterceptor抽象类或实现Interceptor接口的类,可以重写的方法: public void init():执行初始化动作 public void destroy():执行销毁动作 String intercept(ActionInvocation invocation):执行截拦动作 参数invocation:包含了Action的引用, invocation.invoke()方法用于将控制权转给下一个截拦器或者调用Action的execute()方法. 返回值为逻辑视图 AbstractInterceptor为init和destroy方法提供了默认实现.,8,截拦器示例,public class FirstInterceptor extends AbstractInterceptor Override public String intercept(ActionInvocation invocation) throws Exception System.out.println(“Action:“ + invocation.getAction().getClass().getName(); return invocation.invoke(); ,9,截拦器配置及使用,10,要点,如果Action配置了多个截拦器,截拦器的执行顺序与配置顺序相同 截拦器可以注入属性值,在struts.xml文件中通过value实现,作用于interceptor或interceptor-ref. 通过intercept的返回值,可以改变请求的流程控制(*). 一般来说, invocation.invoke()方法总是要调用的. 因为Action定义了截拦器,所以默认截拦器将失效.如果要用到默认截拦器提供的功能,必须显示配置在Action中. ,11,示例-给Action属性赋值,12, /index.jsp ,13,方法过滤,一般情况下,Action的任何一个方法执行时都会调用截拦器. 通过继承自MethodFilterInterceptor的截拦器可以指定哪些方法会执行截拦器,哪些不会. 执行动作定义在String doIntercept(ActionInvocation invocation)方法中. excludeMethods:指定哪些方法不调用截拦器(黑名单) includeMethods:指定哪些方法会调用截拦器(白名单) 如果includeMethods和excludeMethods冲突, includeMethods取胜.,14,方法过滤示例, /success.jsp m1,m2 m2 注:m1方法不调用methodint截拦器,m2会调用截拦器,15,要点,如果不指定excludeMethods和includeMethods,则所有方法都会被截拦器截拦. 如果方法在excludeMethods和includeMethods都配置了,则includeMethods取胜. 如果需要过滤多个方法,方法名之间用逗号隔开.,16,截拦器栈,将多个截拦器组合成一个截拦器栈 配置 使用 ,17,内置拦截器,erceptor.TimerInterceptor 用于打印Action执行的时间 erceptor.TokenInterceptor 防止重复提交表单 方法过滤拦截器 excludeMethods includeMethods 和配合使用 在Action中必须定义名为invalid.token的result,如果重复提交则自动跳转到该逻辑视图,18,默认截拦器,如果希望所有Action都被某个截拦器或截拦器栈截拦,可以使用指定默认截拦器 如果Action显示定义了截拦器,则默认截拦器失效.,19,小结,截拦器的作用和意义 截拦器的定义与配置 默认截拦器分析 截拦器栈,20,传统类型转换,客户端浏览器只能将字符串传送到服务器(文件上传除外),而服务器端java语言是强类型语言,数据类型非常丰富,这就造成B/S两端的类型不兼容问题. 传统做法: 将客户端数据转变成int int v = Integer.parseInt(request.getParameter(v); 缺陷: 过程烦琐枯燥.,21,Struts2类型转换,Struts2提供了强有力的表现层类型转换机制,无需程序员过多干预即可自动完成转换. Struts能自动处理类型转换过程中出现的未知异常. 下面的数据类型会自动转换: boolean,char,int,long,float,double基础类型,包括封装类型和对应数组. Date,String数组,元素类型为String的List,22,自定义类型转换器,类型转换器是一个继承自StrutsTypeConverter (抽象类)的类,必须重写两个方法: public Object convertFromString(Map context, String values, Class toClass) 从字符串转换成目标类型 public String convertToString(Map context, Object o) 将目标类型转换成字符串 注:上面的两个方法都必须重写.,23,自定义类型转换器-示例,24,注册自定义类型转换器,注册自定义类型转换器有两种方法 局部类型转换器:只有特定的Action才可以使用 注册方法:在Action所在的包中建立properties文件,文件名格式:Action类名-perties,内容如下: inver=com.sdhandson.conversition.IntArrayConverter 其中:inver是action属性名, 全局类型转换器:所有Action都可以使用 注册方法:在classpath下建立名为 perties的文件,内容如下: 目标类型(全限定名)=转换器全限定名,25,处理类型转换异常,转换出错后, ConversionErrorInterceptor截拦器会截拦转换异常,该截拦器会带领我们进入result为input的URL,并通过显示错误信息. 前提:Action必须是ActionSupport的子类 如果不使用struts自带的错误信息,可以在Action所在的包中定义”Action类名.properties”文件,内容如下: invalid.fieldvalue.inver=整型数组转换出错 其中, invalid.fieldvalue固定,inver是属性名称,26,类型转换器小结,一般来说,struts为我们提供的默认转换器能实现大部分需求,不需要重新定义新的转换器.,27,验证器,验证器和转换器是一对兄弟,他们总是如影随形. 所有用户的输入都是邪恶的 先类型转换,再验证 Struts2主要通过验证框架来完成数据验证. Action必须继承ActionSupport,28,Struts2的验证框架能做什么?,验证日期范围 验证双精度/整型/长整型数值范围 邮箱验证 验证字段关系 必填项验证 字符串长度验证 URL验证 正则表达式验证 正则表达式能解决绝大部分验证问题,29,使用struts2验证框架我们应该做什么?,我们可以为每一个单独的Action定义一个验证文件 验证文件格式:Action类名-validation.xml 也可以为Action的方法定义一个验证文件: 必须先为方法配置action 验证文件格式: Action类名-name-validation.xml 注:验证文件要和Action类放在同一包中,30,验证文件怎么写?,两个方面 DOCTYPE 从xwork-core-2.1.6.jar中可以找到 验证内容 查看doc文档,有详尽的说明和示范,31,验证示例,输入员工信息应该遵循下面的规范 员工姓名必填,且在6-20个字符之间 员工年龄必须在18-100之间 员工的邮箱必须输入正确格式 员工电话号码只接受手机号,32,验证示例-Action,public class EmployeeAction extends ActionSupport private String ename; private int age; private String email; private String phone; ,33,验证示例验证文件,验证文件名称为: EmployeeAction-validation.xml 验证员工姓名 true 员工姓名不能为空 6 20 员工姓名必须在$minLength-$max

温馨提示

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

评论

0/150

提交评论