Struts2 数据输入校验(2) —— XML验证
Struts2 数据输入校验(2) —— XML验证
struts2提供了通过XML方式对输入数据进行验证的校验框架。
在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑。
该校验XML的dtd格式文件
为https://www.360docs.net/doc/9512820575.html,/xwork/xwork-validator-1.0.2.dtd,具体内容可以展开下面的代码:
https://www.360docs.net/doc/9512820575.html,/xwork/xwork-validator-1.0.2.dtd
可以看到,数据校验XML的根元素
1、前者field 是针对字段进行的校验;
2、后者validator 是非字段或者说全局范围的校验。
在介绍完校验是怎么回事后,后面会简单比较一下两种校验方式的区别。
一、字段校验:(field)
先看个基本示例
true
4
10
有几个地方需要注意一下的。
1、field-validator的type在哪里定义的?
struts2校验框架预设的类在包com.opensymphony.xwork2.validator.validators中,同一目录下的default.xml中定义了field-validator中type的名称和对应的处理类。
default.xml
其中,name是上面type需要引用的名字,而后面的class则是这些validator对应的类。这些类中大部分都是自解释的,其中fieldexpression比较特殊,它提供了一种多个field之间比较值的机制。
2、param的值又是在哪里找到的呢?
param中的name值在上述类中被定义为属性。譬如说在类
com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator中(也就是stringLength对应的处理类),就定义了
boolean trim;
int minLength,maxLength;
及它们的get/set方法。
3、message的注意事项
(1)每个field都必须拥有一个message;message错误信息最后是以addFieldError 实现的,也就是说是field一级的错误。
(2)message中可以引用param变量,引用格式为${param1},如上面的例子中对password验证失败的报错信息。
(3)message的内容可以放到全局i18n属性文件中,并在message中以key属性值指定,比如上面例子中对username验证失败的报错信息。
二、非字段校验/全局校验
全局校验和字段校验其实类似,使用的验证器也是那些。区别在于校验的方式和关注点不同:
1、字段校验先指定那个字段要校验,再指定用那些校验器来校验该字段;
2、全局校验不针对特定字段,先指定验证器,再来指定用该校验器校验那些字段。
基本示例如下:
username
true
4
10
password
示例很简单,第一个validator是校验“不为空的字符串”,校验“用户名字段,第二个校验器校验“字符串长度6-10”,校验“密码两个字段。
很明显,如果页面中存在一些共性的验证要求,用这种方式就比针对字段的验证要方便。但这种方式可能不如前一种方式清晰易读。
上面这段话是错误的。
我原以为第二种验证器优先的方式可以一次验证多个field,但经验证struts(ver2.1.6)并不支持多个field的批量验证,只能一个一个写,比较遗憾。
两种验证方式可以混用。
三、其他问题
1、对多验证和跳转逻辑的支持
和《Struts2 数据输入校验(1) ——函数验证》中所说内容一样,校验框架也支持多验证和跳转逻辑。比如说在struts.xml文件中配置了
则校验文件的名字为XXXAction-newExcuteName-validation.xml
当然,在执行了上面的校验之后,如果存在XXXAction-validation.xml,则还会执行这个文件中定义的校验。
同时需要注意的是,如果该Action存在父类,则会先行执行父类的相应校验。
2、客户端校验
客户端校验是不安全的,但struts仍然提供了客户端的校验
方法是在
其实struts的控件本身和一般的HTML控件一样,如果想做客户端验证,可以触发它们的onXXX()事件,和通常的HTML页面做法一样。
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校验器类型详解 一、Struts2内建校验器 位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。 首先搞清楚: struts2字段校验器与非字段校验器的区别 字段校验器配置格式:
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.
struts2 实验报告
1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程
1.3 数据库设计 相关的映射文件:
Struts2校验器类型
Struts2校验器类型 10.3 验证器类型 可以把验证器类型分为两种:字段验证器和动作验证器。其中,字段验证器就像前面演示的那样,只验证提交的表单内的单个字段;而动作验证器一般验证提交的表单内的多个字段的关系,比如,录入产品信息的时候,产品的进价不能高于售价。 无论是哪种验证器,都需要考虑以下几个问题: ?验证谁? ?使用什么条件验证? ?不满足条件显示什么结果? ?不满足验证条件时显示的结果出现在页面的什么位置? 10.3.1字段验证器 字段验证器用来验证提交的表单内的单个字段,如同前面的示例,在验证文件里: java代码: 查看复制到剪贴板打印 1.
struts2面试题(自己总结)
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模拟(答案)
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试题
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.
STRUTS2实验报告
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下验证码的实现
Struts2下验证码的实现 https://www.360docs.net/doc/9512820575.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. }
Struts 2期末考试
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表单验证后的错误信息显示格式
如何自定义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; } 而后使用类似用
- 如何自定义Struts2表单验证后的错误信息显示格式
- struts2内置校验器使用
- Struts2校验器类型详解
- struts2经典面试题
- 输入校验总结
- 第4章基于Struts2的个人信息管理系统项目实训
- Struts2 校验(XML配置校验)
- struts2复习题(含答案)
- STRUTS2模拟(答案)
- STRUTS2模拟考试试题(答案)
- Struts2考试题分析
- Struts Validator验证器技术(2)
- struts2复习题(含标准答案)
- 南昌航空大学实验报告Struts拦截器实验权限的验证
- 如何自定义Struts2表单验证后的错误信息显示格式
- STRUTS2 实验报告
- 第九章 校验框架
- struts2面试题(自己总结)
- Struts 2期末考试
- 第三章 Struts标签与数据验证