java - 在 JSP 中验证参数的最佳实践是什么?

标签 java validation jsp

我正在实现一个 JSP,它需要一些参数,这些参数必须在运行 jsp 之前进行验证。

  1. 建议:使用以下命令验证 JSP 内的参数 标签库
  2. 建议:预先解析过滤器中的参数

你觉得怎么样?

编辑

感谢您的良好回答,但我想知道如果您提供像 google Chart API 这样的服务,而您不能指望在发送参数之前通过表单检查参数,那么最佳实践是什么。 例子: https://chart.googleapis.com/chart?cht= &chd=&chs=&...additional_parameters...

最佳答案

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

our servlets tag wiki page您可以找到一个 hello world 示例,该示例展示了使用 JSP 和 Servlet 来对表单提交进行后处理的好方法。以下是相关性摘录:

<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 Controller servlet 将验证是否已填写并在给定位置显示(可配置的)消息,而不需要任何自定义 Java 代码。您甚至可以将其移至模型中,JSF 还对 JSR303 bean 验证提供透明支持。例如

<h:inputText id="name" value="#{bean.name}" />
<h:message for="name" />

@NotNull(message="Please enter name")
private String name;
<小时/>

根据您的编辑更新:

Thank you for the good answers, but I was wondering what would be the best practice in case you are offering a service like google chart API where you can't expect that the parameters are checked by a form before they are sent. example: https://chart.googleapis.com/chart?cht=&chd=&chs=&...additional_parameters...

以同样的方式使用 servlet。唯一的区别是您必须在 doGet() 而不是 doPost() 中实现该作业,并且如有必要,在出现错误时返回 HTTP 400 :) 再次检查our servlets tag wiki page更好地理解他们的目的。或者更进一步,使用 Web 服务框架,例如 JAX-WS 或 JAX-RS,它们透明地完成这项工作,就像 MVC 框架对 HTML 页面所做的那样。

关于java - 在 JSP 中验证参数的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109419/

相关文章:

java - libgdx 中的流 API

javascript - $(document).ready(function()) 仅在jsp加载后执行

java - 如何最好地组织我的项目以获得最佳的 nginx 使用

java - 哪个更好,ExpectedException 或 @Test(expected=

填充 map 对象时出现 Java NullPointerException

java - 需要从android studio中的assets文件夹中读取txt文件

java - 如何在面向 JavaEE 开发人员的 Eclipse 4.4 版中禁用 APT Web 服务验证

python - Django REST Framework 中的序列化程序验证顺序

javascript - Jquery 文本字段最多 3 次验证

http - 我可以做我自己的 HTTP header 属性吗?