首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

过滤器Filter IllegalStateException 重定向有关问题

2012-10-27 
过滤器FilterIllegalStateException 重定向问题public void doFilter(ServletRequest req, ServletRespons

过滤器Filter IllegalStateException 重定向问题

public void doFilter(ServletRequest req, ServletResponse res,FilterChain arg2) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;String path = request.getServletPath();HttpSession session=request.getSession();System.out.println(path);Object obj=session.getAttribute("LoginColleges");if (!"/index.jsp".equals(path)) {if (obj == null) {response.sendRedirect("/hveda/index.jsp");[color=red]return;[/color]}}if (path.contains("ByAdmin")) {if (!(obj instanceof Colleges)) {response.sendRedirect("/hveda/index.jsp");[color=red]return;[/color]}arg2.doFilter(req, res);}
1 楼 lizhen1643 2011-06-01   为什么要用重定向? 我看你的URL并没有跨域啊。怎么不用请求转发? 2 楼 lrysir 2011-06-01   这个使用重定向是个人习惯.... 感谢你的提醒!  我会注意的 3 楼 raypominfo 2011-06-02   为啥要用转发呢?
你这里说的转发应该是指forward。

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

  redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。

很多情况下redirect比forward会更好。 forward可以解决一次提交表单的数据传递到下一个请求页面;但是带来了地址栏url不变;这样会导致重刷页面的时候会重新完成两次处理。对于用户体验来讲都是非常不好的。

redirect是比较干净的处理方式:跳转之后与上一次的表单提交基本上就没有用了。虽然是两次请求但是对于一般场景下是不会有性能问题的。

热点排行