我有一个login.jsp网页,当用户在我的网页上提交按钮时,我有两个用于用户名和密码的文本框**
转发到jsp servlet checkpass.jsp,其中
**我阻止了大多数页面的缓存。但是像login.jsp,logout.jsp,index.jsp这样的页面。只有当用户有效时才创建会话我没有编写代码来检查像
这样的代码的会话<%
try{
String username = session.getValue("UserName").toString();
String s_Password = session.getValue("password").toString();
String id = session.getValue("ID").toString();
// String s_Email = session.getValue("email").toString();
if ((username==null) || (s_Password==null) || (id==null))
{
%>
<jsp:forward page="index.jsp?error=You have Logged Out !!!" />
<%
}}
catch(Exception e)
{
e.printStackTrace();
%><jsp:forward page="index.jsp?error=" />
<%
}
%>
此类代码不存在。所以会发生什么,虽然我阻止了其他包括checkpass.jsp的缓存,当我通过session.invalidate()方法终止注销会话时。因此,当我使用浏览器的后退按钮时,它并不显示所有页面被重定向到index.jsp的页面,如上所述。但是因为这样的代码不存在checkpass.jsp浏览器显示我的一些消息说尝试重新加载页面,因为这个页面需要一些数据,即我猜用户名和密码,当我按下浏览器的刷新按钮时它显示我我的admin.jsp页面我希望当有人注销时,虽然我按下或刷新浏览器的按钮按钮,但不应显示任何网页。这是我的网络应用程序。为此我使用net beans和MySQL和Apache tomcat。请帮助我解决问题。我很乐意提供更多信息。如果需要的话
答案 0 :(得分:2)
你没有重定向。你要转发。您需要发送重定向而不是转发。
response.sendRedirect("index.jsp");
这样,服务器将指示客户端在给定资源上发送全新的GET请求,而不是使用给定资源作为当前POST请求的响应,就像转发一样。所以刷新不会重新提交以前的POST请求。
无关,我不知道你的导师/课程有什么限制/要求,但是在JSP文件而不是Java类中编写Java代码(例如{{{ 3}}类或servlet类)并使用filter为deprecated methods。只是说这个案例你的观点也取决于那个。