Cookie是一小段信息,可在多个客户端请求之间保留。Cookie具有名称,单个值和可选属性,例如注释,路径和域限定符,最长期限和版本号。
1. Cookie工作原理
默认情况下,每个请求都被视为一个新请求。 在cookie技术中,我们通过来向servlet的响应添加cookie。 因此,cookie信息存储在浏览器的缓存中。 之后,如果用户发送了请求,则默认情况下会在请求中添加cookie信息。 因此,我们通过cookie信息来识别是否为旧用户。
2. Cookie的类型
servlet中按过期时间可以分为两种cookie:
- 非永久性Cookie
- 永久性Cookie
非永久性Cookie
它仅对单个会话有效,每次用户关闭浏览器时都会将其删除。
永久性Cookie
对多个会话有效,用户每次关闭浏览器时都不会将其删除,仅在用户注销或注销时将Cookie信息删除。
3. Cookies的优点
- 维持状态最简单技术。
- Cookies在客户端维护。
4. Cookies的缺点
- 如果浏览器禁用cookie,它将无法正常工作。
- Cookie对象中只能设置文本信息。
注意:Gmail使用cookie技术进行登录。 如果您禁用Cookie,Gmail将无法使用。
5. Cookie类
javax.servlet.http.Cookie
类提供使用cookie的函数功能,它为cookie提供了许多有用的方法。
Cookie类的构造方法
编号 | 构造方法 | 描述 |
---|---|---|
1 | Cookie() |
构造一个cookie。 |
2 | Cookie(String name, String value) |
构造具有指定名称和值的cookie。 |
Cookie类的实用方法
下面列出了Cookie类的一些常用方法。
编号 | 构造方法 | 描述 |
---|---|---|
1 | public void setMaxAge(int expiry) |
设置Cookie的最长使用期限(即过期时间,以秒为单位)。 |
2 | public String getName() |
返回cookie的名称,创建后不能更改名称。 |
3 | public String getValue() |
返回cookie的值。 |
4 | public void setName(String name) |
更改cookie的名称。 |
5 | public void setValue(String value) |
更改cookie的值。 |
使用Cookies所需的其他方法
要添加cookie或从cookie中获取值,需要其他接口提供的一些方法。这些方法是:
public void addCookie(Cookie ck)
–HttpServletResponse
接口的方法用于在响应对象中添加cookie。public Cookie[] getCookies()
–HttpServletRequest
接口的方法用于读取从浏览器返回所有cookie。
6. Cookie操作
如何创建Cookie?
下面是创建cookie的简单代码:
Cookie ck=new Cookie("user","max su");//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的简单代码,它主要用于读取用户登录信息。
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
}
7. Servlet Cookie实例
在此示例中,我们将用户名存储在cookie对象中,并在另一个servlet中访问此用户名。 众所周知,会话可以识别不同的用户。 因此,如果从具有不同值的浏览器中访问Web应用,则会获得不同的值。
打开Eclipse,创建一个动态web项目:ServletCookie,完整项目结构如下:
文件:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="servlet1" method="post">
用户名:<input type="text" name="username" /><br /> 密码:<input type="password"
name="passwd" /><br /> <input type="submit" value="登录" />
</form>
</body>
</html>
文件:FirstServlet.java
package com.xntutor.servlet;
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;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String passwd = request.getParameter("passwd");
if (username.equals("maxsu") && passwd.equals("passwd123")) {
out.print("你好, " + username);
Cookie ck = new Cookie("uname", username);// creating cookie object
response.addCookie(ck);// adding cookie in the response
// creating submit button
out.print("<form action='servlet2' method='post'>");
out.print("<input type='submit' value='进入下一页'>");
out.print("</form>");
}else {
out.print("<span color='red'>用户名或密码错误!</span>");
}
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
文件:SecondServlet.java
package com.xntutor.servlet;
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;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
Cookie ck[] = request.getCookies();
out.print("你好, " + ck[0].getValue());
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
文件:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ServletCookie</display-name>
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>com.xntutor.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>secondServlet</servlet-name>
<servlet-class>com.xntutor.servlet.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
启动Tomcat服务器,打开浏览器访问下面URL:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/276181.html