Servlet中的Cookie用法详解

Cookie是一小段信息, 可在多个客户端请求之间保留。

Cookie具有名称, 单个值和可选属性, 例如注释, 路径和域限定符, 最长期限和版本号。


Cookie如何运作

默认情况下, 每个请求都被视为一个新请求。在cookie技术中, 我们通过来自servlet的响应添加cookie。因此, cookie存储在浏览器的缓存中。之后, 如果用户发送了请求, 则默认情况下会在请求中添加cookie。因此, 我们将用户识别为旧用户。

servlet中的cookie

Cookie的类型

servlet中有两种cookie。

  1. 非永久性Cookie
  2. 永久性Cookie

非永久性Cookie

它仅对单个会话有效。每次用户关闭浏览器时都会将其删除。

永久性Cookie

对多个会话有效。用户每次关闭浏览器时都不会将其删除。仅在用户注销或注销时将其删除。


Cookies的优势

  1. 维持状态的最简单技术。
  2. Cookies在客户端维护。

饼干的缺点

  1. 如果从浏览器禁用cookie, 它将无法正常工作。
  2. Cookie对象中只能设置文本信息。

注意:Gmail使用cookie技术进行登录。如果你禁用Cookie, Gmail将无法正常工作。


Cookie类

javax.servlet.http.Cookie类提供使用cookie的功能。它为cookie提供了许多有用的方法。

Cookie类的构造方法

Constructor Description
Cookie() 构造一个cookie。
Cookie(字符串名称, 字符串值) 构造具有指定名称和值的cookie。

Cookie类的有用方法

提供了Cookie类的一些常用方法。

Method Description
公共无效setMaxAge(int到期) 设置Cookie的最长使用期限(以秒为单位)。
公共字符串getName() 返回cookie的名称。创建后不能更改名称。
公共字符串getValue() 返回cookie的值。
公共无效setName(字符串名称) 更改cookie的名称。
公共无效setValue(字符串值) 更改cookie的值。

使用Cookies所需的其他方法

为了添加cookie或从cookie中获取值, 我们需要其他接口提供的一些方法。它们是:public void addCookie(Cookie ck):HttpServletResponse接口的方法用于在响应对象中添加cookie。 HttpServletRequest接口的公共Cookie [] getCookies():方法用于从浏览器返回所有cookie。

如何创建Cookie?

让我们看一下创建cookie的简单代码。

Cookie ck=new Cookie("user", "sonoo jaiswal");//creating cookie object
	response.addCookie(ck);//adding cookie in the response

如何删除Cookie?

让我们看一下删除cookie的简单代码。它主要用于注销或注销用户。

Cookie ck=new Cookie("user", "");//deleting value of cookie
        ck.setMaxAge(0);//changing the maximum age to 0 seconds
        response.addCookie(ck);//adding cookie in the response

如何获得饼干?

让我们看一下获取所有cookie的简单代码。

Cookie ck[]=request.getCookies();
        for(int i=0;i<ck.length;i++){
         out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
        }

Servlet Cookies的简单示例

在此示例中, 我们将用户名存储在cookie对象中, 并在另一个servlet中对其进行访问。众所周知, 会话对应于特定用户。因此, 如果你从太多具有不同值的浏览器中访问它, 则会得到不同的值。

会话跟踪中的cookie

index.html

<form action="servlet1" method="post">
Name:<input type="text" name="userName"/><br/>
<input type="submit" value="go"/>
</form>

FirstServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class FirstServlet extends HttpServlet {

  public void doPost(HttpServletRequest request, HttpServletResponse response){
	try{

	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
		
	String n=request.getParameter("userName");
	out.print("Welcome "+n);

	Cookie ck=new Cookie("uname", n);//creating cookie object
	response.addCookie(ck);//adding cookie in the response

	//creating submit button
	out.print("<form action='servlet2'>");
	out.print("<input type='submit' value='go'>");
	out.print("</form>");
		
	out.close();

        }catch(Exception e){System.out.println(e);}
  }
}

SecondServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SecondServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response){
	try{

	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	
	Cookie ck[]=request.getCookies();
	out.print("Hello "+ck[0].getValue());

	out.close();

         }catch(Exception e){System.out.println(e);}
	}
	

}

web.xml

<web-app>

<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>s2</servlet-name>
<servlet-class>SecondServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>s2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>

</web-app>

下载此示例(使用Myeclipse IDE开发)

下载此示例(使用Eclipse IDE开发)

下载此示例(使用Netbeans IDE开发)

输出

Servlet Cookie
Servlet Cookie
servlet cookie示例
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?