2011-03-04 200 views
4

当用户登录到我的应用程序时,他提交了一个要通过Servlet处理的表单。该servlet为用户创建一个会话。我将如何创建一个链接,以便用户可以注销?我似乎无法直接链接到一个Servlet。我将如何删除会话并链接回主页?创建一个注销JSP的链接

这是我可以做到的一种方式,但它看起来并不“正确”。 我可以链接回index.jsp?logout = true。我的index.jsp会看到注销是否为真,并删除会话。

有没有另一种方法呢?

回答

9

写映射到/logout一个servlet然后在doGet执行是这样的:

HttpSession session = request.getSession(false); 
if(session != null) 
    session.invalidate(); 
request.getRequestDispatcher("/index.jsp").forward(request,response); 

如果用户会话或没有它不会不要紧,他们最终会被重定向到index.jsp

+1

的 “logout.jsp” 写我试过了,但我得到一个404错误。我的servlet在web.xml中正确映射,并且我的链接转到该servlet。 – Kelp 2011-03-04 01:56:13

+4

然后这个URL是错误的:)当你在浏览器地址栏中输入它时,它会起作用吗?您是否考虑了上下文路径?你知道相对URL是如何工作的吗? – BalusC 2011-03-04 02:00:23

0

注销不太严重。你可以有一个简单的/logout.jsp来结束会话。

5

我发现最容易做到这一点:

<form method="link" action="logout.jsp"> 
    <input type="submit" value="Logout"/> 
</form> 

没有logout.jsp有这样的:

<% 
session.invalidate(); 
response.sendRedirect("startpage.html"); 
%> 
1

基于cdietschrun的答案,我做了它更加紧凑:

<% 
session.invalidate(); 
response.sendRedirect(request.getContextPath()); 
%> 
0

最简单的方法是使注销链接像这样..

<a href="logout.jsp">LogOut</a> 

,并在下面的代码

<% 
session.invalidate(); 
response.sendRedirect("index.jsp"); 
%>