在Servlets中开始使用Cookie
Cookies是由Web服务器发送给客户端的基于文本的信息片段。它与客户端的响应一起交付。简单地说,cookie是网络服务器保持客户端状态的一种方法。
当一个客户提出一个新的请求时,它将请求与所有可供服务器识别的cookie一起发送。当一个cookie的寿命结束时,客户端浏览器会将其删除。
前提条件
- 对Java和Servlet的基本了解。
- 在你的机器上安装代码编辑器。在这篇文章中,我们将使用[Eclipse IDE]。
- 在你的机器上安装Tomcat服务器。
目标
在本文结束时,学习者应该能够回答下列问题。
- 什么是cookie?为什么使用它很重要?
- cookie是如何工作的?在Java Servlet中,有哪些类型的cookie?
- 什么是Cookie的类?以及cookie所需的方法有哪些?
- 如何在Java Servlet程序中实现cookie?
Cookie的API
Servlet API中的Cookie 类是用来创建cookie的。这个类采用了多种方法来给出各种cookie活动。
例如,addCookie() 方法被用来将cookie添加到响应对象中。然后,它使用HTTP响应将cookie数据从客户端发送到服务器或服务器发送到客户端。
另一方面,getCookies() 方法则用于访问已添加到响应对象中的cookie。
Cookie是如何工作的
当客户端向网络服务器发出新的请求时,网络服务器会分配一个唯一的ID作为cookie ,然后将其与响应一起发回给客户端,并保存在客户端的浏览器中。
当客户端发送另一个请求时,服务器会收到以文本形式存储在用户浏览器中的所有cookie值,并使用它们来识别用户和他们的当前状态。
当用户浏览一家网上商店并将一些物品加入购物车,然后继续做其他事情时,他或她可能会与该网站断开连接;但是,当他或她重新连接时,他或她将能够检索到他或她以前的购物车。
在这种情况下,cookie被用来存储客户每次访问网站时需要的信息,如用户ID、姓名或其他标识符。
Java Servlet中的Cookies类型
在servlet中,有两种类型的cookie,它们是非持久性cookie,和持久性cookie。
非持久性cookie
非持久性/会话cookie只对一个会话有效,并在浏览器关闭时自动删除。
持久性cookie
对多个会话有效,与非持久性cookies不同,它不会在用户关闭浏览器时被删除;相反,它只在用户注销或签出时被删除。
Cookies的优势
- 透明性。在这种情况下,Cookies在用户不知道数据被保存在其浏览器中的情况下工作。
- 最简单的技术。Cookies是在连接到网络服务器时保持客户端状态的最基本方法。
- 因为Cookies存储在客户端浏览器中,所以它们减少了服务器内存的负荷。
缺点
- 只有在用户的网络浏览器允许的情况下,Cookie才会起作用;否则,它们就不会起作用。
- 在一个Cookie对象中,只能存储文本数据。
Cookie类和Cookie所需的方法
Cookie类
一个Cookie 类包含几个与cookie有关的方法,允许你使用cookie。
Cookie类的方法
void setMaxAge():Cookie的最大年龄是用这个setMaxAge()方法设置的。在网络应用中设置max-age时,可以指定cookie的寿命。void setValue():当一个新的值被分配给cookie时,会使用这个方法。String getName():返回cookie的名称,在它被创建后不能被修改。String getValue():该方法有助于获得cookie的当前值。int getVersion():通过使用这个方法,你可以得到一个cookie的版本号。void setVersion():Cookie的版本号在这个方法中被设置。int getMaxAge():使用getMaxAge(),你可以确定cookie的最大年龄。String getPath()::使用此方法可以获得来自cookie的路径。void setPath():该方法用于指定一个cookie路径。例如,在一个网络应用程序中,可以为要保存的cookie指定一个特定的路径。String getDomain():该方法可用于从一个cookie中提取域名。
如何创建、删除和获取cookie
创建一个新的Cookie对象
Cookie object=new Cookie("uName",variableName);
为cookie设置寿命
object.serMaxAge(20*60); // setting maximum age of the cookie.
向客户端发送cookie
response.addCookie(object); // adding cookie to the response object.
从客户端的请求中获取cookie
Cookie[] object=request.getCookies();
删除Cookie
Cookie object=new Cookie("userId","");
ck.setMaxAge(0);
response.addCookie(object);
演示Servlet Cookie的例子
在这个例子中,我们将开发两个Servlet类,一个用于创建cookie,另一个用于检索cookie。在这里,我们将创建两个cookie,分别保存用户名和分配的用户主题。
在这种情况下,JSP页面给我们一个表格,让我们填写信息,如用户名和主题。
创建这个Cookies项目的步骤
第1步:创建实例来演示servlet项目中的Cookies。
打开Eclipse或其他任何Java IDE,选择一个新的动态网页项目,创建一个新的动态网页项目。提供你喜欢的项目名称。在我的例子中,我将把它称为Example to demonstrate cookies in servlet 。
第2步:创建index.JSP页面
通过右键单击Example to demonstrate cookies in servlet ,选择New JSP,你可以编码一个JSP页面,如图所示。提供你的JSP类名称。我将把我的称为index.jsp 。
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="ProcessOneServlet">
Enter User name <input type="text" name="userName" required><br>
Enter subject <input type="text" name="subject" required><br>
<input type="submit" value="Click me">
</form>
</body>
</html>
第3步:创建一个ProcessOneServlet Servlet页面
你可以通过右键点击Example to demonstrate cookies in servlet 项目选择New Servlet来编码一个Servlet页面,如下图所示。首先,提供你的Servlet类名称。我将把我的称为ProcessOneServlet 。
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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;
@WebServlet("/ProcessOneServlet")
public class ProcessOneServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
String uName=request.getParameter("userName");
String subject=request.getParameter("subject");
Cookie object=new Cookie("cookieuName",uName);
Cookie object2=new Cookie("cookieSubject",subject);
object.setMaxAge(365*24*60*60);
response.addCookie(object);
object2.setMaxAge(365*24*60*60);
response.addCookie(object2);
RequestDispatcher req=request.getRequestDispatcher("ReadingValuesFromCookies");
req.forward(request, response);
}
}
第4步:创建和读取Cookies的值 Servlet页面
你可以在Example to demonstrate cookies in servlet 项目上点击右键,选择新建Servlet,来编写一个Servlet页面,如下图所示。提供你的Servlet类名称。我将把我的称为ReadingValuesFromCookies 。
import java.io.IOException;
import java.io.PrintWriter;
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;
@WebServlet("/ReadingValuesFromCookies")
public class ReadingValuesFromCookies extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out= response.getWriter();
Cookie arrey[]=request.getCookies();
out.print("<h1>User name is :"+ arrey[1].getValue()+"</h1>");
out.print("<h1>Subject :"+ arrey[2].getValue()+"<h1>");
out.close();
}
}
结论
综上所述,我们已经了解了什么是JavaServlet 中的cookie,以及为什么它们的使用很重要。我们还了解了Cookie 类以及在创建和发送cookie到客户端浏览器时使用的cookie方法。
现在你应该知道如何实现cookie的概念。