今天复习JavaEE时遇到个问题,具体如下:
一个简单的过滤应用,站点下有一html页面用于登录post至loginServlet,loginServlet做登录处理,正确request.getRequestDispatcher至jsp文件夹的主页面(main.jsp),错误给出提示信息;添加Filter拦截直接访问jsp文件夹下的页面Filter代码:public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;

if (req.getSession().getAttribute("UserId") != null) {
chain.doFilter(request, response);
}else{
//res.sendRedirect("login.html");
req.getRequestDispatcher("../login.html").forward(req, res);
}
}web.xml<filter>
    <display-name>MyFilter</display-name>
    <filter-name>MyFilter</filter-name>
    <filter-class>org.honf.biz.MyFilter</filter-class>
  </filter>  
  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/jsp/*</url-pattern>
  </filter-mapping>OK。问题出来了
首先使用的是response的sendRedirect()方法,这个方法也是页面跳转不过会重新创建request和response对吧?
而使用request的getRequestDispatcher().forward()进行跳转会继续使用forward过去的request和response?
但是在前者运行时断点可以正常结束,而页面没跳转,感觉在多次提交(但是断点只进行一次),最终内存溢出;后者能正常跳转。
在此 请教各位这是为何?哦,对了 运行环境为
jdk 1.6.0_22
tomcat 6.0.29
eclipse 3.6.1

解决方案 »

  1.   

    首先使用的是response的sendRedirect()方法,这个方法也是页面跳转不过会重新创建request和response对吧?
    而使用request的getRequestDispatcher().forward()进行跳转会继续使用forward过去的request和response?

    以上都对
    多次提交是不是浏览器缓存的问题?可以设置参数防止多次提交
      

  2.   

    TO:dyllove98嗯 参考你的提议之后需要手动刷新才会回至登录页。然而内存溢出的真正原因是因为数据驱动在请求结束之后没彻底注销。备案ok!问题已解决。