本文最后更新于 396 天前,其中的信息可能已经过时,如有错误请发送邮件到 wuxianglongblog@163.com
Cookie 是在多个客户端请求之间持久存储的一小段信息。
Cookie 具有名称,单个值和可选属性,例如注释,路径和域限定符,生存周期和版本号。
默认情况下,每个请求都被视为新的请求。在 cookie 技术中,servlet 响应可以添加 cookie。 所以 cookie 存储在浏览器的缓存中。之后,如果用户发出请求,默认情况下会带上 cookie。 因此,我们就可以知道用户旧用户。
Servlet 中有 2 种类型的 Cookie。
它仅适用于单个会话。当用户关闭浏览器时都会删除它。
它对多个会话有效。当用户关闭浏览器时也不会删除它。只有在用户注销或注销时才被删除。
- 维持状态最简单的技术。
- Cookie 在客户端维护。
- 如果从浏览器中禁用 Cookie,则无法正常工作。
- 只能在 Cookie 对象中设置文本信息。
javax.servlet.http.Cookie 类提供了使用 Cookie 的功能。它为 Cookie 提供了很多有用的方法。
构造方法 |
描述 |
Cookie() |
构建一个 cookie。 |
Cookie(String name, String value) |
构造具有指定名称和值的 cookie。 |
下面中给出了一些常用的 Cookie 类方法。
方法 |
描述 |
public void setMaxAge(int expiry) |
设置 cookie 的最大生命周期 (以秒为单位)。 |
public String getName() |
返回 cookie 的名称。创建后无法更改名称。 |
public String getValue() |
返回 cookie 的值。 |
public void setName(String name) |
更改 cookie 的名称。 |
public void setValue(String value) |
更改 cookie 的值。 |
要添加 cookie 或从 cookie 获取值,需要其他接口提供的一些方法。它们分别是:
public void addCookie(Cookie ck)
:HttpServletResponse
接口的方法用于在响应对象中添加 cookie。
public Cookie[] getCookies()
:HttpServletRequest
接口的方法用于从浏览器返回所有的 cookie。
下面来看看创建 cookie 的简单代码。
| |
| Cookie ck=new Cookie("user","maxsu jaiswal"); |
| |
| response.addCookie(ck); |
下面来看看删除 cookie 的简单代码。它主要用于注销或注销用户。
| |
| Cookie ck=new Cookie("user",""); |
| |
| ck.setMaxAge(0); |
| |
| response.addCookie(ck); |
下面来看看简单的代码用来获取所有的 cookies。
| Cookie ck[]=request.getCookies(); |
| |
| for(int i=0;i<ck.length;i++){ |
| out.print("<br>"+ck[i].getName()+" "+ck[i].getValue()); |
| } |
在这个例子中,我们将用户名称 (username
) 存储在 cookie 对象中,并在另一个 servlet 中访问它,会话对应于特定用户。所以如果从多个浏览器访问指定 cookie 名称,那么将得到不同的值。
ServletCookie01.java
| @WebServlet(name = "ServletCookie01") |
| public class ServletCookie01 extends HttpServlet { |
| @Override |
| protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
| |
| response.setContentType("text/html"); |
| |
| response.setCharacterEncoding("utf-8"); |
| |
| PrintWriter out = response.getWriter(); |
| |
| |
| String name = request.getParameter("userName"); |
| String userName = new String(name.getBytes("ISO-8859-1"),"UTF-8"); |
| |
| out.println("<!DOCTYPE html>\r\n"+ |
| "<html>\r\n"+ |
| "<head>\r\n"+ |
| "<meta charset=\"utf-8\">\r\n"+ |
| "<body>" |
| ); |
| out.println("欢迎您 "+userName); |
| |
| |
| Cookie cookie = new Cookie("userName",userName); |
| |
| response.addCookie(cookie); |
| |
| out.print("<form action='servlet2' method='post'>"); |
| out.print("<p>Cookies已在浏览器中设置,现在跳转到第二个Servlet中读取Cookies的值。</p>"); |
| out.print("<input type='submit' value='提交到第二个Servlet'>"); |
| out.print("</form>"); |
| |
| out.close(); |
| } |
| } |
ServletCookie02.java
| @WebServlet(name = "ServletCookie02") |
| public class ServletCookie02 extends HttpServlet { |
| @Override |
| protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
| |
| response.setContentType("text/html"); |
| |
| response.setCharacterEncoding("utf-8"); |
| |
| PrintWriter out = response.getWriter(); |
| |
| |
| Cookie[] cookie = request.getCookies(); |
| |
| |
| |
| |
| |
| |
| out.println("Hello "+cookie[3].getValue()); |
| } |
| } |
Cookie.html
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Cookies in Servlet</title> |
| </head> |
| <body> |
| <div style="text-align: center"> |
| <form action="servlet1" method="post"> |
| 用户名:<input type="text" name="userName" value="krislin"><input type="submit" value="提交"> |
| </form> |
| </div> |
| </body> |
| </html> |
web.xml
| <?xml version="1.0" encoding="UTF-8"?> |
| <web-app> |
| <display-name>Servlet Cookies</display-name> |
| <welcome-file-list> |
| <welcome-file>Cookie.html</welcome-file> |
| </welcome-file-list> |
| <servlet> |
| <servlet-name>ServletCookie01</servlet-name> |
| <servlet-class>ServletCookie01</servlet-class> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>ServletCookie01</servlet-name> |
| <url-pattern>/servlet1</url-pattern> |
| </servlet-mapping> |
| <servlet> |
| <servlet-name>ServletCookie02</servlet-name> |
| <servlet-class>ServletCookie02</servlet-class> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>ServletCookie02</servlet-name> |
| <url-pattern>/servlet2</url-pattern> |
| </servlet-mapping> |
| </web-app> |