什么是Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容
本文就介绍如何用Servlet处理Cookie
我们以一个简单的账户登录为例:
编写JSP
简单的编写一个login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="Login" method="post">
账户:<input type="text" name="account"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
编写对应的Servlet,并配置
编写LoginServlet
package cn.lystery.servlet;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应类型
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
//Cookie 处理需要对中文进行编码与解码
//URLEncoder.encode(s)------编码
//URLDecoder.decode(s)------解码
//为账户密码创建cookie
Cookie account = new Cookie("account", URLEncoder.encode(req.getParameter("account"),"utf-8"));
Cookie password = new Cookie("password", URLEncoder.encode(req.getParameter("password"),"utf-8"));
//为cookie设置过期时间 这里我们设置60s,如果要删除cookie,直接将时间设置为0即可 默认为-1 为永久
account.setMaxAge(60);
password.setMaxAge(60);
//在响应头中添加cookie
resp.addCookie(account);
resp.addCookie(password);
//进行跳转
resp.sendRedirect("Welcome.jsp");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
对web.xml进行配置
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>cn.lystery.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
编写一个页面 直接获取cookie
Welcome.jsp
<%@page import="java.net.URLDecoder"%>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
Cookie[] cookies=request.getCookies();
boolean istrue = false;
for(Cookie c:cookies)
{
if(c.getName().equals("account"))
{
out.print("账户:"+URLDecoder.decode(c.getValue(),"utf-8")+"<br>");
istrue=true;
}
if(c.getName().equals("password"))
{
out.print("密码:"+URLDecoder.decode(c.getValue(),"utf-8"));
}
}
if(istrue==false)
{
out.print("请登录");
}
%>
</body>
</html>
至此一个cookie测试已经完成,部署运行即可