有人可以指导我这个基本问题:使用Java对数据执行服务器端验证的最佳方法是什么?
我想知道是否有可用的开源库来执行服务器端验证。
感谢任何帮助。
答案 0 :(得分:4)
这取决于您使用的是哪个Web开发框架。
原始JSP Servlet
如果您使用的是简单的jsp servlet,那么我建议为每个表单/ jsp屏幕添加一个验证程序包/ jar。并在传递给服务之前从控制器验证它。
<强> JSF 强>
如果您正在使用JSF,那么提供了非常精心设计的验证阶段,您可以使用现成的验证器(您只需在表单字段中添加注释及其完成),或者您也可以创建自己的验证器。
Spring MVC
如果您使用的是Spring MVC,它还有一个saperate layer for validation。
<强> Struts的强>
Struts也有saperate layer for validation
答案 1 :(得分:3)
如果您希望验证POJO,可以查看Oval框架http://oval.sourceforge.net/
如果您的应用程序是基于pojos或bean设计的,那么JSR-303(及其实现)也可以提供帮助以下是OVal中的自定义验证示例: 假设你必须在SomeValueClass中验证变量map,并确保键'greeting'的值始终存在。
public class SomeValueClass {
@FormCollection
Map variables;
public static void main(String[] args) {
SomeValueClass svc1 = new SomeValueClass();
svc1.variables = new HashMap();
svc1.variables.put("greeting", "");
Validator validator = new Validator();
List<ConstraintViolation> violations = validator.validate(svc1);
System.out.println("svc1 violations.size() = " + violations.size());
}
“Map variables;”上的@FormCollection注释是一个自定义验证器,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@net.sf.oval.configuration.annotation.Constraint(checkWith = FormCollectionCheck.class)
public @interface FormCollection {
String message() default "Some errors in the form";
}
约束检查类将如下所示:
public class FormCollectionCheck extends AbstractAnnotationCheck<FormCollection> {
public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context, Validator validator) {
Map vars = (Map) valueToValidate;
return !(vars.get("greeting")==null || ((String)vars.get("greeting")).length()<=0);
}
}
希望有所帮助, 干杯
答案 2 :(得分:1)
然后你去提供像struts等提供内置验证的框架。这些将为你提供验证组件。它也是一个开源。