- 浏览: 806030 次
- 性别:
- 来自: 株洲->深圳
文章分类
- 全部博客 (283)
- JAVA (54)
- 数据库 (25)
- Linux (22)
- Spring (9)
- Hibernate (7)
- mybatis (1)
- struts (10)
- javascript (22)
- Web (11)
- 异常 (30)
- 工具 (21)
- pay (9)
- 软件相关 (7)
- 其它 (28)
- python (1)
- 缓存 (9)
- 面试题 (2)
- 代码规范 (14)
- 网络编程 (1)
- 架构设计 (1)
- 程序测试 (3)
- 移动 (1)
- 安全 (2)
- 服务器 (4)
- 程序员 (1)
- php (4)
- 非技术 (7)
- web容器 (3)
- 竞彩篮球 (1)
- nginx (5)
- 加密 (2)
- jquery (2)
- 原理 (2)
- 项目管理 (1)
- www..betradar.com (0)
- www.betradar.com (1)
- 爬虫 (1)
最新评论
-
July01:
有一款web 打印控件StratoIO,浏览器和系统的兼容性都 ...
WEB免费打印控件推荐(4款) -
lihaimian:
你好,有个问题咨询一个,为何我在java中,无法使用与运算符, ...
位运算、异或的实际应用 -
小黄牛:
很好谢谢分享!推荐几篇spring boot基础入门文章:ht ...
Spring Boot 快速入门 (官方quick start) -
littlesheep:
我按照你的方法从新生成了密钥可是还是报者个错误...
狗日的支付宝 -
di1984HIT:
学习了~~~
javassist:增强型的java反射工具,获取方法参数名
(1) Apache Commons Validator
Commons -Validator包用来把验证规则程序提取出来,以供重复使用。这个包可以使用在Struts中,也可以独立的应用在任何其它的应用中。用户可以通过 java类的方式自定义验证方法,也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证,客户端的验证也支持,具体需要使用tag把 相应的js方法写入相应的页面中。
配置示例:
<form-validation> <global> <constant> <constant-name>验证方法的标志名</constant-name> <constant-value>正则表达式</constant-value> </constant> <validator name="这个验证方法的标志名,供下面的depends调用" classname="这个验证方法在哪个类中,为类全名" method="验证方法的名称" methodParams="这个验证方法需要的参数类型,依次以逗号格开,为类全名" depends="基于什么验证之上,可以为多个值,以逗号格开,值为方法的标志名" jsFunction="js的方法全名,格式为文件路径.方法名。文件路径以点隔开, 如果不填,默认为org.apache.commons.validator.javascript.xxxx" msg="对应于properties文件中的一条,作为不通过验证时返回的信息"/> </global> <formset language="语言" country="城市" variant="方言?"> <constant> <constant-name>验证方法的标志名</constant-name> <constant-value>正则表达式</constant-value> </constant> <form name="bean 对象名称"> <field property="bean中的属性名" depends="需要什么样的验证,可以为多个值,以逗号格开,值为方法的标志名"> <arg name = "变量名" key = "properties文件的key,或者来自Var的name" resource = "是/否来自资源文件"/> <var> <var-name>变量名</var-name> <var-value>变量值</var-value> </var> </field> </form> </formset> </form-validation>
官方地址:http://commons.apache.org/validator/index.html
参考:http://hi.baidu.com/pengwx/blog/item/db85b84b33d785f183025ce8.html
(2) iScreen
iScreen是一个Java对象验证框架。它的思想与Apache Jakarta的commons-validator项目相似,验证规则使用XML进行配置但也支持其它配置类型。它比commons-validator更强大,灵活,易于使用。
示例:
<validation-root namespace="my.project"> <validation-set id="RegistrationInfoSet" default-resource="theResource"> <!-- First, let's validate the user's first name. --> <use-validator ref="org.iscreen.StringValidator"> <mapping from="firstName" /> <label key="label.FirstName" /> <constraint property="minLength">1</constraint> <constraint property="maxLength">25</constraint> </use-validator> <!-- Now the last name. --> <use-validator ref="org.iscreen.StringValidator"> <mapping from="lastName" /> <label key="label.LastName" /> <constraint property="minLength">1</constraint> <constraint property="maxLength">30</constraint> </use-validator> <!-- Make sure that the registration date is after the birthdate. --> <use-validator ref="org.iscreen.DateRangeValidator"> <mapping from="birthDate" to="from" /> <mapping from="registrationDate" to="to" /> <label key="label.RegistrationDate" /> <failure property="failure" key="failure.RegistrationDate" /> </use-validator> <!-- Check the email address. --> <use-validator ref="org.iscreen.StringValidator"> <mapping from="emailAddress" /> <label key="label.EmailAddress" /> <constraint property="minLength">1</constraint> <constraint property="maxLength">256</constraint> </use-validator> </validation-set> <resource id="theResource"> <resource-file file="messages" /> </resource> </validation-root>
官方:http://i-screen.org/docs/index.html
(3) Java对象验证框架 OVal
OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java 语言、JavaScript 、Groovy 、BeanShell 等进行规则的编写。
示例:
private static class TestEntity { @Min(1960) private int year = 1977; @Range(min=1, max=12) private int month = 2; @ValidateWithMethod(methodName = "isValidDay", parameterType = int.class) private int day = 31; private boolean isValidDay(int day) { GregorianCalendar cal = new GregorianCalendar(); cal.setLenient(false); cal.set(GregorianCalendar.YEAR, year); cal.set(GregorianCalendar.MONTH, month - 1); cal.set(GregorianCalendar.DATE, day); try { cal.getTimeInMillis(); // throws IllegalArgumentException } catch (IllegalArgumentException e) { return false; } return true; } }
eSciDoc
https://www.escidoc.org/
SaferJava
http://code.google.com/p/saferjava/
Pinky
https://github.com/pk11/pinky
JProvocateur
http://www.jprovocateur.org/
NexOpen
http://nexopen.sourceforge.net/
gdv.xport
http://repository.agentes.de/gdv/gdv-xport/site/
suz-lab-gae
http://code.google.com/p/suz-lab-gae/
Cubby Simple Web Application Framework
http://cubby.seasar.org/20x/cubby-oval/index.html
Metawidget
http://metawidget.org
Struts 2 OVal Plug-in
http://cwiki.apache.org/confluence/display/S2PLUGINS/OVal+Plugin
Play! Framework
http://www.playframework.org/
Cayenne annotations
http://sourceforge.net/projects/cayannotations/
jsfatwork
http://code.google.com/p/jsfatwork/
mtn4java
http://www.mvnrepository.com/artifact/org.criticalsection.mtn4java/mtn4java/
Polyforms
http://code.google.com/p/polyforms/
rsser
http://code.google.com/p/rsser/
saetc
http://code.google.com/p/saetc/
ultimate-roundtrip
http://code.google.com/p/ultimate-roundtrip/
官方:http://oval.sourceforge.net/
(4) JaValid
JaValid是一个基于标注的验证框架,它允许用户标注Java类来引入验证。JaValid可以应用于任何类型的Java应用程序
示例:
package org.javalid.examples.core.example01; import org.javalid.annotations.core.JvGroup; import org.javalid.annotations.core.ValidateDefinition; import org.javalid.annotations.validation.MinLength; import org.javalid.annotations.validation.NotEmpty; import org.javalid.annotations.validation.NotNull; @ValidateDefinition public class Employee { private String firstName; private String lastName; public Employee() { } public void setFirstName(String firstName) { this.firstName = firstName; } @JvGroup (groups={"group01"}) @NotNull public String getFirstName() { return firstName; } public void setLastName(String lastName) { this.lastName = lastName; } @JvGroup (groups={"group01"}) @NotEmpty @MinLength (length=4) public String getLastName() { return lastName; } }
import java.util.List; import org.javalid.core.AnnotationValidator; import org.javalid.core.AnnotationValidatorImpl; import org.javalid.core.ValidationMessage; public class Test { public Test() { } public static void main(String[] args) { AnnotationValidator validator = null; List<validationmessage> messages = null; Employee emp = null; // Creates a default core validator using default configuration validator = new AnnotationValidatorImpl(); // Create our employee, as valid (no errors should be found) emp = new Employee(); emp.setFirstName("Martijn"); emp.setLastName("Reuvers"); // Validate our employee messages = validator.validateObject(emp,"group01"); System.out.println("Employee errors=" + messages.size()); // Should print 0 // Make our employee invalid emp.setFirstName(null); // NotNull should get fired messages = validator.validateObject(emp,"group01"); System.out.println("Employee errors=" + messages.size()); // Should print 1 System.out.println("Message=" + messages.get(0)); // Should print a NotNull message error // Make our employee even more invalid emp.setLastName(""); messages = validator.validateObject(emp,"group01"); System.out.println("Employee errors=" + messages.size()); // Should print 2 System.out.println("Messages=" + messages); // Should print a NotNull / NotEmpty message error // Set firstName fine, lastName too short length but not empty emp.setFirstName("Martijn"); emp.setLastName("Re"); messages = validator.validateObject(emp,"group01"); System.out.println("Employee errors=" + messages.size()); // Should print 1 System.out.println("Messages=" + messages); // Should print a MinLength message error // Finally, wrong group specified, validates nothing, as its not in the @JvGroup anywhere messages = validator.validateObject(emp,"invalidGroup"); System.out.println("Employee errors=" + messages.size()); // Should print 0 } }
这个相对功能少些,好像目前不支持配置,纯注解。
个人认为大型的网站还是要使用配置的形式,统一管理验证规则。
不知道还有没有其它好的后台验证方式。
发表评论
-
linux 服务器挂载出问题,导致写文件失败,程序超时
2014-07-11 11:07 0linux 服务器挂载出问题,导致写文件失败,程序超时 -
HessianProxy cannot connect to 'http://localhost
2014-04-12 10:57 3227HessianProxy cannot connect t ... -
位运算、异或的实际应用
2013-12-24 15:53 10762一. 位操作基础,用 ... -
了解LinkedList原理
2013-12-25 14:38 11171.LinkedList介绍 线性链表集合,循环链表ht ... -
了解ArrayList原理
2013-12-18 10:45 10621.ArrayList 介绍 有序集合,按顺序存储元素 ... -
java Cookie的有效期
2013-12-03 19:55 5960Cookie的有效期 Cookie的maxAge决定着Co ... -
10 道 Java 泛型面试题
2013-10-20 19:07 1751关于泛型的面试题在 Java面试中变得越来越常见,因为 Ja ... -
tomcat 访问记录日志
2013-05-17 01:43 1668Tomcat7.0.xx访问请求记录是默认打开的 ... -
支付宝RSA 公私钥 程序生成,openssl rsa 密钥程序生成,想要多少有多少
2013-05-01 00:21 30031.先配置好openssl 环境变量 保证cmd 输 ... -
MD2withRSA is disabled
2013-04-25 14:44 1705请求https报以一错误: javax.net.ssl.S ... -
狗日的支付宝
2013-04-24 23:26 14633用openssl 生成的密钥老是报以下错误: ja ... -
quartz 启动时会自动启动检测是否有可用的新版本
2013-04-24 20:06 1796日志提示: [org.quartz.utils.Updat ... -
Data truncation: Incorrect datetime value: '' for column 'createTime' at row
2013-03-22 17:11 21861mysql SQL Error: 0, SQLState: ... -
session失效通过头信息判断跳转
2013-03-13 18:06 1625/** * 拦截用户是否登录跳转到登录页 * 页面请 ... -
jsonlib转换树型数据没其它框架好
2013-01-26 14:39 1402jsonlib的性能请看这篇文章:http://wangym ... -
[ava.net.SocketException四大异常解决方案
2012-12-05 12:31 5229java.net.SocketException如何才能 ... -
SSM1.0中UpdateSingleCache 参数keyIndex,dataIndex解释
2012-08-31 00:21 1389simple-spring-memcached 简称:ssm ... -
simple-spring-memcached-3.0.x 注解详解
2012-08-10 18:37 4570@CacheName: 指定缓存实例注解 @Cach ... -
simple-spring-memcached-3.0.x 用了lombok类库记录一下
2012-08-08 12:20 1465消除冗长的 Java 代码 Lombok Lombok ... -
Ehcache集群使用
2012-07-21 15:48 4722集群的事例是由别人提供(附件也提供下载,我将相关包已导入),我 ...
相关推荐
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...
68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个...
#####Creating a validator class:有几种类型需要注意: 类型 描述 抽象J8验证器 任何验证器类都应该从这个类继承 J8验证结果 持有错误并有各种返回方法 J8当 由 AbstractJ8Validator 的 from 方法返回。 过滤对象...
76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...
在线资料Sa-Token 介绍Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题框架集成简单、开箱即用、API设计清爽,通过Sa...