一. 登錄和註銷流程
用戶在請求登錄之後判斷是否合法,如果合法說明登錄成功,並且將其加入到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);
}
}
五.效果展示:
登錄:
歡迎:
註銷: