Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换。
  OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类:

  DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法。该方法可以实现字符串和对象之前相互转换

注册局部类型转换器:注册局部类型转换器使用局部类型转换文件指定,只要在局部类型转换文件中添加:
<propName>=<ConverterClass>
#指定Action的user属性需要使用UserConverter类来完成类型转换
user=org.crazy.app.converter.UserConverter
至此,局部类型转换成功
全局类型转换器:注册全局类型转换器应该提供一个xwork-conversion.properties,该文件由多项
<propType>=<ConverterClass>项组成,

输入校验的流程
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。
    不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4、再调用action中的validate()方法。
5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。

如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

  输入校验:客户端校验为了防止正常浏览者的错误输入,能降低服务器端额负载,服务端防止恶意用户的恶意 行为
<!-- 指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年纪必须在1到150之间</message>
</field-validator>
</field>
每个Action有一个检验文件,文件名应为ActionName-validation.xml
配置struts.xml文件
<!-- 用户注册的Action -->
<action name="regist" class="org.crazyit.app.action.RegistAction">
<!-- 类型转换失败、输入校验失败,转入input对应的视图 -->
<result name="input">/WEB-INF/content/registForm.jsp</result>
<result>/WEB-INF/content/show.jsp</result> </action>
在registForm.jsp中添加<s:fielderror>来输出错误提示。
手动完成校验需要重写validate()方法,重写validateXxx()方法

一、理解拦截器:
1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种

实现.需要时添加,不需要时取消该拦截器的配置即可。
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截

器链中的拦截器就会按其之前定义的顺序被调用。拦截器栈中还可以包含另一个拦截器栈。
二、实现Struts2拦截器原理
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后

串成一个列表,最后一个一个地调用列表中的拦截器

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截

器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。
<!-- 应用所需使用的拦截器都在该元素下配置 -->
<interceptors>
<!-- 配置mySimple拦截器 -->
<interceptor name="mySimple"lass="org.crazyit.app.interceptor.SimpleInterceptor">
<!-- 为拦截器指定参数值 -->
<param name="name">简单拦截器</param>
</interceptor>
</interceptors>

<action name="login" class="org.crazyit.app.action.LoginAction">
<result name="error">/WEB-INF/content/error.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
<!-- 配置系统的默认拦截器 -->
<interceptor-ref name="defaultStack"/>
<!-- 应用自定义的mySimple拦截器 -->
<interceptor-ref name="mySimple">
<param name="name">改名后的拦截器</param>
</interceptor-ref>
</action>

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:包含init()、destory()、intercept()三个方法
AbstractInterceptor类提供init()、destory()方法的空实现,被不需要打开资源的拦截器继承可以简化操作
SimpleInterceptor extends AbstractInterceptor实现了intercept()方法,

Struts 2 类型转换器 输入校验 拦截器的更多相关文章

  1. Struts2各个功能详解(2)-输入校验和拦截器

    前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器.  一:输入校验 客户端校验进行基本校验,如检验非空字段 ...

  2. struts2(三) 输入校验和拦截器

    前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器, --WH 一.输入校验 在以前我们写一个登录页面时,并 ...

  3. JAVAEE——SSH项目实战05:用户注册、登陆校验拦截器、员工拜访客户功能和MD5加密

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7170519.html 一.用户注册   显示错误信息到页面上的另一种方法: public ...

  4. Struts2学习(三)———— 输入校验和拦截器

    一.输入校验 在以前我们写一个登录页面时,并没有限制用户的输入,不管用户输入什么,我们都存入数据库中,很显然这是不行的,我们需要检测用户输入的文本是否合法,是否符合我们需要的文本格式,符合菜放行,而s ...

  5. Struts(二十八):自定义拦截器

    Struts2拦截器 拦截器(Interceptor)是Struts2的核心部分. Struts2很多功能都是构建在拦截器基础之上,比如:文件上传.国际化.数据类型转化.数据校验等. Struts2拦 ...

  6. 案例47-crm练习登录校验拦截器

    1 LoginInterceptor package www.test.web.interceptor; import java.util.Map; import com.opensymphony.x ...

  7. 类型转换器(InitBinder 初始化绑定器)

    单日期格式 导入jar包 创建FirstController.java @Controller public class FirstController { /** * @param binder * ...

  8. springMVC 防重校验(拦截器)

    <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.bitspace. ...

  9. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. nginx+tomcat多节点部署

    在一台机器上想要将一个应用程序部署多个节点,可以通过nginx来实现. 1.将tomcat复制多份,修改tomcat配置文件conf/server.xml,将端口号设置成不一样的 2.将多个tomca ...

  2. TCP/IP各层协议数据格式

    ISO规范里定义了7层网络模型,实际常用的仍为TCPIP四层网络模型. 注:本文章插图均来自<图解TCP/IP>. 数据链路层帧格式 经常说的帧格式为以太网帧格式,由于类型和帧长度字段不重 ...

  3. Python中如何将字符串作为变量名

    应用场景描述: 通过配置文件获取服务器上配置的服务名及运行端口号,编写python脚本检测服务上服务是否在运行? #!/usr/bin/env python # -*- coding:utf-8 -* ...

  4. C++ 类的多态四(虚析构函数的重要性)

    //虚析构函数的重要性 #include<iostream> using namespace std; /* 虚析构函数 主要用在多态中,用来释放子类对象内存空间,如果不使用虚析构函数, ...

  5. Java1.0的AWT(旧AWT)和Java1.1以后的AWT(新AWT)有着很大的区别

    Java1.0的AWT(旧AWT)和Java1.1以后的AWT(新AWT)有着很大的区别,新的AWT克服了旧AWT的很多缺点,在设计上有较大改进,使用也更方便,这里主要介绍新的AWT, 但在Java1 ...

  6. 微软公布带外安全更新MS14-068

     11月19日,微软公布了带外更新MS14-068以解决Windows 系统中的一个安全漏洞,该补丁安全等级为"严重". MS14-068 | Kerberos 中的漏洞可能同 ...

  7. ajax优点

    使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据.这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息. 只要是JS调用异步通讯组件并使用格式化的数据来更新 ...

  8. ChemDraw综合型化学工具你值得拥有

    1.ChemDraw综述 ChemDraw是业界领先的科学分析桌面套件,ChemDraw基础功能包括编辑.绘制与化学有关的一切结构图形,如建立和编辑各类分子式.方程式.结构式.立体图形.对称图形.轨道 ...

  9. node.js中的事件循环机制

    http://www.cnblogs.com/dolphinX/p/3475090.html

  10. SSM框架---详细整合教程

    http://blog.csdn.net/zhshulin/article/details/37956105/