1

我有3 jsp pages(index.jsp, result1.jsp,result2.jsp)一个servlet。处理如下:

索引.jsp

<form method="post" action="MYSERVLET" >
<input type="text" name="studentname" id="studentname"/>
<input type="submit" value="click" />// goes to a servlet named as MYSERVLET
</form>

MYSERVLET

 String t=request.getParameter("studentname");
------fetching data from database and sending to result1.jsp------

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

结果1.jsp

// 从 servlet 中检索数据并在其中显示数据result1.jsp并将相同的值传递给result2.jsp

out.println(retrieved result from servlet);
<a  href="result2.jsp?somestring=<%out.println(retrieved result from servlet);%>"> <%out.println(retrieved result from servlet);%></a>// after clicking on "retrieved result from servlet" i am passing this retrieved value to another jsp result2.jsp and also retrieving some data from database as follows:

结果2.jsp

String w=request.getParameter("somestring");
out.println(w);

我想给出一个back button here (in result2.jsp),以便在单击back button后将我带到result1.jsp可以看到以前显示的数据的位置(out.println(retrieved result from servlet);)。但是,当我单击浏览器后退按钮(在 result2.jsp 中)时,每次警报即将到来"Confirm Form Resubmission" ,然后我重新加载该页面以查看(out.println(retrieved result from servlet);),我想避免此警报,我该如何避免呢?我怎样才能在没有任何警报的情况下直接看到该页面?

4

2 回答 2

4

我认为您的问题在于您在 servlet 中放置的“转发”操作。“转发”只发生在服务器上,浏览器不知道服务器上发生了什么。事实上,即使您在 result1 页面上,您也应该在 url 栏中看到“MYSERVLET Url”。因此,当您继续使用 result2.jsp 时,单击“返回”只会再次将您带到 Servlet url,而不是“result1.jsp”。由于您的 servlet 是表单提交的目标,因此您会收到该警报。

为避免这种情况,您应该在 servlet 中尝试“redirect”或“sendRedirect”而不是“forward”。在这种情况下,您的浏览器将知道地址的更改,您也可以使用后退按钮。

但是请注意,通过重定向,您发送到 servlet 的所有请求数据都不能直接传递给 result1.jsp,您应该将它们保存在 Session 中。试试看这个

于 2012-05-29T06:57:34.737 回答
1

请通过使用将会话中的所有数据保留在第一页本身,session.setAttribute("name",value);并在登陆到第二页后,单击按钮指定没有任何数据的第一页的地址并在第一页显示之前的数据,使用session.getAttribute("name"); 这样每次你在页面之间切换,它将重新加载页面并获取会话值。

于 2012-05-29T08:40:38.207 回答