仅仅是response.sendRedirect的问题。60分!(只要有价值,分可以加)

herozc 2003-07-09 11:38:29
我在用jsp做论坛,现在遇到这样一个问题。
我察看末一个帖子的信息,这个页面为article.jsp?id=2,
主帖子和回复帖子都是根据从数据库中取得,比如说有2个回复帖子。
我到回复帖子页面,填内容并到另外一个页面处理,填加到数据库中。处理完后,通过
response.sendRedirect("article.jsp?id=" + topic_id);
再返回到article.jsp?id=2页面。
结果article.jsp?id=2上的回复帖子还是2条,必须自己刷新一次才能把新加的那条帖子显示出来。(数据库中这条数据也插上了)。

为什么用response.sendRedirect指到article.jsp?id=2页面上时,这个页面没有自动刷新呢?很怪异。怎么改好呢?还有别的什么好办法没?


...全文
121 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
herozc 2003-07-11
  • 打赏
  • 举报
回复
好像是数据库没有及时更新,
有什么方法可以让JSP页面提交后自动延时一段时间呀?
设置一下延时呀?
herozc 2003-07-11
  • 打赏
  • 举报
回复
可是在我这还是不太好使呀,真的。必须自己刷新一次才出来。
gks_cn 2003-07-11
  • 打赏
  • 举报
回复
用了head.jsp应该能够解决问题。我是过了的。
herozc 2003-07-11
  • 打赏
  • 举报
回复
我原来用的是:

<script language="JavaScript">
history.go(-2)
alert ("恭喜你,发帖子成功!")
window.location.reload()
</script>

在我的机器上什么毛病也没有,
但是在别人的机器上,就会出现一个对话框让你把信息再重送一次。
结果别人每次发的帖子都是两个。
有什么解决的办法么?
herozc 2003-07-11
  • 打赏
  • 举报
回复
写head.jsp

有时候不需用刷新,就可以显示出来,
但有时候还需要刷新。
herozc 2003-07-11
  • 打赏
  • 举报
回复
我试了一下随机数,
每一次的url都是不一样的,但是还需要刷新才可以能显示出来。
herozc 2003-07-10
  • 打赏
  • 举报
回复
1.dispatch怎么用呀?
由例子么?
谢谢!
2.加上
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
我试了,好像也不好使。
3.现在我用CNSDYT(苦涩咖啡)的方法达到了目的。

4.随机数?这样的处理好么?我再试试。

大家有什么好的方法继续讨论呀,一方面多交流一下,另一方面,我说过,只要有价值就有分吗。

naxin 2003-07-10
  • 打赏
  • 举报
回复
用别的语法吧
javabandit 2003-07-10
  • 打赏
  • 举报
回复
1)这个可能是由IE引起的,以前遇到过类似的问题,要么是IE设置有问题,要么是版本太低
2)其实你可以用提交到本页的方式来做这个,这样本页一定会刷新来处理的。而你的处理方式是页提交到Servlet然后由Servlet转回来,可能读的是IE的缓存而并没有真正的刷新!
jwywxx 2003-07-10
  • 打赏
  • 举报
回复
IE默认找到了上次出现的页面,你把IE清空,它就能正确返回了。
还有一种方式,你在response.sendRedirect("article.jsp?id=" + topic_id);
^
后面加加上随机数就可以了。
<%
Random r = new Random();
response.sendRedirect("article.jsp?id=" + topic_id+"&r="+r.nextDouble());
%>
CNSDYT 2003-07-10
  • 打赏
  • 举报
回复
我也遇到过这样的情况,我是这样解决的
不用response.sendRedirect()这个方法,
用javaScript里的方法
<script language="JavaScript">
history.go(-1)
alert ("成功,请继续!")
window.location.reload()
</script>
jianghua008 2003-07-10
  • 打赏
  • 举报
回复
加上
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

试试看
pleonheart 2003-07-10
  • 打赏
  • 举报
回复
在 IE属性/Internet临时文件/设置 里把 访问此页时检查 选上
还有可以的话把页面设个过期时间
unsalted 2003-07-10
  • 打赏
  • 举报
回复
用dispatch吧。
wlf7777 2003-07-10
  • 打赏
  • 举报
回复
to javabandit(bandit)

我的是IE6,版本也不低,也出现和楼主同样的问题!
birdwoods 2003-07-10
  • 打赏
  • 举报
回复
上面说的是javascript里的写法,jsp里写成response.sendRedirect("article.jsp?id=1&"+(new Date()).getTime());
birdwoods 2003-07-10
  • 打赏
  • 举报
回复
最简单的方法就是保证每次访问的url是不一样的 。这样IE就不会缓存。
只需要在基本的url后面加上一个没有用的随机串就可以。
比方说将
window.open("article.jsp?id=1")改成window.open("article.jsp?id=1&"+(new Date()).getTime());就OK。(new Date()).getTime()可以产生一个长整型的时间戳,对于客户机来说不会重复,所以浏览器不可能在cache里命中,自然每一次都是从服务器得到运行结果了。
gks_cn 2003-07-10
  • 打赏
  • 举报
回复
写一个head.jsp
<%
//防止ie缓存页面
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>

每个也面里面都包含这个
<%@ include file="head.jsp"%>
就可以房子ie换存也面了。
xiaorai 2003-07-10
  • 打赏
  • 举报
回复
Simple Dispach Example:

String jsp = "hogehoge.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(jsp);
dispatcher.forward(request, response);

81,095

社区成员

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

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