📜  Servlet中的Cookie

📅  最后修改于: 2021-01-09 12:41:10             🧑  作者: Mango

Servlet中的Cookie

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

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

Cookie如何运作

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

Cookie的类型

servlet中有两种cookie。

  • 非永久性Cookie
  • 永久性Cookie

非永久性Cookie

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

永久性Cookie

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

Cookies的优势

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

饼干的缺点

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

注意:Gmail使用cookie技术进行登录。如果您禁用Cookie,Gmail将无法使用。

Cookie类

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

Cookie类的构造方法

Constructor Description
Cookie() constructs a cookie.
Cookie(String name, String value) constructs a cookie with a specified name and value.

Cookie类的有用方法

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

Method Description
public void setMaxAge(int expiry) Sets the maximum age of the cookie in seconds.
public String getName() Returns the name of the cookie. The name cannot be changed after creation.
public String getValue() Returns the value of the cookie.
public void setName(String name) changes the name of the cookie.
public void setValue(String value) changes the value of the cookie.

使用Cookies所需的其他方法

为了添加cookie或从cookie中获取值,我们需要其他接口提供的一些方法。它们是:public void addCookie(Cookie ck):HttpServletResponse接口的方法用于在响应对象中添加cookie。 HttpServletRequest接口的public 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[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
        }

Servlet Cookies的简单示例

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

index.html


Name:

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("
"); out.print(""); out.print("
"); 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





s1
FirstServlet



s1
/servlet1



s2
SecondServlet



s2
/servlet2




输出量