一. 登录和注销流程
用户在请求登录之后判断是否合法,如果合法说明登录成功,并且将其加入到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);
}
}
五.效果展示:
登录:
欢迎:
注销: