struts2的输入校验
1.输入校验的概述
输入校验是对用户的输入是否是按照开发者的意愿的校验
2.输入校验的必要性
由于web的开放性,输入校验会直接影响了系统的稳定性。因为不能保证每个用户的属于都会按照开发者的意图来输入相关的数据,而且有的用户还会恶意输入写非法数据来进行测试和破坏。
3.客户端校验和服务器校验
(1) 客户端校验:一般的开发者都是在客户端使用JS脚本进行对用户的客户端输入校验。但是呢,这也会有一定的问题。一般来说这是对大多数的用户都是可行的,但是还是会有一些及其聪明的或者有一定的“洁癖”的用户来说是不有任何作用的。比如:用户给浏览器设置了禁止运行脚本语言。
所以为了保护服务器,我们通常的需要在客户端与服务器同时的进行数据输入校验。客户端校验虽然是对大部分的用户起作用,但是这样也会帮着我们大大的减少服务器的压力;服务器校验是一保险动作,当极端的用户绕过客户端校验时候,服务器校验可以起到保护服务器的作用。同时服务器校验可以进行客户端本不能进行数据校验。
(2)服务器校验:利用struts2等框架技术进行校验等等。
一:在action类中进行数据输入检验
!:利用INPUT逻辑视图进行简单的数据转换检验:
当用户输入的数据数据类型不匹配时候,若在action中配置了INPUT的逻辑视图,则会自动的触发该视图。比如在注册的请求当中,age需要的数据类型是int,而用户在前台传过来的数据是String。在action中配置了INPUT的逻辑视图,则自动的触发该逻辑视图。讲得不是很清楚,可能使用代码还更容易懂。
封装数据的JavaBean类实例代码:
public class User implements Serializable {
private String name;
private String password;
private int age;
// 省略个属性的get/set方法
}
在action类中我们只接收参数,并不做任何的处理
public class FirstAction extends ActionSupport {
private User user;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
// 省去user的get/set方法
}
struts.xml的action配置
<action name="firstAction" class="com.usc.geowind.lilin.actions.FirstAction"
method="execute">
<!-- 结果指向 -->
<!-- name属性是指定接收的action返回来的字符串数值 -->
<result name="success">
/success.jsp
</result>
<!-- 配置输入校验错误INPUT逻辑处理视图 -->
<result name="input">
/register.jsp
</result>
<result name="fail">
/fail.jsp
</result>
</action>
当从前台传的数据age的值为int类型时候,能够成功的跳转到success.jsp页面,当输入age的参数不是int类型时候,返回到register.jsp页面并提示信息:
!!:在action类的execute等逻辑处理方法中输入检验:
当系统要求用户名不能为空或者是密码必须是6位及以上的要求时,利用返回INPUT方法检验数据的输入是否符合要求。但是使用此方法时候一定得注意:符合配定条件时候,一定得返回字符串,否则即使是判断条件成立,也不会发生效应的。
比如在上的基础上我们要求用户名不能为空,且密码不能少于六位。
我们只要改一下execute()方法就可。
@Override
public String execute() throws Exception {
if ((user.getName() == null || user.getName().equals("")) ||
(user.getPassword().trim().length() < 6)) {
return INPUT;
}
return SUCCESS;
}
!!!利用action类中的validate()方法进行输入检验:
如果数据量大了,代码就会很冗余而且会增加耦合度,所以一般开发当中不会使用该方法的。这时,就有了validate()方法的诞生。此方法返回任何值,达到判定的条件时候我们调用this.addFieldError()就会自动的触发INPUT逻辑视图。
以上一方法的例子为例。action中的方法只需做一下修改
@Override
public String execute() throws Exception {
return SUCCESS;
}
//在调用execute方法前,自动调用该方法进行数据检验。
//符合判定条件,this.addFieldError()直接触发执行INPUT逻辑视图,放弃执行execute方法
@Override
public void validate() {
if ((user.getName() == null || user.getName().equals("")) ||
(user.getPassword().trim().length() < 6)) {
this.addFieldError("Error", "输入有误");
}
}
值得注意的是,在此action类中,倘若有多个类似于execute的逻辑方法,不管是要调用哪一个逻辑方法,在调用逻辑方法前都会去调用validate()方法进行数据校对。
!!!!利用validateXxx()方法进行输入检验:
当我们在一个action类中写了多个类似于execute()的逻辑方法,但是我们要分别对不同的逻辑方法进行不同的数据校验或者是有部分逻辑方法进行数据校验。这时我们就不能使用validate()的方法进行统一校验了。这时我们可以使用validateXxx()方法分别对每个需要进行数据校验的逻辑方法进行教对。
当上面的例子多了一个go()的逻辑方法,而且我们调用的是go()方法并且只对其进行校对。我们的action类只要做一下修改其他不变。
@Override
public String execute() throws Exception {
return SUCCESS;
}
public String go() throws Exception{
return SUCCESS;
}
public void validateGo(){
System.out.println("---validateGo---");
if ((user.getName() == null || user.getName().equals("")) ||
(user.getPassword().trim().length() < 6)) {
this.addFieldError("Error", "输入有误");
}
}
二、基于struts2框架的校验器文件的校验方式。
有一定检验的码农来说,在action类中编写校验方法会显得类代码复杂臃肿也会增加代码的耦合度,一会该日后的维护增加不必要的压力。在使用struts2框架来说,这些都是需要尽量的避免。所以struts2提供了一种基于struts2框架的检验方式,是将校验规则保存在特定的文件中,似的action类与校验分离,从而提高系统的维护性课扩展性。
1.校验文件的配置:
校验文件需要与需要校验的类放在同一个文件目录下,且命名方式:ActionName-validation.xml或者是ActionName-alias-validation.xml (注解:ActionName:表示实际的Action类;alias:struts中配置action的名字)
2.校验器配置风格:
在struts2中提供了两种方式类配置校验器规则:字段与非字段式。两者没有本质的区别,只是在组织形式上方式不一样。字段式以字段优先,非字段式以校验器优先。
字段式校验器配置风格:先指定校验的属性:我来校验谁,由谁来校验!
<validators>
<filed name="被校验的字段"><!-- filed为基本元素 -->
<field-validator type="校验器类名"><!-- 指定校验类型 -->
<param name="参数名">参数值</param><!-- 指定参数 -->
<!-- 可以有多个参数 -->
<message key="I18Nkey">校验失败时候提示的信息</message>
</field-validator>
</filed>
<!-- 下一个要校验的代码 -->
</validators>
非字段校验器配置风格:先指定校验器:由谁来校验,来校验谁
<validator type="校验器名">
<param name="fieldName">需要被校验的字段</param>
<!--此处需要为不同校验器指定数量不等的校验规则 -->
<param name="参数名">参数值</param>
<!--校验失败后的提示信息 -->
<message>校验失败后的提示信息</message>
</validator>
参数比对:
required:必填校验器,要求field的值不能为null。
requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0
属性——trim:指定在校验之前是否去除字段串前后的空格。
stringlength:字段长度校验器,要求fidle的值必须在指定的范围内,否则校验失败。
属性——minLength:指定最小长度。 maxLength:指定量大长度。 trim:指定在校验之前是否去除字段串前后的空格。
regex:正则表达式校验器,检查衩校验的field是否匹配一个正则表达式。
属性——expression:指定正则表达式(2.3.15版用regexExpression)。 caseSensitive:指定进行正则表达式匹配时是否区分大小写。
int:整数校验器,要求field的整数值 必须在指定范围内。
属性——min:指定最小值。 max指定最大值。
double:双精度浮点数校验器,要求field的双精度浮点数值必须在指定范围内。
属性——min:指定最小值。 max指定最大值。
fieldexpression:字段OGNL表达式校验器。要求field满足一个ognl表达式。
属性——expression:指定ognl表达式(表达式要写在 <![CDATA[]]> 内)。
email:邮件地址校验器。要求如果field的值非空,则必需是合法的邮件地址。
url:网址校验器。要求如果field的值非空,则必需是合法的 url 地址。
date:日期校验器,要求field的日期值必须在指定范围内
属性——min:指定最小值。 max指定最大值。
conversion:转换校验器,指定在类型转换失败时,提示错误信息。
visitor:用于校验action中的复合属性。它拽定一个校验文件用于校验复合属性中的属性。
expression:OGNL表达式校验器。要求field满足一个ognl表达式。该逻辑表达式基于ValueStack进行求值。该校验器不可用在字段校验器风格的配置中!
属性——expression:指定ognl表达式(表达式要写在 <![CDATA[]]> 内)。
实例:还是以上面的例子为例,在action类中撤销所有校验使用校验文件校验
字段检验:检验文件代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<!-- 配置判定密码password的代码 -->
<field name="password">
<!-- 判定密码不能为空 -->
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
<!-- 设置密码长度 -->
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">15</param>
<message>密码长度必须是6--15位</message>
</field-validator>
</field>
<!-- 配置判定用户名name的代码 -->
<field name="name">
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>
<!-- 配置判定年龄age的代码 -->
<field name="age">
<field-validator type="int">
<param name="min">0</param>
<param name="max">120</param>
<message>年龄必须是在0--120之间</message>
</field-validator>
</field>
</validators>
非字段配置风格校验配置文件实例代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<!-- 详情代码均以贴在iteye博客:http://gaosililin.iteye.com/admin/blogs/2268544/edit -->
<!-- 非字段类节气 -->
<validators>
<!-- 对用户名与密码校验不能为空 -->
<validator type="requiredstring">
<param name="filedName">name</param>
<param name="filedName">password</param>
<message>用户名密码不能为空</message>
</validator>
<!-- 对密码长度校验在6————15位之间 -->
<validator type="stringlength">
<param name="filedName">password</param>
<param name="min">6</param>
<param name="max">15</param>
<message>密码长度必须在6--15位</message>
</validator>
<!-- 年龄配置 -->
<validator type="int">
<param name="filedName">age</param>
<param name="min">0</param>
<param name="max">120</param>
<message>年龄必须在[0,120]之间</message>
</validator>
</validators>
相关推荐
该文件详细介绍了struts2标签、校验方法,并提供例子供参考。可以供初学者使用。
SSH2项目,内含增删改查,带上传图片(带预览),有分页。有登陆。 基于MyEclipse8.5+MySQL+Tomcat6.0 struts2+spring2.5+hibernate3.2做的还有登陆DWR校验 导入项目后,会报错,导入jar包即可。 struts2+spring2.5+...
2.输入输出包: commons-io-1.4.jar 3.日志包: commons-logging-1.0.4.jar 4.信息校验包: commons-validator-1.3.0.jar 5.ajax使用时需要加载的包:dwr.jar 6.freemarker使用时加载的包:freemarker-2.3.8.jar...
十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...
Struts2+Spring3+Hibernate4集成框架,MySQL数据库搭建的个人... 要求: (1) 登录及注册页面要有输入校验,采取 struts2 的校验框架实现,即-validation.xml 配置文件的形式。 (2) 通讯录的查询功能必须支持模糊查询。
Struts2+hibernate+spring实现多文件的上传与下载功能,主要包括:上传、下载、删除 1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.Struts2进行下载处理,能对上传的所有文件进行...
本例主要是实现了struts2+spring3+hibernate3的 基本框架搭建的注册登录,以及用户增删改查,适于初学者学习。 包括:注册 登录功能 分页的实现 前端校验 验证码的实现 注册时有ajax 校验,登录时 后台从数据库...
properties文件即i18n国际化多国语言版的用法,struts2前台校验,对输入的数据进行验证validators struts2 OGNL 表达式详解 struts2 #,*,%
1.前台JS校验: 2.使用AJAX完成对用户名异步校验: 3.后台Struts2校验: 4.验证码: 5.发送激活邮件: 6.将用户信息存入到数据库:
struts2.0 hibernate3.0 spring3.0实现的一个用户登录和注册功能,采用的是MD5加密,和struts2的校验,欢迎下载学习!
struts2 相关包-------------------------------------------------- xwork-2.0.5.jar webwork的核心库 ognl-2.6.11.jar OGNL表达式语言,struts2支持该EL freemarker-2.3.8.jar 表现层框架,定义了struts2的可视...
目录 ...struts2表单标签 1 1、struts资源文件中文解决...SSH Struts+Spring+Hibernate整合 38 创建WEB工程 39 添加Struts2.1开发支持 39 添加Spring开发支持 39 添加Hibernate支持 40 添加Jar包 42 修改Web.xml文件, 42
第2篇为表现层框架Struts技术,介绍了Struts2的工作原理、核心文件、数据校验与国际化、标签库、拦截器等。第3篇为持久层框架Hibernate技术,介绍了Hibernate的工作原理、核心文件、核心接口及相关插件的使用方法。...
第2篇为表现层框架Struts技术,介绍了Struts2的工作原理、核心文件、数据校验与国际化、标签库、拦截器等。第3篇为持久层框架Hibernate技术,介绍了Hibernate的工作原理、核心文件、核心接口及相关插件的使用方法。...
本次实验是一个基于SSH框架的网上商城,本次实验的主要目标是完成在基本了解SSH框架之后对其的强化练习,通过实际操作才能发现更多的问题和收获更多的经验。总的来说本次实验的内容还是很丰富的,首先功能模块主要有...
Struts的验证框架Validate使用
第2篇为表现层框架Struts技术,介绍了Struts2的工作原理、核心文件、数据校验与国际化、标签库、拦截器等。第3篇为持久层框架Hibernate技术,介绍了Hibernate的工作原理、核心文件、核心接口及相关插件的使用方法。...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
用ssh2做的练习用小程序。用到了拦截器控制权限,数据校验。用户名和密码写死了。管理员账号admin,密码admin。普通用户账号basa,密码basa
2.5.3 自定义国际化struts 2校验错误消息 92 2.5.4 struts 2的自带校验器 92 2.6 struts 2的拦截器 94 2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100...