Tutorial Servlet Cookie Pengolahan Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari Analisis Cookie,Metode Cookie Servlet,pengaturan cookie melalui Servlet,contoh,Baca melalui Servlet Cookie,contoh,Hapus Cookie oleh Servlet,contoh,
Cookie adalah file teks yang disimpan pada komputer klien, dan mempertahankan berbagai informasi pelacakan. Java Servlet jelas mendukung Cookie HTTP.
Mengembalikan identifikasi pengguna melibatkan tiga langkah:
Bab ini memberitahu Anda cara mengatur atau me-reset Cookie, bagaimana untuk mengaksesnya, dan bagaimana untuk menghapusnya.
Servlet Cookie kebutuhan encode Cina dan decode pengolahan, sebagai berikut:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Cookie biasanya diatur dalam informasi header HTTP (meskipun JavaScript juga dapat diatur secara langsung di browser Cookie). Mengatur Servlet Cookie akan mengirimkan header berikut:
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
Seperti yang Anda lihat, sundulan Set-Cookie mengandung nilai pasangan nama, tanggal GMT, jalan dan domain. Nama dan nilai akan URL dikodekan. berakhir bidang adalah instruksi yang memberitahu browser setelah tanggal dan waktu yang diberikan untuk "melupakan" Cookie.
Jika browser Anda dikonfigurasi untuk menyimpan Cookie, itu akan menyimpan informasi ini sampai tanggal kedaluwarsa. Jika browser pengguna untuk menyesuaikan dari domain Cookie dan jalur halaman, ia akan mengirim ulang Cookie ke server. Informasi Browser kepala mungkin muncul sebagai berikut:
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 dapat mengakses dengan Cookie metode permintaanrequest.getCookies (),yang mengembalikan array obyekCookie.
Berikut ini adalah daftar metode yang berguna ketika beroperasi di Servlet Cookie dapat digunakan.
序号 | 方法 & 描述 |
---|---|
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。 |
Dengan menetapkan Servlet Cookie melibatkan tiga langkah:
(1) Buat objek Cookie: Anda dapat memanggil konstruktor Cookie dengan nama cookie dan nilai cookie, nama cookie dan kue nilai-nilai string.
Cookie cookie = new Cookie("key","value");
Ingat, terlepas dari nama atau nilai, tidak boleh mengandung spasi atau karakter berikut:
[ ] ( ) = , " / ? @ : ;
(2) mengatur seumur hidup maksimum: Anda dapat menggunakan metode untuk menentukan kue setMaxAge mampu mempertahankan waktu yang valid (dalam detik).Kami akan menetapkan validitas maksimal 24 jam cookie.
cookie.setMaxAge(60*60*24);
(3) untuk mengirim Cookie header respon HTTP: Anda dapat menggunakan response.addCookieuntuk menambahkan respon HTTP header Cookie, sebagai berikut:
response.addCookie(cookie);
Mari kita memodifikasi kami contoh form data , mengatur Cookie nama pertama dan terakhir.
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); } }
MengkompilasiServlet HelloForm sebelumnya, dan membuat entri yang sesuai di file 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>Upaya terakhir untuk memanggil berikut halaman HTML Servlet.
<!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>
Menyimpan file ke konten HTML di atas /TomcatTest/test di.
Kita mengunjungi http: // localhost: 8080 / TomcatTest / test, Gif demo sebagai berikut:
Catatan: Beberapa jalan di atas membutuhkan lebih jalan yang sebenarnya memodifikasi proyek Anda.
Untuk membaca Cookie, Anda perlu membuat objekjavax.servlet.http.Cookiedengan memanggilgetCookiesHttpServletRequest()metode larik. Kemudian loop melalui array dan menggunakan getName () dan metode getValue () untuk mengakses nilai setiap cookie dan terkait.
Cookie Mari kita baca di atas contoh 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); } }
Mengkompilasi ReadCookiesServlet sebelumnya, dan membuat entri yang sesuai di file web.xml.Cobalah untuk menjalankanhttp: // localhost: 8080 / TomcatTest/ HelloForm, akan menunjukkan hasil sebagai berikut:
Hapus Cookie sangat sederhana. Jika Anda ingin menghapus cookie, Anda hanya perlu mengikuti tiga langkah berikut:
Contoh berikut akan menghapus cookie yang ada bernama "url", pada saat Anda menjalankan ReadCookies Servlet, itu akan kembali url adalah 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); } }
Mengkompilasi DeleteCookiesServlet sebelumnya, dan membuat entri yang sesuai di file web.xml.Sekarang jalankanhttp: // localhost: 8080 / TomcatTest/ DeleteCookies, akan menunjukkan hasil sebagai berikut: