我正在实现一个 JSP,它需要一些参数,这些参数必须在运行 jsp 之前进行验证。
- 建议:使用以下命令验证 JSP 内的参数 标签库
- 建议:预先解析过滤器中的参数
你觉得怎么样?
编辑
感谢您的良好回答,但我想知道如果您提供像 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/