一个关于request.getRequestDispatcher 转发的问题

conolan 2013-01-08 11:05:54
我遇到问题的过程是这样的:
1、我有一个jsp的展示页面A,展示的是用一个初始化的servlet a从xml文件读取的数据;
2、我在这个jsp页面A上有一个添加数据的操作:
具体是点击页面A上链接弹出一个jquery插件的弹出窗口,窗口里是另外一个jsp页面B,页面B上有输入框,及提交按钮,点击提交按钮之后,弹出窗口会关闭回到页面A(这个过程是没有页面跳转,只是B在A只上,B被关掉而已),同时页面B上的数据会转发到servlet b中进行处理;
3、servlet b处理完后,再将新的展示数据传递给jsp 页面A,这里用的是:
request.getRequestDispatcher("A.jsp").forward(request,response);
这个方法。

这时,问题来了:看似从servlet b中转发数据到了页面A,但实际是,页面A根本完全没有刷新,它的数据还是初始化的数据,新数据并没有加进去!

我的理解是:服务器给浏览器转发时,如果浏览器中的页面恰好是要转发的页面,是不是服务器就不刷新这个页面了??

完全不懂,求指点。。。。。

...全文
525 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
少羽 2013-01-09
  • 打赏
  • 举报
回复
引用 6 楼 conolan 的回复:
引用 2 楼 duanwu2330323 的回复:楼主的想法是错的,不管你的页面是不是和服务器要转发的页面一样,页面都会刷新的。楼主的问题出在这里,因为你的提交按钮是在b.jsp这个页面上,所以服务器转发后返回的页面会返回到你提交的这个页面,也就是说楼主转发的a.jsp这个页面被转发到了b.jsp这个来了,就是b.jsp这个才会刷新,但是楼主的b.jsp这个页面已经关闭了……
你的servlet中是转到的a.jsp没错,但是a.jsp是要发送到浏览器上去的,而且是发往请求的那个页面,意思就是说会替换掉请求的那个jsp页面,你想想,你的请求是从哪个jsp发到servlet的?是从b.jsp发出去的啊,所以返回的a.jsp会覆盖掉b.jsp啊,但是你的b.jsp已经被你给关了,也就没办法显示了。至于你刚开始出来的a.jsp,你什么都没对它做,它当然什么反映都不会有了。
weizhen_ 2013-01-09
  • 打赏
  • 举报
回复
没做过类似的,你可以设置断点用debug调试呗。呵呵 另外一确定你的页面有转发到servlet吗? 在转发的地方用

System.out.println("text a");
conolan 2013-01-09
  • 打赏
  • 举报
回复
引用 3 楼 jiesiting 的回复:
你的两个请求共享了吗?不然的话数据是无法传输的吧
我的数据流是这样的: b.jsp---->b.servlet---->a.jsp b.servlet 先从 xml 读取数据存到一个list中,再把b.jsp中传来数据加到list里,然后把list传给a.jsp显示
conolan 2013-01-09
  • 打赏
  • 举报
回复
引用 2 楼 duanwu2330323 的回复:
楼主的想法是错的,不管你的页面是不是和服务器要转发的页面一样,页面都会刷新的。楼主的问题出在这里,因为你的提交按钮是在b.jsp这个页面上,所以服务器转发后返回的页面会返回到你提交的这个页面,也就是说楼主转发的a.jsp这个页面被转发到了b.jsp这个来了,就是b.jsp这个才会刷新,但是楼主的b.jsp这个页面已经关闭了,所以才会出现楼主所说的现象。
request.getRequestDispatcher("A.jsp").forward(request,response); 这句里有“A.jsp”,不是会转到A.jsp吗? 难道b.jsp转到servlet后,这个servlet还会再转发回给b.jsp?
conolan 2013-01-09
  • 打赏
  • 举报
回复
引用 1 楼 lin5ting 的回复:
没做过类似的,你可以设置断点用debug调试呗。呵呵 另外一确定你的页面有转发到servlet吗? 在转发的地方用 Java code ? 12 System.out.println("text a");
这个我是确定的, 在这句 request.getRequestDispatcher("A.jsp").forward(request,response);上面有个输出,已被执行
gaofb 2013-01-09
  • 打赏
  • 举报
回复
分享来自经验和实践,大家齐努力
jiesiting 2013-01-09
  • 打赏
  • 举报
回复
你的两个请求共享了吗?不然的话数据是无法传输的吧
少羽 2013-01-09
  • 打赏
  • 举报
回复
楼主的想法是错的,不管你的页面是不是和服务器要转发的页面一样,页面都会刷新的。楼主的问题出在这里,因为你的提交按钮是在b.jsp这个页面上,所以服务器转发后返回的页面会返回到你提交的这个页面,也就是说楼主转发的a.jsp这个页面被转发到了b.jsp这个来了,就是b.jsp这个才会刷新,但是楼主的b.jsp这个页面已经关闭了,所以才会出现楼主所说的现象。
conolan 2013-01-09
  • 打赏
  • 举报
回复
引用 8 楼 duanwu2330323 的回复:
引用 6 楼 conolan 的回复: 引用 2 楼 duanwu2330323 的回复:楼主的想法是错的,不管你的页面是不是和服务器要转发的页面一样,页面都会刷新的。楼主的问题出在这里,因为你的提交按钮是在b.jsp这个页面上,所以服务器转发后返回的页面会返回到你提交的这个页面,也就是说楼主转发的a.jsp这个页面被转发到了b.jsp这个来了,就是b.jsp这个才会刷新,但是楼主的b.jsp这……
嗯,我又重新理了一下,你说得是对的,我以前都没想过这个问题,只是按着例子来,现在自己一搞就搞出问题来了,不过现在解决啦,谢谢你的提醒哦~

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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