Servlet Cookies

Cookie是一小段信息,可在多个客户端请求之间保留。Cookie具有名称,单个值和可选属性,例如注释,路径和域限定符,最长期限和版本号。

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

servlet中按过期时间可以分为两种cookie:

  • 非永久性Cookie
  • 永久性Cookie

非永久性Cookie
它仅对单个会话有效,每次用户关闭浏览器时都会将其删除。

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

3. Cookies的优点

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

4. Cookies的缺点

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

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

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。

如何创建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   } 

在此示例中,我们将用户名存储在cookie对象中,并在另一个servlet中访问此用户名。 众所周知,会话可以识别不同的用户。 因此,如果从具有不同值的浏览器中访问Web应用,则会获得不同的值。

Servlet Cookie实例

打开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:

Servlet Cookie实例

Servlet Cookie实例2

Servlet Cookie实例3

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264037.html

(0)
上一篇 2022年6月6日 23:01
下一篇 2022年6月6日 23:05

相关推荐

发表回复

登录后才能评论