用Session實現登錄和註銷

一. 登錄和註銷流程

在這裏插入圖片描述
用戶在請求登錄之後判斷是否合法,如果合法說明登錄成功,並且將其加入到session集合中;用戶登錄之後想要註銷則可以將信息從Session中刪除。

index主頁

寫了一個簡單的登錄頁面,用表單提交信息給後端:
在這裏插入圖片描述

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
   <link href="css/signin.css" rel="stylesheet">
   <script src="jquery/jquery-1.9.1.min.js"></script>
   <script src="bootstrap/js/bootstrap.min.js"></script>
<title>登錄</title>
</head>
<style type="text/css"> 
    *{
        margin:0;
        padding:0;
    }
    body{
    	background-color:#4F9D9D;
		display: flex; 
		justify-content:center; 
		align-items: center;
		color: white;
    }
	.container{
		margin-top:150px;
		width: 600px;
		height: 300px;
		background-color: #5151A2;
		border-radius:10px;
		display: flex; 
		justify-content: center; 
		align-items: center;
		box-shadow: 0 0 30px white;
	}
	.form-control{
		border-radius:5px;
	 	display:block;
	   	margin:20px;
	    width: 400px;
	    height: 30px;
	}
	.submit{
		float: right;
		width:50px;
		height: 25px;
	}
</style>
<body>
    <div class="container">
    <div>
       <form class="form-signin" action="loginServlet" method="post">
        <h2 class="form-signin-heading">請登錄</h2>
        <input type="text" id="username" name="username" class="form-control" placeholder="用戶名" required autofocus>
        <input type="password" id="password" name="password" class="form-control" placeholder="密碼" required>
        <div class="checkbox">
          <label>
            <input type="checkbox" value="remember-me"> Remember me
          </label>
        </div>
        <button class="submit" type="submit">登錄</button>
      </form>   
    </div>
    </div>
  </body>
</html>

二. loginServlet登錄程序

程序獲取到前端的表單信息之後,對其做判斷,這裏我封裝了一個簡單的my
Member類來對提交的賬戶進行判斷:

public class myMember {
	public static String[] memberNumber= {"201808010520","201808010522","201808010524","201808010526"};
	public static String[] memberName= {"陶*源","屈*林","劉*龍","王*文"};
	public static String[] memberSecret= {"201808010520","201808010522","201808010524","201808010526"};
	
	public static String getMemberName(String Number,String Secret)
	{
		for(int i=0;i<4;i++)
		{
			if(memberNumber[i].equals(Number)&&memberSecret[i].equals(Secret))
				return memberName[i];
		}
		return null;//未找到
	}
}

三. 登錄loginServlet

loginServlet獲取表單賬戶信息並且對其進行判斷,如果合法則加入session,否則跳轉到重新登錄的界面,其中值得注意的是定時跳轉方法:

response.setHeader("refresh","2;URL=welcomeServlet");//定時跳轉
  • 代碼實現
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class loginServlet
 */
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public loginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //設置字符編碼格式
		response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8"); 
        
        //獲取輸出流
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        
        //獲取表單參數
        String msg="";
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        
        //獲取Session
        HttpSession session=request.getSession();
        
        //參數合法性判斷
        if(myMember.getMemberName(username,password)==null)
        {
        	msg = "用戶名或密碼錯誤,請<a href=index.html>重新登錄</a>";
        }        
        //登錄成功
        else{
            session.setAttribute("userid",myMember.getMemberName(username,password));
            response.setHeader("refresh","2;URL=welcomeServlet");//定時跳轉
            String s1="<h3>用戶登錄成功,兩秒後跳轉到歡迎頁面!</h3><br>";
            String s2="<h3>如果沒有跳轉,請按<a href='welcomeServlet'>這裏</a></h3>";
            msg = s1+s2;
        }
        out.println(msg);
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

歡迎頁面welcomeServlet

welcomeServlet只打印一個提示消息,表示歡迎,並且輸出一條跳轉連接,表示註銷:
要注意4種跳轉方法:

①超鏈接跳轉

<a href='login.html'>

②定時刷新頁面

response.setHeader("refresh","1;URL=login.html");//客戶端跳轉,定時刷新

③客戶端立即跳轉

response.sendRedirect("index.html");//客戶端跳轉,即刻跳轉

④服務器跳轉

request.getRequestDispatcher("index.html").forward(request,response);//服務器端跳轉
  • 代碼實現
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class welcomeServlet
 */
@WebServlet("/welcomeServlet")
public class welcomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public welcomeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//設置編碼
		response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        
        //獲取流
        PrintWriter out = response.getWriter();
        HttpSession session=request.getSession();
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>歡迎!</TITLE></HEAD>");
        out.println("  <BODY>");
        
        //session中找到用戶
        if(session.getAttribute("userid")!=null)	
        	out.println("<h3>歡迎"+session.getAttribute("userid")+"光臨本系統,<a href='logoutServlet'>註銷</a>!</h3>");
       
        //session中沒有找到用戶
        else{
        	//4種跳轉方法
            //out.println("<h3>請先進行系統的<a href='login.html'>登錄</a>!</h3>");
            //response.setHeader("refresh","1;URL=login.html");//客戶端跳轉,定時刷新
            //response.sendRedirect("index.html");//客戶端跳轉,即刻跳轉
            request.getRequestDispatcher("index.html").forward(request,response);//服務器端跳轉
        }
       
        out.println("</BODY>");
        out.println("</HTML>");
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

四.註銷logoutServlet

logoutServlet 用於註銷用戶信息,將用戶信息從session種註銷,調用invalidate方法

  • 代碼實現;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * Servlet implementation class logoutServlet
 */
@WebServlet("/logoutServlet")
public class logoutServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public logoutServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	       // response.setContentType("text/html;charset=UTF-8");
	       // PrintWriter out = response.getWriter();//實現請求轉發即服務器端跳轉,跳轉HTML頁面如果中文亂碼,嘗試去掉此行代碼
	        HttpSession session=request.getSession();
	        session.invalidate(); //session失效
	       // response.setHeader("refresh","2;URL=login.html");//客戶端跳轉,定時刷新
	       // response.sendRedirect("login.html");//客戶端跳轉,即刻跳轉
	        request.getRequestDispatcher("/index.html").forward(request, response);//服務器端跳轉
	        /*out.println("<HTML>");
	        out.println("  <HEAD><TITLE>註銷!</TITLE></HEAD>");
	        out.println("<h3>您已成功退出本系統,兩秒後跳轉到首頁!</h3><br>");
	        out.println("<h3>如果沒有跳轉,請按<a href='login.html'>這裏</a></h3>");
	        out.println("</BODY>");
	        out.println("</HTML>");*/
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

五.效果展示:

登錄:
在這裏插入圖片描述
歡迎:
在這裏插入圖片描述
註銷:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章