在JSP中validation参数的最佳实践是什么?

我正在实现一个JSP,它需要一些必须在运行jsp之前validation的参数。

  1. 建议:使用TaglibrariesvalidationJSP中的参数
  2. 建议:预解析filter中的参数

你怎么看?

编辑

感谢您的好答案,但我想知道如果您提供像谷歌图表API这样的服务,最好的做法是什么,您不能指望在发送之前由表单检查参数。 例如: https ://chart.googleapis.com/chart ? tt =&chd =&chs =&… additional_parameters …

两者都不是好方法。 控制器/业务逻辑不属于JSP(标记)。 filter几乎是好的,但它不够具体。 这项工作应该由servlet完成。 您将表单提交给servlet进行后处理,对吗? 听起来你还没有这样做,否则答案会非常简单。

在我们的servlets标签wiki页面中,您可以找到一个hello world示例,该示例使用带有Servlet的JSP来对表单提交进行后处理。 这是相关的摘录:

 ${messages.name} 

 String name = request.getParameter("name"); if (name == null || name.trim().isEmpty()) { messages.put("name", "Please enter name"); } // ... request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response); 

此外,存在MVC框架,它删除了这种用例的所有样板(重复/重复)servlet代码,例如JSF,Spring MVC,Wicket,Stripes,Struts2等。例如JSF,它看起来像这样的东西:

   

就这样。 JSF的FacesServlet控制器servlet将validation它是否已填入并在给定位置显示(可配置)消息,而无需任何自定义Java代码。 您甚至可以将其移至模型,JSF也对JSR303 beanvalidation提供透明支持。 例如

   

 @NotNull(message="Please enter name") private String name; 

根据您的修改进行更新

感谢您的好答案,但我想知道如果您提供像谷歌图表API这样的服务,最好的做法是什么,您不能指望在发送之前由表单检查参数。 例如: https : //chart.googleapis.com/chart ? tt =&chd =&chs =&。。additional_parameters …

只需以相同的方式使用servlet。 唯一的区别是你要在doGet()实现作业而不是doPost() ,如果需要,在错误上返回HTTP 400 :)再次检查我们的servlets标签wiki页面以更好地理解它们的用途。 或者更进一步,使用Web服务框架,例如JAX-WS或JAX-RS,它们像MVC框架那样透明地完成这项工作。

使用MVC框架(Spring MVC,Stripes,Struts 2等)并validation控制器类中的参数。 每个MVC框架都支持参数validation,您可以清楚地分离关注点。

示例: 当使用mvc:annotation-driven时 ,Spring MVC会自动注册JSR-303样式的参数Validation(如果在类路径上有一个JSR-303提供程序,例如Hibernate-Validator)