求解!getRequestDispatcher与sendRedirect

wing7742 2011-01-04 04:14:28
今天复习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
...全文
162 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jlins 2011-01-04
  • 打赏
  • 举报
回复
good[Quote=引用 2 楼 wing7742 的回复:]

TO:dyllove98

嗯 参考你的提议之后需要手动刷新才会回至登录页。

然而内存溢出的真正原因是因为数据驱动在请求结束之后没彻底注销。

备案

ok!问题已解决。
[/Quote]
wing7742 2011-01-04
  • 打赏
  • 举报
回复
TO:dyllove98

嗯 参考你的提议之后需要手动刷新才会回至登录页。

然而内存溢出的真正原因是因为数据驱动在请求结束之后没彻底注销。

备案

ok!问题已解决。
Jlins 2011-01-04
  • 打赏
  • 举报
回复
首先使用的是response的sendRedirect()方法,这个方法也是页面跳转不过会重新创建request和response对吧?
而使用request的getRequestDispatcher().forward()进行跳转会继续使用forward过去的request和response?

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

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧