ale*_*xtc 4 java session jsp servlets httpsession
我的JSP项目中有三个简单的HttpServlet类,"LoginServlet","LogoutServlet"和"ProfileServlet".
最后两个servlet如下所示我认为是有问题的.
@SuppressWarnings("serial")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession(false);
session.invalidate();
request.getRequestDispatcher("link.jsp").include(request, response);
out.print("You are successfully logged out!");
out.close();
}
}
Run Code Online (Sandbox Code Playgroud)
和
@SuppressWarnings("serial")
public class ProfileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
request.getRequestDispatcher("link.jsp").include(request, response);
HttpSession session = request.getSession(false);
if (session != null) {
String name = (String) session.getAttribute("name");
out.print("Hello, " + name + " Welcome to Profile");
} else {
out.print("Please login first");
request.getRequestDispatcher("login.html").include(request,
response);
}
out.close();
}
}
Run Code Online (Sandbox Code Playgroud)
和link.jsp:
<% HttpSession nsession = request.getSession(false);
if(nsession == null) {
%>
<a href="login.html">Login</a>
<%
}
else {
%>
<a href="LogoutServlet">Logout</a>
<%
}
%>
<a href="ProfileServlet">Profile</a>
<hr/>
Run Code Online (Sandbox Code Playgroud)
问题是,当用户登录时,被点击"注销"链接和"LogoutServlet"之称,会话不正确失效和ProfileServlet仍然打印出
"Hello, null Welcome to Profile"
Run Code Online (Sandbox Code Playgroud)
而不是重定向到"login.html"页面,因为会话仍然是null.因此,"link.jsp"页面上未显示"登录"链接.这会阻止用户再次尝试登录.
编辑: 为了澄清问题,我创建了一个新的html页面并更新了要执行的servlet
request.getRequestDispatcher("link.html").include(request, response);
Run Code Online (Sandbox Code Playgroud)
和"link.html".
<a href="login.html">Login</a>
<a href="LogoutServlet">Logout</a>
<a href="ProfileServlet">Profile</a>
<hr/>
Run Code Online (Sandbox Code Playgroud)
有趣的是,这就是我想要的!我想问题是
request.getRequestDispatcher("link.jsp").include(request, response);
Run Code Online (Sandbox Code Playgroud)
但我无法解释为什么......
在JSP中,默认情况下会创建新会话,如果不存在,那么您将始终获得非空会话.您可以通过向页面添加以下页面指令来禁用它:
<%@ page session="false" %>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看以下内容为什么设置JSP页面session ="false"指令?
| 归档时间: |
|
| 查看次数: |
8910 次 |
| 最近记录: |