我编写了一个servlet过滤器,配置为为每个url(/ *)调用。根据某些条件,如果条件通过,我想通过chain.doFilter(request,response
继续正常执行,我也想打开带有错误消息的相同请求URL ..
“说在特定文本框中输入的值不正确”。这可能吗?
我必须使用response.sendRedirect(request.getURL())
吗?我希望我不会在无限循环中结束,因为我已经在每个URL上配置了过滤器。我正在对请求参数进行验证检查。
答案 0 :(得分:4)
就像在servlet中一样:执行转发。
request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
默认情况下,不会在转发上(重新)调用过滤器。另外一个优点是JSP重用了相同的请求,因此您只需将验证错误消息设置为请求属性,而无需基于会话或cookie的变通方法/黑客攻击。
无关,这不是完全正确的方法。特定于表单的验证作业应在servlet中执行,而不是在filter中执行。如果你想保持你的servlet干,那么看看前端控制器模式或者只是采用一个MVC框架,它已经提供了一个前端控制器servlet和开箱即用的验证,例如JSF或{ {3}}