Zou*_*ire 2 java validation jsp
我正在实现一个JSP,它需要在运行jsp之前必须验证一些参数.
你怎么看?
编辑
感谢您的好答案,但我想知道如果您提供像谷歌图表API这样的服务,最好的做法是什么,您不能指望在发送之前由表单检查参数.例如: https://chart.googleapis.com/chart ? tt =&chd =&chs =&... additional_parameters ...
两者都不是好方法.控制器/业务逻辑不属于JSP(标记).过滤器几乎是好的,但它不够具体.这项工作应该由servlet完成.您正在将表单提交给servlet进行后期处理,对吧?听起来你还没有这样做,否则答案会非常简单.
在我们的servlets标签wiki页面中,您可以找到一个hello world示例,该示例使用带有Servlet的JSP来对表单提交进行后处理.这是相关的摘录:
<input id="name" name="name" value="${fn:escapeXml(param.name)}">
<span class="error">${messages.name}</span>
同
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,它看起来像这样的东西:
<h:inputText id="name" value="#{bean.name}" required="true" requiredMessage="Please enter name" />
<h:message for="name" />
就这样.JSF的FacesServlet控制器servlet将验证它是否已填入并在给定位置显示(可配置)消息,而无需任何自定义Java代码.您甚至可以将其移至模型,JSF也对JSR303 bean验证提供透明支持.例如
<h:inputText id="name" value="#{bean.name}" />
<h:message for="name" />
同
@NotNull(message="Please enter name")
private String name;
根据您的修改进行更新:
感谢您的好答案,但我想知道如果您提供像谷歌图表API这样的服务,最好的做法是什么,您不能指望在发送之前由表单检查参数.例如:https://chart.googleapis.com/chart?tt =&chd =&chs =&.添加参数...
只需以相同的方式使用servlet即可.唯一的区别是你要实现这个工作doGet()而不是doPost()必要时在错误上返回HTTP 400 :)再次检查我们的servlets标签wiki页面以更好地理解它们的用途.或者更进一步,使用Web服务框架,例如JAX-WS或JAX-RS,它们像MVC框架那样透明地完成这项工作.
使用MVC框架(Spring MVC,Stripes,Struts 2等)并验证控制器类中的参数.每个MVC框架都支持参数验证,您可以清楚地分离关注点.
例如: Spring MVC的自动注册JSR-303风格的参数验证(如果你有一个JSR-303供应商,如Hibernate的验证器,在类路径中)使用时mvc:annotation-driven