Procesamiento de la galleta servlet
Cookie es un archivo de texto almacenado en el equipo cliente, y conserva una gran variedad de información de seguimiento. Java Servlet apoyan claramente HTTP Cookie.
Devuelve la identificación de usuario consta de tres pasos:
- script del servidor envía una cookie en el navegador. Por ejemplo: nombre, edad o número de identificación.
- El navegador almacena esta información en el equipo local para su uso futuro.
- La próxima vez que el navegador envía una solicitud a cualquier servidor Web, el navegador enviará la información de cookie al servidor, el servidor utilizará esta información para identificar a los usuarios.
En este capítulo se explica cómo definir o anular la galleta, cómo acceder a ellos, y cómo eliminarlos.
Servlet galleta necesidades de procesamiento de codificar y decodificar china, de la siguiente manera:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Análisis de la galleta
Cookie se suele fijar en la información del encabezado HTTP (aunque JavaScript también se puede ajustar directamente en un navegador de cookies). Configuración del servlet de cookies le envíe el siguiente encabezado:
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 se puede ver, la cabecera Set-Cookie contiene un par de valores de nombre, una fecha GMT, un camino y un dominio. El nombre y el valor URL serán codificados. expira campo es una instrucción que indica al navegador después de una fecha determinada y el tiempo de "olvidar" la galleta.
Si su navegador está configurado para almacenar la galleta, conservará esta información hasta la fecha de caducidad. Si el navegador del usuario para que coincida con cualquiera de los dominios de la galleta y la ruta de la página, se volverá a enviar el cookie al servidor. la información de cabecera del navegador puede aparecer como sigue:
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 puede acceder por la galletarequest.getCookiesmétodo de solicitud(),que devuelve un array de objetosCookie.
Métodos de cookies de servlets
La siguiente es una lista de métodos útiles cuando se opera en un servlet de la galleta se puede utilizar.
序号 | 方法 & 描述 |
---|---|
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。 |
Ajustes de cookies a través de servlets
Con la creación de la galleta Servlet consta de tres pasos:
(1) Crear un objeto Cookie: Puede llamar al constructor de la galleta con un nombre de la cookie y el valor de la galleta, galleta y galleta de nombres valores son cadenas.
Cookie cookie = new Cookie("key","value");
Recuerde, sin importar el nombre o el valor, no debe contener espacios ni los siguientes caracteres:
[ ] ( ) = , " / ? @ : ;
(2) establecer el máximo de por vida: Usted puede utilizar el método para especificar SetMaxAge galletas capaz de mantener un tiempo válido (en segundos).Vamos a establecer una validez máxima de 24 horas a la galleta.
cookie.setMaxAge(60*60*24);
(3) para enviar las cabeceras de respuesta HTTP cookies: Puede utilizar response.addCookieañadir la galleta encabezado de respuesta HTTP, de la siguiente manera:
response.addCookie(cookie);
Ejemplos
Vamos a modificar nuestros casos formulario de datos , instalar la cookie de nombres y apellidos.
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 el anterior HelloFormservlet, y crear la entrada correspondiente en el archivo 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>El último intento para llamar a la siguiente página HTML Servlet.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3big.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>
Guarde el archivo en el contenido HTML anterior /TomcatTest/test.html en.
Nos visite http: // localhost: 8080 / TomcatTest / test.html, demostración del GIF de la siguiente manera:
Nota: Algunos de la ruta anterior requiere más trayectoria real modificar su proyecto.
Leer a través de servlet de la galleta
Para leer la galleta, es necesario crear un objetojavax.servlet.http.Cookiellamando alosgetCookiesHTTPServletRequest() array método. A continuación, recorrer la matriz y utiliza getName () y el método getValue () para acceder al valor de cada galleta y asociados.
Ejemplos
La galleta Leamos lo anterior ejemplo conjunto
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 los ReadCookiesServlet anteriores, y crear la entrada correspondiente en el archivo web.xml.Intente ejecutarhttp: // localhost: 8080 / TomcatTest/ HelloForm, mostrará los siguientes resultados:
Eliminar cookie por Servlet
Eliminar cookie es muy simple. Si desea eliminar una cookie, sólo tiene que seguir los tres pasos siguientes:
- Lee un galleta existente, y almacenarlo en un objeto de la galleta.
- Utilice el métodoSetMaxAge () para establecer la edad cero de la cookie para eliminar una galleta existente.
- Añadir la cookie para las cabeceras de respuesta.
Ejemplos
El siguiente ejemplo eliminará la cookie existente denominado "URL", la próxima vez que ejecute las ReadCookies Servlet, volverá url es nulo.
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 los DeleteCookiesServlet anteriores, y crear la entrada correspondiente en el archivo web.xml.Ahora ejecutehttp: // localhost: 8080 / TomcatTest/ DeleteCookies, mostrará los siguientes resultados: