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() | 构造一个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中对其进行访问。众所周知, 会话对应于特定用户。因此, 如果你从太多具有不同值的浏览器中访问它, 则会得到不同的值。
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开发)