Servlet 中的Cookie,在上一篇指南中,我介绍了 Servlet 中的HttpSession。在这里,我们将讨论用于会话管理的Cookie
。让我们回顾一下上一篇教程中的一些内容,以便我们可以关联会话和cookie
。当用户第一次访问 Web 应用时,servlet 容器通过调用request.getSession()
来创建新的HttpSession
对象。为会话分配唯一的 ID。Servlet 容器还在 HTTP 响应的标头中设置Cookie
,其中包含cookie
名称和唯一会话 ID 作为其值。
cookie
存储在用户浏览器中,客户端(用户的浏览器)将此cookie
发送回服务器以获取所有后续请求,直到cookie
有效。Servlet 容器检查cookie
的请求标头,并从cookie
获取会话信息,并使用服务器内存中的关联会话。
会话在web.xml
中的标签中指定的时间内保持活动状态。如果未在web.xml
中设置标记,则会话将保持活动状态 30 分钟。 只要用户的浏览器正在运行,Cookie
就会保持活动状态,一旦浏览器关闭,cookie
和相关的会话信息就会被破坏。因此,当用户再次打开浏览器并向 Web 服务器发送请求时,将创建新会话。
Cookie
的类型
我们可以根据Cookie
的到期时间对Cookie
进行分类:
- 会话
- 持久
1)会话Cookie
:
会话Cookie
没有到期时间。它存在于浏览器内存中。一旦 Web 浏览器关闭,该cookie
就会被破坏。
2)持久性Cookie
:
与会话Cookie
不同,它们具有到期时间,它们存储在用户硬盘中,并根据到期时间被销毁。
如何将Cookie
发送给客户
以下是向客户端发送cookie
的步骤:
- 创建一个
Cookie
对象。 - 设置最大年龄。
- 将
Cookie
放在 HTTP 响应标头中。
1)创建一个Cookie
对象:
Cookie c = new Cookie("userName","Chaitanya");
2)设置最大年龄:
通过使用setMaxAge()
方法,我们可以设置特定cookie
的最大年龄(以秒为单位)。
c.setMaxAge(1800);
3)将Cookie
放在 HTTP 响应头中:
我们可以通过response.addCookie()
方法将cookie
发送到客户端浏览器。
response.addCookie(c);
如何阅读cookie
Cookie c[]=request.getCookies();
//c.length gives the cookie count
for(int i=0;i<c.length;i++){
out.print("Name: "+c[i].getName()+" & Value: "+c[i].getValue());
}
java servlet 中的Cookie
示例
index.html
<form action="login">
User Name:<input type="text" name="userName"/><br/>
Password:<input type="password" name="userPassword"/><br/>
<input type="submit" value="submit"/>
</form>
MyServlet1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet1 extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
String name = request.getParameter("userName");
String password = request.getParameter("userPassword");
pwriter.print("Hello "+name);
pwriter.print("Your Password is: "+password);
//Creating two cookies
Cookie c1=new Cookie("userName",name);
Cookie c2=new Cookie("userPassword",password);
//Adding the cookies to response header
response.addCookie(c1);
response.addCookie(c2);
pwriter.print("<br><a href='welcome'>View Details</a>");
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
MyServlet2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response){
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
//Reading cookies
Cookie c[]=request.getCookies();
//Displaying User name value from cookie
pwriter.print("Name: "+c[1].getValue());
//Displaying user password value from cookie
pwriter.print("Password: "+c[2].getValue());
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
web.xml
<web-app>
<display-name>BeginnersBookDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>MyServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
输出:
欢迎画面:
点击提交后:
点击查看详情后:
Cookie
类的方法
public void setComment(String purpose)
:此方法用于在cookie
中设置注释。这主要用于描述cookie
的用途。
public String getComment()
:返回描述此cookie
用途的注释,如果cookie
没有注释,则返回null
。
public void setMaxAge(int expiry)
:以秒为单位设置cookie
的最大年龄。
public int getMaxAge()
:获取此Cookie
的最大年龄(以秒为单位)。默认情况下,返回 -1,表示cookie
将持续到浏览器关闭。
public String getName()
:返回cookie
的名称。创建后无法更改名称。
public void setValue(String newValue)
:为此Cookie
指定一个新值。
public String getValue()
:获取此Cookie
的当前值。