【问题标题】:How servlet filter will dispatch error message on request page?servlet 过滤器如何在请求页面上发送错误消息?
【发布时间】:2012-12-03 12:37:15
【问题描述】:

我编写了一个 servlet 过滤器,它被配置为为每个 url (/*) 调用。在某些条件的基础上,如果条件通过,我想通过chain.doFilter(request,response继续正常执行,我也想打开相同的请求URL并显示错误消息..

“说在特定文本框中输入的值不正确”。这可能吗?

我必须使用response.sendRedirect(request.getURL())吗?我希望我不会陷入无限循环,因为我已经在每个 URL 上配置了过滤器。我正在对请求参数进行验证检查。

【问题讨论】:

  • 我不会在Filter 中进行验证,尤其是映射到/* 的那个我会尝试更有针对性。
  • 好的..每个请求都需要进行一些验证..这就是为什么我要尝试使用过滤器

标签: java servlets servlet-filters


【解决方案1】:

就像在 servlet 中做的一样:执行转发。

request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);

默认情况下,过滤器不会(重新)在转发时调用。另一个优点是 JSP 重用了相同的请求,因此您可以将验证错误消息设置为请求属性,而无需基于会话或 cookie 的变通办法/黑客。


与具体问题无关,这并不完全是正确的方法。特定于表单的验证作业应在servlet 中执行,而不是在filter 中。如果你想让你的 servlet 保持干燥,那么看看前端控制器模式或者只是采用一个已经提供前端控制器 servlet 和开箱即用验证的 MVC 框架,例如JSFSpring MVC .

【讨论】:

  • 谢谢你..再帮个忙,..你能告诉我有没有办法知道这个过滤器的请求来自哪个jsp?注意我的 httpRequest.getUri() 给出了一个动作字符串,而不是 jsp..它映射到 spring 的控制器
  • 这就是您应该在前端控制器中执行此操作的原因之一。通常前端控制器准确地知道它是哪个 JSP。但是由于您显然使用的是 Spring 的前端控制器,为什么不直接使用它的验证工具呢?
  • 因为它是对所有请求的通用检查,所以考虑在请求过滤器中执行它..如果我写一个弹簧拦截器,请告诉我,那么任务会更容易..因为我想要检查所有请求
  • 我不做Spring,所以不能详细讲。在 JSF 中,只需在输入组件中添加required="true" 属性,或者在输入组件中嵌套<f:validator> 标签即可。
猜你喜欢
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2016-11-21
  • 2015-09-12
  • 2017-12-22
相关资源
最近更新 更多