如何在Servlets中开始使用Cookies

100 阅读6分钟

在Servlets中开始使用Cookie

Cookies是由Web服务器发送给客户端的基于文本的信息片段。它与客户端的响应一起交付。简单地说,cookie是网络服务器保持客户端状态的一种方法。

当一个客户提出一个新的请求时,它将请求与所有可供服务器识别的cookie一起发送。当一个cookie的寿命结束时,客户端浏览器会将其删除。

前提条件

  • 对Java和Servlet的基本了解。
  • 在你的机器上安装代码编辑器。在这篇文章中,我们将使用[Eclipse IDE]。
  • 在你的机器上安装Tomcat服务器。

目标

在本文结束时,学习者应该能够回答下列问题。

  1. 什么是cookie?为什么使用它很重要?
  2. cookie是如何工作的?在Java Servlet中,有哪些类型的cookie?
  3. 什么是Cookie的类?以及cookie所需的方法有哪些?
  4. 如何在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的概念。