O melhor tutorial Servlet Processamento de Cookies em 2024. Neste tutorial você pode aprender Análise do bolinho,Métodos do bolinho de servlet,Definições cookies através Servlet,Exemplos,Leia através de Servlet do bolinho,Exemplos,Remover biscoito por Servlet,Exemplos,
Cookie é um arquivo de texto armazenado no computador do cliente, e mantém uma variedade de informações de rastreamento. Java Servlet apoiar claramente Cookies HTTP.
Retorna a identificação do usuário envolve três etapas:
Este capítulo mostra como definir ou redefinir Cookie, como acessá-los, e como removê-los.
Servlet Biscoito necessidades de processamento de codificar e decodificar chinesa, como segue:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Cookie é geralmente definida nas informações de cabeçalho HTTP (embora JavaScript também pode ser definida diretamente em um navegador Cookie). Definir o Cookie Servlet envia o seguinte cabeçalho:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2000 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=w3cschool.cc Connection: close Content-Type: text/html
Como você pode ver, o cabeçalho Set-Cookie contém um par de valor de nome, uma data GMT, um caminho e um domínio. O nome eo valor será URL codificada. Expira em campo é uma instrução que informa ao navegador depois de uma determinada data e hora de "esquecer" o Cookie.
Se o seu navegador está configurado para armazenar Cookie, ela irá reter essa informação até a data de validade. Se o navegador do usuário para corresponder a qualquer do domínio do bolinho e caminho da página, ele irá re-enviar o cookie para o servidor. informações de cabeçalho do navegador pode aparecer da seguinte maneira:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc) Host: zink.demon.co.uk:1126 Accept: image/gif, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Cookie: name=xyz
Servlet pode acessar porrequest.getCookiesmétodo de solicitação Cookie(),que retorna uma matriz de objetosdo bolinho.
O que se segue é uma lista de métodos úteis ao operar em um cookie Servlet pode ser usado.
序号 | 方法 & 描述 |
---|---|
1 | public void setDomain(String pattern) 该方法设置 cookie 适用的域,例如 w3cschool.cc。 |
2 | public String getDomain() 该方法获取 cookie 适用的域,例如 w3cschool.cc。 |
3 | public void setMaxAge(int expiry) 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。 |
4 | public int getMaxAge() 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。 |
5 | public String getName() 该方法返回 cookie 的名称。名称在创建后不能改变。 |
6 | public void setValue(String newValue) 该方法设置与 cookie 关联的值。 |
7 | public String getValue() 该方法获取与 cookie 关联的值。 |
8 | public void setPath(String uri) 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。 |
9 | public String getPath() 该方法获取 cookie 适用的路径。 |
10 | public void setSecure(boolean flag) 该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。 |
11 | public void setComment(String purpose) 设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。 |
12 | public String getComment() 获取 cookie 的注释,如果 cookie 没有注释则返回 null。 |
Ao definir Servlet biscoito envolve três etapas:
(1) Criar um objeto Cookie: Você pode chamar o construtor do bolinho com um nome de cookie e valor do cookie, nome bolinho e bolinho valores são strings.
Cookie cookie = new Cookie("key","value");
Lembre-se, independentemente do nome ou valor, não deve conter espaços ou os seguintes caracteres:
[ ] ( ) = , " / ? @ : ;
(2) definir a duração máxima: Você pode usar o método para especificar SetMaxAge bolinho capaz de manter um tempo válido (em segundos).Vamos definir uma duração máxima de 24 horas por cookies.
cookie.setMaxAge(60*60*24);
(3) para enviar cabeçalhos de resposta HTTP Cookie: Você pode usar response.addCookiepara adicionar resposta HTTP Cookie, como segue:
response.addCookie(cookie);
Vamos modificar nossas instâncias de dados forma , definir o cookie de nomes e sobrenomes.
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/HelloForm") public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloForm() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 为名字和姓氏创建 Cookie Cookie name = new Cookie("name", URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码 Cookie url = new Cookie("url", request.getParameter("url")); // 为两个 Cookie 设置过期日期为 24 小时后 name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // 在响应头中添加两个 Cookie response.addCookie( name ); response.addCookie( url ); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "设置 Cookie 实例"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>站点名:</b>:" + request.getParameter("name") + "\n</li>" + " <li><b>站点 URL:</b>:" + request.getParameter("url") + "\n</li>" + "</ul>\n" + "</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Compilar o HelloFormServlet anterior, e criar a entrada apropriada no arquivo web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <!-- 类名 --> <servlet-name>HelloForm</servlet-name> <!-- 所在的包 --> <servlet-class>com.w3big.test.HelloForm</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloForm</servlet-name> <!-- 访问的网址 --> <url-pattern>/TomcatTest/HelloForm</url-pattern> </servlet-mapping> </web-app>A última tentativa de chamar o seguinte Servlet página HTML.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.com)</title> </head> <body> <form action=/TomcatTest/HelloForm method="GET"> 站点名 :<input type="text" name="name"> <br /> 站点 URL:<input type="text" name="url" /><br> <input type="submit" value="提交" /> </form> </body> </html>
Salve o arquivo para o conteúdo HTML acima /TomcatTest/test in.
Seguinte, visite http: // localhost: 8080 / TomcatTest / test, Gif demonstração da seguinte forma:
Nota: Alguns o caminho acima requer mais caminho real modificar seu projeto.
Para ler Cookie, você precisa criar um objetojavax.servlet.http.CookiechamandoosgetCookiesHTTPServletRequest() matriz método. Em seguida, percorrer a matriz e usa getName (método getValue ()) e para acessar o valor de cada bolinho e associado.
Bolinho Vamos ler o exemplo acima set
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ReadCookies */ @WebServlet("/ReadCookies") public class ReadCookies extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ReadCookies() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = null; Cookie[] cookies = null; // 获取与该域相关的 Cookie 的数组 cookies = request.getCookies(); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Delete Cookie Example"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" ); if( cookies != null ){ out.println("<h2>Cookie 名称和值</h2>"); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo("name") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("已删除的 cookie:" + cookie.getName( ) + "<br/>"); } out.print("名称:" + cookie.getName( ) + ","); out.print("值:" + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br/>"); } }else{ out.println( "<h2 class=\"tutheader\">No Cookie founds</h2>"); } out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Compilar os ReadCookiesServlet anteriores, e criar a entrada apropriada no arquivo web.xml.Tente executarhttp: // localhost: 8080 / TomcatTest/ HelloForm, mostrará os seguintes resultados:
Remover Cookie é muito simples. Se você quiser excluir um cookie, você só precisa seguir os três passos seguintes:
O exemplo a seguir irá excluir o cookie existente chamado "url", a próxima vez que você executar os ReadCookies Servlet, ele irá retornar url é null.
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DeleteCookies */ @WebServlet("/DeleteCookies") public class DeleteCookies extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DeleteCookies() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = null; Cookie[] cookies = null; // 获取与该域相关的 Cookie 的数组 cookies = request.getCookies(); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "删除 Cookie 实例"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" ); if( cookies != null ){ out.println("<h2>Cookie 名称和值</h2>"); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; if((cookie.getName( )).compareTo("url") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("已删除的 cookie:" + cookie.getName( ) + "<br/>"); } out.print("名称:" + cookie.getName( ) + ","); out.print("值:" + cookie.getValue( )+" <br/>"); } }else{ out.println( "<h2 class=\"tutheader\">No Cookie founds</h2>"); } out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Compilar os DeleteCookiesServlet anteriores, e criar a entrada apropriada no arquivo web.xml.Agora executehttp: // localhost: 8080 / TomcatTest/ DeleteCookies, mostrará os seguintes resultados: