Struts2内建校验器
10.4 内建验证器
10.4.1概述
Struts2的验证框架已经为我们建立了足够多的内建验证器,以满足不同的验证要求,接下来就来逐一学习这些内建的验证器。
Struts2的内建验证器的声明文件被放置在xwork-core-2.1.6.jar文件中,其位置为
/com/opensymphony/xwork2/validator/validators/default.xml,内容为:
java代码:
查看复制到剪贴板打印
1.
2.
3."-//OpenSymphony Group//XWork Validator Config 1.0//EN"
4."https://www.wendangku.net/doc/5d3367457.html,/xwork/xwork-validator-config-1.0.dtd">
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
在这个文件中,每个内建验证器都以一个
10.4.2类型转换错误验证器(conversion)
conversion验证器用来验证类型转换时是否出错。如果一个类型为int的参数接到了“18a”这个字符串,conversion验证器就会报错。
conversion验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.3整数验证器(int)
int验证器用来验证一个整数型参数是否在指定的范围内。如果一个已经被成功转换为int的属性不在验证器指定的范围内,int验证器就会报错。
int验证器可以有两个参数:
?min用来指定可接受范围的最小值。
?max用来指定可接收范围的最大值。
注意:conversion验证器验证的是参数能不能被正确转化为整数,int验证器是在参数已经被正确的转化为整数之后,再考察它的范围。因此,如果想限制年龄文本框填入整数类型的数字,并且在18岁以上,需要先引用conversion验证器检查用户填入的是否是一个整数,然后再引用int验证器来检查用户填入的年龄是否大于等于18。
int验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.4短整数验证器(short)和长整数验证器(long)
short验证器和long验证器与int验证器非常相似,都是用来验证参数是否在指定范围之内,就不去赘述了。
short验证器和long验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.5日期验证器(date)
date验证器用来验证一个日期型参数是否在指定的范围内。如果一个已经被成功转换为date的属性不在验证器指定的范围内,date验证器就会报错。
date验证器可以有两个参数:
?min用来指定可接受范围的最小值。
?max用来指定可接收范围的最大值。
注意:指定日期范围的时候,需要使用统一的格式,比如用MM/DD/YYYY的格式等。
date验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.6双精度浮点验证器(double)
double验证器用来验证一个双精度浮点型参数是否在指定的范围内。如果一个已经被成功转换为double的属性不在验证器指定的范围内,double验证器就会报错。
double验证器可以有四个参数:
?minInclusive用来指定可接受范围的最小值,包含给定值。
?maxInclusive用来指定可接收范围的最大值,包含给定值。
?minExclusive用来指定可接受范围的最小值,不包含给定值。
?maxExclusive用来指定可接收范围的最大值,不包含给定值。
double验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.7邮件验证器(email)
email验证器用来验证一个参数是否为邮箱地址。
email验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.8 URL验证器(url)
url验证器用来验证一个参数是否为合法的URL。
url验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.9必填验证器(required)
required验证器用来验证一个参数是否不为null。
required验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.10必填字符串验证器(requiredstring)
requiredstring验证器用来验证一个字符串参数是否非空,既不为null,且长度大于0。
requiredstring验证器只有一个参数:
?trim:是否去掉字符串两边的空白,默认为true。
requiredstring验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.11字符串长度验证器(stringlength)
stringlength验证器用来验证一个字符串的长度是否在指定范围内。
stringlength验证器有三个参数:
?maxLength:字符串长度的最大值。
?minLength:字符串长度的最小值。
?trim:是否去掉字符串两边的空白,默认为true。
stringlength验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.12正则表达式验证器(regex)
regex验证器用来验证一个字符串是否符合一个正则表达式的要求。
regex验证器有三个参数:
?expression:必填参数,正则表达式。
?caseSensitive:是否检查大小写。
?trim:是否去掉字符串两边的空白,默认为true。
regex验证器既可以用于字段验证器,又可以用于动作验证器。
10.4.13字段表达式验证器(fieldexpression)和表达式验证器(expression)
fieldexpression验证器中必须指定一个返回布尔值的ognl表达式,根据这个表达式的值来确定是否符合条件。
fieldexpression验证器只有一个参数:
?expression:返回布尔值的ognl表达式,可以在这个ognl表达式中访问当前的值栈。
regex验证器既可以用于字段验证器,又可以用于动作验证器。
表达式验证器(expression)与字段表达式验证器(fieldexpression)类似,同样使用expression参数来指定返回布尔值的ognl表达式,但是,只能用于动作验证器。
10.4.14访问者验证器(visitor)
visitor验证器用于验证Action中的复合属性,可以直接把验证信息放到域对象中去注册,这样就使得同包内的不同Action在验证同一个域对象时,不用注册重复的验证信息。
vistior验证器有两个属性:
?context:引用的域对象验证信息文件上下文名。
?appendPrefix:是否在错误信息中添加
来示例一下,仍然要检查user.age大于等于18岁。保持Action不变,修改一下原来的验证信息文件,示例如下:
java代码:
查看复制到剪贴板打印
1.
2.
3.
4. c1
5. true
6.
7.
8.
9.
上面的示例,在user字段上指定了一个visitor验证器,设置上下文的名称为c1,设置前缀为true,也就是说在发生错误的时候,要在c1上下文返回的错误信息前加上“用户”这个前缀。
接下来新添一个上下文验证文件,其文件名为“字段的简单类名-上下文名-validation.xml”,比如现在要为user属性指定一个名为c1的上下文,所以文件名为UserModel-c1-validation.xml,放在与域对象同级的包内,即UserModel所在的包内,注意:不再是与Action同级的包内了,其内容示例为:
java代码:
查看复制到剪贴板打印
1.
2.
3."-//OpenSymphony Group//XWork Validator 1.0//EN""http://www.ope
https://www.wendangku.net/doc/5d3367457.html,/xwork/xwork-validator-1.0.2.dtd">
4.
5.
6.
7.
8. 18
9.
10.
11.
12.
它的本质也是一个验证文件,与之前直接在RegisterAction-validation.xml直接写出对user.age 的验证相比,没有本质上的区别,只是这个文件以UserModel类为验证的根,所以
私塾在线网站原创《研磨struts2》系列
一、Struts2输入校验介绍 Struts2的输入校验和类型转换都是对请求参数进行处理。 输入校验顾名思义就是请求参数是否能够满足一定的要求; 客户端校验&服务器端校验 客户端校验是指在浏览器这端通过Javascript进行初步校验,为了减轻服务器端的负载;服务器端校验是校验数据的最后一道防线; 在Struts2中,数据校验不需要写任何代码,只需要一个配置文件,配置校验的条件就可以了,非常简单;因此数据校验文件是数据校验的最重要的内容; 二、数据校验规则文件 1.数据校验规则文件规则: 1.此文件中规定了参数的一些校验条件; 2.可以包括字段型校验器和非字段型校验器; 3.命名规则:ActionName-validation.xml,其中ActionName是Action类的名字; 4.每个Action都有一个validation文件,规则文件放在和Action同目录下; 5.在前面我们讲到的配置逻辑action中,如果需要对某个逻辑Action配置数据校验文件,则命名规则为:ActionName-LogicActionName-validation.xml; 6.注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml 文件,则也会对此逻辑Action进行校验; 7.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context 中,因此在JSP中添加
Struts2校验器类型详解 一、Struts2内建校验器 位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。 首先搞清楚: struts2字段校验器与非字段校验器的区别 字段校验器配置格式:
Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A.
1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程
1.3 数据库设计 相关的映射文件:
Struts2校验器类型 10.3 验证器类型 可以把验证器类型分为两种:字段验证器和动作验证器。其中,字段验证器就像前面演示的那样,只验证提交的表单内的单个字段;而动作验证器一般验证提交的表单内的多个字段的关系,比如,录入产品信息的时候,产品的进价不能高于售价。 无论是哪种验证器,都需要考虑以下几个问题: ?验证谁? ?使用什么条件验证? ?不满足条件显示什么结果? ?不满足验证条件时显示的结果出现在页面的什么位置? 10.3.1字段验证器 字段验证器用来验证提交的表单内的单个字段,如同前面的示例,在验证文件里: java代码: 查看复制到剪贴板打印 1.
Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,
包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。
STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为_
Struts2试题 1.struts2的执行流程? 客户端提交一个HttpServletRequest请求(action或JSP页面) 请求被提交到一系列Filter过滤器,如ActionCleanUp和FiterDispatcher等 FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器询问ActionMapper是否需要调用某个action来处理 如果ActonMapper据诶的那个需要调用某个A传统,FilterDispatcher则把请求教到ActionProxy,由其进行处理 ActionProxy通过Configuration Manager询问框架配置文件,找到需要调用的Action类ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用action Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器最后ActionInvocation负责根据struts配置文件中配置的result元素,找到与返回值对应的result 2.struts2的web里需要配置什么? 1.
10.
1. 系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于struts2、spring、 hibernate三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用 户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按 钮来重复注册多个用户。 系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名 不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果 系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重 新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登 录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生 成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符 串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程 1.3 数据库设计 相关的映射文件: <hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/> <propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关 系。 2.系统实现与测试 2.1 系统采用的关键技术 mvc框架采用了struts2框架,struts2框架的易用性,极好的简化了系统的mvc层的实 现;本系统使用了struts2的json插件来完成ajax功能,除此之外本系统为了避免进行底 层的ajax交互,还是用了一个简单prototype.js函数库,用以简化ajax编程。struts2框 架的稳定性,为系统的稳定运行提供了保证。 spring容器作为系统的ioc容器,将系统中所有组件都放在spring容器中进行管理, 并且充分利用了spring ioc容器的功能,采用依赖注入来管理系统中各组件的依赖关系,避 免了各组件之间的硬编码耦合,提高了系统的可扩展性。 借助hibernate orm框架实现系统的持久化,通过hibernate的框架帮助,允许上层程 序采用面向对象的方式编程,二hibernate负责把面向对象的持久化操作转换成jdbc操作, 但hibernate的底层操作对开发者完全透明,从而让用户从具体的jdbc访问中释放出来,无 需理会底层的jdbc数据库访问,而是以面向对象的方式进行持久化操作。 2.2 关键程序流程
Struts2输入校验总结 2010-11-18 15:18 一.手动输入完成校验(服务器端的校验) 1.普通的处理方式:只需要在action中重写validate()方法 2.一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式: 重写validateXxxx()方法。Eg:如果,只校验login方法,则只需重写validateLogin(). 二.输入校验流程: 1. 类型转换器负责对字符串的请求参数执行类型转换。并将这些值设置成Action的属性值。 2. 转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError中。 3. 通过反射调用validateXxx()方法。 4. 调用validate(). 5. 如果未出现异常,则转入用户请求的处理方法,如果出现异常,则转入inout 视图所指定的视图资源(所以,对于验证的方法,必须要在配置文件中为其指定input)。 三.基于验证框架的输入校验 1. 编写校验配置文件:命名规则:action类名-validatin.xml. 2. 一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式: action类名-name属性名-validatin.xml.(name属性名:在strtus配置文件 中的) 3. 配置文件存放位置:放在与Action相同的文件夹内。 4. 验证规则:先加载action类名-validatin.xml,然后加载action类名-name 属性名-validatin.xml文件。 5. 校验器的配置风格:两种:字段校验器,非字段校验器。 字段校验器配置格式:
Struts2下验证码的实现 https://www.wendangku.net/doc/5d3367457.html,/blog/1300116 struts2;struts2验证码;java验证码;jsp验证码 项目中要用到验证码功能,所以实现后在此记录下来实现代码,以备日后用。首先是action UserLoginVerificationCodeActionImpl.java Java代码 1.package action.impl; 2. 3.import java.io.ByteArrayInputStream; 4.import java.io.IOException; 5. 6.import javax.servlet.http.HttpSession; 7. 8.import system.SysAction; 9.import tool.ImageCode; 10.import tool.RandomCodeImage; 11. 12.public class UserLoginVerificationCodeActionImpl extends Sy sAction implements 13. UserLoginVerificationCodeAction { 14. 15. private String code; 16. 17. private ByteArrayInputStream inputStream; 18. 19. private static final long serialVersionUID = 1234 56756789765L; 20. 21. /** 22. * @return the code 23. */ 24. public String getCode() { 25. return code; 26. }
1、MVC模式(View-model-controller) 2、MVC模式的优点: (1)低耦合性。视图层、模型层和控制层分离,很容易改变应用程序的数据层和业务规则,只需改变MVC的模型层就可以了。 (2)高重用性。多个视图可以对应一个模型,这样减少了代码的重复性及维护量,一旦模型发生改变,也易于维护。 (3)可实用性。MVC允许使用各种不同的表现层技术来访问同一个服务器端的代码。如jsp、velocity等。 (4)可维护性。3个模块层相分离,是的web应用更易维护和修改。 3、model2模式下,模型用javaBean充当,视图有jsp页面充当,控制器由servlet充当。 4.struts2是在struts1的基础上发展起来的,以webwork 为核心,采用webwork的设计理念。Struts2是webwork 的升级。 5、webwork是基于MVC架构模式的J2EE Web框架,现在的最新版本被拆分为XWork和WebWork2两个项目。WebWork的优点: (1)action不需要与WebWork耦合,提高了代码的重用率。 (2)支持更多表现层技术,从而有更好的适用性。Webwork的特征: (1)灵活的validation框架。运行开发者在XML文件中定义验证内容,在运行时通过interceptor自动应用,这样可以脱离Action类。 (2)Interceptor。在action处理的前后实现动态拦截,简化action代码。 (3)支持I18N (4)支持OGNL表达式语言 (5)Type Conversion.允许类之间很容易实现对象的转换。(6)允许动态对象图表遍历和方法执行,使用valuestack 透明访问多beans的属性。 (7)Ioc容器。管理组件的生命周期,使客户不需要通过创建注册类获得组件实例。 (8)velocity templates .使UI组件可重用,从而允许开发者很容易地定制Web页面的look&feel。 (9)容易和第三方软件集成。例如hibernate、spring和sitemesh。 (10)支持多种视图技术。如jsp、velosity、freemarker 和xml等。 6、struts2框架的大致处理流程: (1)客户端浏览器发送一个请求。 (2)核心控制器filterdispatcher根据请求决定调用合适的action。 (3)webwork的拦截器链自动对请求应用通过功能,如验证。 (4)回调action的execute()方法,该方法根据请求的参数来执行一定的操作。 (5)execute()方法的处理结果信息将被输出到浏览器中,struts2支持多种形式的视图。如jsp、html。 7、web.xml
如何自定义Struts2表单验证后的错误信息显示格式/样式 (s:fielderror,换行,黑点) 前面一段时间学过一些Struts2的知识,感觉Struts2和1.x还是有很大的差别的,我还不好说1.x肯定会过时还是2.0会很快流行,这毕竟是需要作为导向的。 在Struts2中验证真的比较容易,可以在Action中直接写validate,也可以使用validate框架进行验证,这个我觉得比Struts1.x方便了很多,但是有个问题一直困扰了我,直到现在有个小程序要用到这个方面的知识,那就是验证后如何很好地人性化地在jsp 页面中显示了。 大家都知道,Struts2显示验证结果有一些方式,一般通过两种方式,介绍如下: 1.在页面的上面或者某个位置全部显示错误 代码:
上面的差不多是Struts默认显示的两种方式,但是我们常见的显示方式并不是这样的,所有我们需要自定义这种格式,我们的习惯是把错误信息显示在某个出错字段的后面,一行显示,而它给了一个小黑点并且换了行,我们现在就来解决这个问题。 这个问题困扰了我很久,真的很久以前想过,但是没有彻底地解决,一直留到现在,今天在google上搜了很久,终于给解决了,现在分享一下解决的途径。 先提供网上的思路给大家(关键解决的思路) 1.struts2表单验证_错误信息的显示问题中提到 引用 10 楼 starwar2030 的回复: 可以在CSS中定义 .formFieldError { font-family: verdana, arial, helvetica, sans-serif; font-size: 12px; color: #FF3300; vertical-align: bottom; } .formFieldError ul{ margin: 0px; padding: 3px; vertical-align: middle; } 而后使用类似用