用戶的登錄和註銷是最常見的Web應用案例,當一個應用的客戶登錄了以後,其他所有的會話都得知道這個用戶已經登錄還很有可能得提取用戶的暱稱予以顯示等等,所以,只有把登錄成功的用戶的信息放入到Session中才能夠辦到使所有的Servlet都能訪問到用戶的登錄狀態,下面把這個案例放上來。
第一是登錄的界面,是HTML的一個表單,非常的簡單
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>登陸界面</title>
- </head>
- <body>
- <form action="/Web/servlet/LoginServlet" method="post">
- 帳號:<input type="text" name="username"><br>
- 密碼:<input type="password" name="password"><br>
- <input type="submit" value="登錄">
- </form>
- </body>
- </html>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>登陸界面</title>
- </head>
- <body>
- <form action="/Web/servlet/LoginServlet" method="post">
- 帳號:<input type="text" name="username"><br>
- 密碼:<input type="password" name="password"><br>
- <input type="submit" value="登錄">
- </form>
- </body>
- </html>
第二是處理登錄信息的LoginServlet
- package com.bird.login;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class LoginServlet extends HttpServlet {
- /**
- * @category 使用Session處理用戶登陸
- * @author Bird
- */
- private static final long serialVersionUID = 1L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- List<User> list = Db.getAll();
- for(User u: list){
- if(u.getUsername().equals(username) && u.getPassword().equals(password)){
- request.getSession().setAttribute("user", u);//登錄成功,將用戶數據放入到Session中
- response.sendRedirect("/Web/index.jsp");
- return;//進行重定向,並且下面的代碼不再執行
- }
- }
- out.write("您的應戶名或密碼錯誤");
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request,response);
- }
- }
- class Db{
- public static List<User> list = new ArrayList<User>();
- static{
- list.add(new User("aaa","123"));
- list.add(new User("bbb","123"));
- list.add(new User("ccc","123"));
- }
- public static List<User> getAll(){
- return list;
- }
- }
- package com.bird.login;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class LoginServlet extends HttpServlet {
- /**
- * @category 使用Session處理用戶登陸
- * @author Bird
- */
- private static final long serialVersionUID = 1L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- List<User> list = Db.getAll();
- for(User u: list){
- if(u.getUsername().equals(username) && u.getPassword().equals(password)){
- request.getSession().setAttribute("user", u);//登錄成功,將用戶數據放入到Session中
- response.sendRedirect("/Web/index.jsp");
- return;//進行重定向,並且下面的代碼不再執行
- }
- }
- out.write("您的應戶名或密碼錯誤");
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request,response);
- }
- }
- class Db{
- public static List<User> list = new ArrayList<User>();
- static{
- list.add(new User("aaa","123"));
- list.add(new User("bbb","123"));
- list.add(new User("ccc","123"));
- }
- public static List<User> getAll(){
- return list;
- }
- }
第三,用戶的信息封裝在User對象中
- package com.bird.login;
- /**
- * @category 封裝用戶的數據的對象
- * @author Bird
- *
- */
- public class User {
- private String username;
- private String password;
- public User() {
- }
- public User(String username, String password) {
- this.username = username;
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
- package com.bird.login;
- /**
- * @category 封裝用戶的數據的對象
- * @author Bird
- *
- */
- public class User {
- private String username;
- private String password;
- public User() {
- }
- public User(String username, String password) {
- this.username = username;
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
第四是處理用戶註銷的Servlet
- package com.bird.login;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class LoginOutServlet extends HttpServlet {
- /**
- * @category 退出登錄的Servlet,註銷
- * @author Bird
- */
- private static final long serialVersionUID = 1L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- HttpSession session = request.getSession(false);//防止創建Session
- if(session == null){
- response.sendRedirect("/Web/index.jsp");
- return;
- }
- session.removeAttribute("user");
- response.sendRedirect("/Web/index.jsp");
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- }
- }
- package com.bird.login;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class LoginOutServlet extends HttpServlet {
- /**
- * @category 退出登錄的Servlet,註銷
- * @author Bird
- */
- private static final long serialVersionUID = 1L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- HttpSession session = request.getSession(false);//防止創建Session
- if(session == null){
- response.sendRedirect("/Web/index.jsp");
- return;
- }
- session.removeAttribute("user");
- response.sendRedirect("/Web/index.jsp");
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- }
- }
第五是最終的顯示界面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My JSP 'index.jsp' starting page</title>
- </head>
- <body>
- 歡迎您,${user.username} <br>
- <a href="/Web/servlet/LoginOutServlet">退出登錄</a>
- </body>
- </html>
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My JSP 'index.jsp' starting page</title>
- </head>
- <body>
- 歡迎您,${user.username} <br>
- <a href="/Web/servlet/LoginOutServlet">退出登錄</a>
- </body>
- </html>
效果如下
登錄成功後
註銷後