利用Session完成用户的登录和注销

用户的登录和注销是最常见的Web应用案例,当一个应用的客户登录了以后,其他所有的会话都得知道这个用户已经登录还很有可能得提取用户的昵称予以显示等等,所以,只有把登录成功的用户的信息放入到Session中才能够办到使所有的Servlet都能访问到用户的登录状态,下面把这个案例放上来。

第一是登录的界面,是HTML的一个表单,非常的简单

[html]  view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>登陆界面</title>
  6. </head>
  7. <body>
  8. <form action="/Web/servlet/LoginServlet" method="post">
  9. 帐号:<input type="text" name="username"><br>
  10. 密码:<input type="password" name="password"><br>
  11. <input type="submit" value="登录">
  12. </form>
  13. </body>
  14. </html>
第二是处理登录信息的LoginServlet
[java]   view plain  copy
  1. package com.bird.login;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7.   
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.http.HttpServlet;  
  10. import javax.servlet.http.HttpServletRequest;  
  11. import javax.servlet.http.HttpServletResponse;  
  12.   
  13. public class LoginServlet extends HttpServlet {  
  14.   
  15.     /** 
  16.      * @category 使用Session处理用户登陆 
  17.      * @author Bird 
  18.      */  
  19.     private static final long serialVersionUID = 1L;  
  20.   
  21.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  22.             throws ServletException, IOException {  
  23.         response.setCharacterEncoding("UTF-8");  
  24.         response.setContentType("text/html;charset=UTF-8");  
  25.         PrintWriter out = response.getWriter();  
  26.           
  27.         String username = request.getParameter("username");  
  28.         String password = request.getParameter("password");  
  29.           
  30.         List<User> list = Db.getAll();  
  31.         for(User u: list){  
  32.             if(u.getUsername().equals(username) && u.getPassword().equals(password)){  
  33.                 request.getSession().setAttribute("user", u);//登录成功,将用户数据放入到Session中  
  34.                 response.sendRedirect("/Web/index.jsp");  
  35.                 return;//进行重定向,并且下面的代码不再执行  
  36.             }  
  37.         }  
  38.           
  39.         out.write("您的用户名或密码错误");  
  40.     }  
  41.   
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  43.             throws ServletException, IOException {  
  44.         doGet(request,response);  
  45.     }  
  46.   
  47. }  
  48.   
  49. class Db{  
  50.     public static List<User> list = new ArrayList<User>();  
  51.     static{  
  52.         list.add(new User("aaa","123"));  
  53.         list.add(new User("bbb","123"));  
  54.         list.add(new User("ccc","123"));  
  55.     }  
  56.       
  57.     public static List<User> getAll(){  
  58.         return list;  
  59.     }  
  60. }  

第三,用户的信息封装在User对象中

[java]  view plain copy
  1. package com.bird.login;
  2. /**
  3. * @category 封装用户的数据的对象
  4. * @author Bird
  5. *
  6. */
  7. public class User {
  8. private String username;
  9. private String password;
  10. public User() {
  11. }
  12. public User(String username, String password) {
  13. this.username = username;
  14. this.password = password;
  15. }
  16. public String getUsername() {
  17. return username;
  18. }
  19. public void setUsername(String username) {
  20. this.username = username;
  21. }
  22. public String getPassword() {
  23. return password;
  24. }
  25. public void setPassword(String password) {
  26. this.password = password;
  27. }
  28. }
第四是处理用户注销的Servlet
[java]  view plain copy
  1. package com.bird.login;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8. public class LoginOutServlet extends HttpServlet {
  9. /**
  10. * @category 退出登录的Servlet,注销
  11. * @author Bird
  12. */
  13. private static final long serialVersionUID = 1L;
  14. public void doGet(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. HttpSession session = request.getSession(false);//防止创建Session
  17. if(session == null){
  18. response.sendRedirect("/Web/index.jsp");
  19. return;
  20. }
  21. session.removeAttribute("user");
  22. response.sendRedirect("/Web/index.jsp");
  23. }
  24. public void doPost(HttpServletRequest request, HttpServletResponse response)
  25. throws ServletException, IOException {
  26. }
  27. }
第五是最终的显示界面
[html]  view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'index.jsp' starting page</title>
  6. </head>
  7. <body>
  8. 欢迎您,${user.username} <br>
  9. <a href="/Web/servlet/LoginOutServlet">退出登录</a>
  10. </body>
  11. </html>
效果如下

登录成功后


注销后


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值