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/264037.html