一、使用Cookie
原理:
Cookie是在浏览器存储信息的一种方式,服务器可以通过HttpServletResponse中的addCookie()设置一个cookies头添加到响应中。浏览器会将该Cookie值保存到计算机中。我们在设置Cookie时,可以设置一下Cookie的存活期限。当客户端第一次访问服务器时,服务器设置一个Cookie,客户端浏览器会保存设置 的Cookie,如果关闭浏览器,等下一次打开浏览器时如果Cookie仍在有效期中,浏览器会使用Cookie标头自动将Cookie发送给服务器,这时服务器就可以得知一些浏览器的相关信息
域:
主要的域有
name:cookie保存的名称
value:cookie的值
maxAge:cookie最大的有效期(单位:s)
comment:描述cookie的意图的
domain:cookie的域名
version:cookie 协议的版本
相关的使用方法:
//创建一个Cookie
Cookiew cookie = new Cookie(String name,String value);
//设置Cookie的最大存活时间
cookie.setMaxAge(int expiry);
//将Cookie添加到响应中
response.addCookie(cookie);
//从request中获取Cookie[]
Cookie[] cookies = request.getCookies();
二、 实验
实验内容:首先进入一个欢迎页面,然后点击登录,如果Cookie中存在登录信息则直接跳转到登录成功页面,否则进入登录页面
welcome.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
<a href="/check.do">请先登录</a>
</body>
</html>
在浏览器中输入http://localhost:8088/welcome.html进入下面的界面
点击上面的请先登录,浏览器的URL变成http://localhost:8088/check.do
服务器根据”check.do”来查找对应的Servlet
CheckServlet.java
package httpservletresponse;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/check.do")
public class CheckServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie:cookies){
String name = cookie.getName();
String password = cookie.getValue();
if("markliwei".equals(name) && "make".equals(password)){
request.setAttribute("name",name);
request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request,response);
return;
}
}
}
response.sendRedirect("http://localhost:8088/login.html");
}
}
上面的逻辑是,首先从request中获取Cookie,如果我们的浏览器禁用Cookie,那么request获取的Cookie就是null;否则获取的cookie的name就是JSSONID,value是一个随机数。如果Cookie不为空,我们从Cookie中获取name和password。如果name和password和我们设置的相等,那么久住哪发到success.jsp中。否则就重定向到login.html中。
LoginServlet.java
package httpservletresponse;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doPost(request,response);
}
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String password = request.getParameter("password");
if(name.equals("markliwei") && password.equals("make")){
Cookie cookie = new Cookie(name,password);
cookie.setMaxAge(60*5);
request.setAttribute("name",name);
response.addCookie(cookie);
request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request,response);
}else{
response.sendRedirect("http://localhost:8088/login.html");
}
}
}
我们从request中获取name和request,如果name 和 password设置的信息一致,那么我们就将name 和 password设置到Cookie中,同时设置Cookie的一个最大存活时间。然后通过request.setAttribute设置属性;最后转发到success.jsp页面。登录不成功则重定向到login.html
参考文章
《JSP&Servlet学习笔记》-林信良