一. 登录和注销流程

jsp session 注销 session注销登录_HTML


用户在请求登录之后判断是否合法,如果合法说明登录成功,并且将其加入到session集合中;用户登录之后想要注销则可以将信息从Session中删除。

index主页

写了一个简单的登录页面,用表单提交信息给后端:

jsp session 注销 session注销登录_HTML_02

<!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);
	}
}

五.效果展示:

登录:

jsp session 注销 session注销登录_jsp session 注销_03


欢迎:

jsp session 注销 session注销登录_html_04


注销:

jsp session 注销 session注销登录_html_05


jsp session 注销 session注销登录_jsp session 注销_06