两者都不是好的方法。控制器/业务逻辑不属于JSP(标记)。过滤器几乎不错,但不够具体。该工作应由Servlet完成。您正在将表单提交给Servlet进行后处理,对吧?听起来您还没有这样做,否则答案很简单。
在我们的Servlets标签Wiki页面中,您可以找到一个世界案例,该示例是将JSP与Servlet一起使用以对表单提交进行后处理的好方法。这是相关的摘录:
<input id="name" name="name" value="${fn:escapeXml(param.name)}"><span >${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;
*根据您的修改进行 *更新 :
谢谢您的好的回答,但是我想知道如果您提供的服务是google chart API这样的服务,而您不能期望参数在发送之前已经过表单检查,那将是最佳做法。
示例:https://chart.googleapis.com/chart?cht
=&chd =&chs
=&
…
additional_parameters
…
只需以相同的方式使用servlet。唯一的区别是,您必须在其中实施作业,
doGet()而不是
doPost()在必要时返回HTTP 400:)再次,请检查我们的servlets标记wiki页面,以更好地了解其目的。或者更进一步,请使用Web服务框架,例如JAX-
WS或JAX-RS,它们像MVC框架对HTML页面所做的那样透明地完成此工作。



