บทความนี้อธิบายอย่างละเอียด:
1. แสดงให้เห็นถึงการใช้คุกกี้ขั้นพื้นฐาน
2. แสดงให้เห็นถึงสิทธิ์การเข้าถึงของคุกกี้
3. แสดงให้เห็นถึงการลบคุกกี้
4. ใช้คุกกี้เพื่อแสดงครั้งสุดท้ายที่ผู้ใช้เข้าสู่ระบบ
5. ใช้เทคโนโลยีคุกกี้เพื่อแสดงรูปภาพหลายภาพเมื่อเร็ว ๆ นี้
6. ทดสอบคุกกี้กี่คุกกี้และคุกกี้สูงสุดของเบราว์เซอร์ Firefox สูงสุด?
1. แสดงให้เห็นถึงการใช้คุกกี้ขั้นพื้นฐาน
index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> href = "cookiedemo"> แสดงให้เห็นถึงการใช้คุกกี้พื้นฐาน </a> <br/> </body> </html>
web.xml:
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" <servlet-class> cn.hncu.servlets.cookiedemo </servlet-lass> </servlet> <servlet-mapping> <servlet-name> cookiedemo </servlet-name> <url-pattern>/cookiedemo </url-pattern> </welcome-file-list> </eb-app>
cookiedemo.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.net.urldecoder; นำเข้า java.net.urlencoder; นำเข้า java.util.random; นำเข้า Javax.servlet.servletex javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest นำเข้า Javax.servlet.http.httpservletresponse; ServleTexception, iOexception {response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); // เขียนคุกกี้ไปยังไคลเอนต์สุ่ม r = ใหม่สุ่ม (); int n = r.nextint (100); ชื่อสตริง = "jack"; // รูปแบบของคุกกี้: key = ค่าคุกกี้ c = คุกกี้ใหม่ ("ชื่อ", ชื่อ+n); C.SetMaxage (60*60); // ตั้งเวลาหมดอายุในวินาที C.SetPath (request.getContextPath ()); // เส้นทางนี้คือ:/ชื่อโครงการ // ในกลไกคุกกี้การอนุญาตจะถูกควบคุมผ่านเส้นทาง เฉพาะ servlets ที่มีเส้นทางเดียวกับเส้นทางหรือ subpath เท่านั้นที่สามารถเข้าถึงคุกกี้ // หากเส้นทางของคุกกี้ถูกตั้งค่าเป็นไดเรกทอรีรูทโครงการแล้ว Servlets ทั้งหมดภายใต้โครงการสามารถเข้าถึงการตอบสนอง It.addcookie (C); // คุกกี้สาธิตนี้มีสตริงภาษาจีน str = "ฉันนำภาษาจีน"; str = urlencoder.encode (str, "utf-8"); // ตั้งค่าการเข้ารหัสเป็นภาษาจีน! - - Urlencode เข้ารหัสคุกกี้ CSTR = คุกกี้ใหม่ ("Str", str); // หากไม่ได้ตั้งค่า setMaxage เบราว์เซอร์จะหมดอายุทันทีที่ปิด cstr.setPath ("/"); Response.addcookie (CSTR); // อ่านคุกกี้ cs [] = request.getCookies (); // อ่านคุกกี้ถ้า (cs! = null) {// ระวังของสำหรับ (คุกกี้ cc: cs) {สตริง name2 = cc.getName (); String val = cc.getValue (); val = urldecoder.decode (val, "utf-8"); // ปรากฎว่ามันจะถอดรหัสตามที่เข้ารหัส! การถอดรหัสภาษาจีน ASCII เป็นอย่างที่เป็นอยู่! out.print (name2+"="+val+"<br/>"); }} out.print ("Cook บันทึกสำเร็จ!"); -ผลการสาธิต:
ในคลิกแรก! เซสชั่นจะมีการหารือในครั้งต่อไป! Tomcat ถูกสร้างขึ้นโดยอัตโนมัติและส่งไปยังลูกค้า!
เมื่อเข้าสู่อีกครั้ง!
ชื่อ+n เนื่องจาก n ด้านหลังถูกสร้างขึ้นแบบสุ่มคลิกนี้จะแสดงข้อมูลของอันก่อนหน้าเสมอ!
2. แสดงให้เห็นถึงสิทธิ์การเข้าถึงของคุกกี้
index.jsp:
<a href = "servlet/cookiedemo2"> แสดงให้เห็นถึงสิทธิ์การเข้าถึงของคุกกี้ </a> <br/> web.xml: <servlet> <servlet-name> cookiedemo2 </servlet-name> <servlet-name> cookiedemo2 </servlet-name> <url-pattern>/servlet/cookiedemo2 </url-pattern> </servlet-mapping>
cookiedemo2.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.random; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.cookie; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; ชั้นเรียนสาธารณะ cookiedemo2 ขยาย httpservlet {โมฆะสาธารณะ doget Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); // เขียนคุกกี้ไปยังไคลเอนต์สุ่ม r = ใหม่สุ่ม (); int n = r.nextint (100); คุกกี้ c = คุกกี้ใหม่ ("อายุ", ""+n); C.SetMaxage (60*60); // เวลาหมดอายุ C.SetPath (request.getContextPath ()+"/servlet/cookiedemo2"); // ในกลไกคุกกี้การอนุญาตจะถูกควบคุมผ่านเส้นทาง // เนื่องจาก url-pattern ของ Cookiedemo - - หากเส้นทางแตกต่างกันคุกกี้เป็นวัตถุที่แตกต่างกันซึ่งหมายความว่าคุกกี้ที่มีชื่อเดียวกันจะไม่ซ้อนกัน! Response.addcookie (C); // อ่านคุกกี้ที่ส่งจาก Client Cookie CS [] = request.getCookies (); if (cs! = null) {สำหรับ (คุกกี้ cc: cs) {ชื่อสตริง = cc.getName (); String val = cc.getValue (); out.print ("22222-"+name+"="+val+"<br/>"); }} out.print ("คุกกี้ได้รับการบันทึกเรียบร้อยแล้ว!"); -ผลการสาธิต:
ก่อนอื่นป้อนหน้า cookiedemo2 เพื่อเข้าถึงชื่อ cookiedemo cookie
เข้าสู่หน้า cookiedemo อีกครั้งและไม่สามารถเข้าถึง Cookiedemo2 Age-Cookie
3. แสดงให้เห็นถึงการลบคุกกี้
index.jsp:
<a href = "servlet/delcookiedemo"> แสดงให้เห็นถึงการลบคุกกี้ </a> <br/>
web.xml:
<servlet> <servlet-name> delcookiedemo </servlet-name> <servlet-class> cn.hncu.servlets.delcookiedemo </servlet-lass> </servlet> <servlet-mapping> <servlet-name>
delcookiedemo.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.cookie; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; ชั้นเรียนสาธารณะ Delcookiedemo ขยาย httpservlet {โมฆะสาธารณะ doget Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); คุกกี้ cs [] = request.getCookies (); ถ้า (cs! = null) {สำหรับ (คุกกี้ C: CS) {// เพื่อข้ามไปยังคุกกี้ "ชื่อ", servlet ปัจจุบันต้องมีการอนุญาตอ่านนั่นคือ url-pattern ของ servlet จะต้องเป็นเส้นทางที่กำหนดโดยคุกกี้หรือเส้นทางย่อย) ); // เมื่อลบการอนุญาตจะถูกตัดสินผ่านประโยคนี้! สิ่งนี้จะต้องเหมือนกับเส้นทางดั้งเดิมที่ตั้งไว้เพื่อลบมิฉะนั้นจะไม่สามารถลบได้! // สำหรับประโยคก่อนหน้าความเข้าใจส่วนตัวของฉันคือ: เพราะถ้าการตั้งค่าเส้นทางของคุณแตกต่างกันจริง ๆ แล้วมันก็เหมือนคุกกี้ใหม่ที่เปิดขึ้น เวลาหมดอายุของคุกกี้ใหม่คือ 0 และชื่อคือ "ชื่อ" C.SetMaxage (0); // เมื่อหมดอายุดูที่กำหนดไว้ที่ 0 ซึ่งหมายถึงการลบ --- โลโก้การลบถูกตั้งค่าไว้ที่นี่เพื่อตอบสนอง Addcookie (C); -ผลการสาธิต:
ในเวลานี้ชื่อยังคงมีอยู่
เราเยี่ยมชม Delcookiedemo
ไปที่ลิงค์แรกเพื่ออ่าน:
ชื่อหายไป!
Firefox จะลบคุกกี้ที่หมดอายุโดยอัตโนมัติ:
4. ใช้คุกกี้เพื่อแสดงครั้งสุดท้ายที่ผู้ใช้เข้าสู่ระบบ
index.jsp:
<a href = "loginservlet"> ใช้คุกกี้เพื่อแสดงครั้งสุดท้ายที่ผู้ใช้เข้าสู่ระบบ </a>
web.xml:
<servlet> <servlet-name> loginservlet </servlet-name> <servlet-lass> cn.hncu.servlets.loginservlet </servlet-lass> </servlet> <servlet-mapping>
loginServlet.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า javax.servlet.servletexception; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; ชั้นเรียนล็อกอินระดับสาธารณะขยาย httpservlet {โมฆะสาธารณะ doget Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); out.println ("<! doctype html สาธารณะ/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <title> สาธิตการใช้คุกกี้เพื่อแสดงเวลาเข้าสู่ระบบครั้งสุดท้ายของผู้ใช้ </title> </head>"); out.println ("<body>"); // อ่านคุกกี้คุกกี้ของลูกค้า cs [] = request.getCookies (); บูลีนบู = เท็จ; if (cs! = null) {สำหรับ (คุกกี้ C: CS) {// travel if ("logintime" .equals (c.getName ())) {String val = c.getValue (); long dt = long.parselong (val); วันที่ d = วันที่ใหม่ (dt); SimpledateFormat SDF = New SimpledateFormat ("Yyyyy Year MM เดือน DD วันที่ HH: MM: SS"); out.print ("เวลาเข้าสู่ระบบครั้งสุดท้ายของคุณคือ:"+sdf.format (d)); boo = true; หยุดพัก; }}} ถ้า (boo == false) {// หมายความว่าไม่มีบันทึกการเข้าถึงในหนึ่งปีก่อน! เนื่องจากเวลาหมดอายุที่เราประหยัดด้านล่างนี้พิมพ์ออกมา ("คุณกำลังเยี่ยมชมเป็นครั้งแรกในปีที่แล้ว ... "); } // ไม่ว่าจะเป็นผู้ใช้ใหม่หรือเก่า ๆ คุกกี้จะถูกสร้างขึ้นในสองครั้งที่ผ่านมาและเขียนถึงลูกค้า สิ่งที่ฉันมีในตอนแรกคือวันที่เวลาอัปเดต d = วันที่ใหม่ (); คุกกี้ c = คุกกี้ใหม่ ("logintime", ""+d.gettime ()); C.SetPath (request.getContextPath ()); C.SetMaxage (60*60*24*30*12); Response.addcookie (C); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); -ผลการสาธิต:
ครั้งแรก
เยี่ยมชมอีกครั้ง:
5. ใช้เทคโนโลยีคุกกี้เพื่อแสดงรูปภาพหลายภาพเมื่อเร็ว ๆ นี้
index.jsp:
<a href = "jsps/show.jsp"> ดูที่เทคโนโลยีคุกกี้ที่ใช้ความงามเพื่อแสดงรูปภาพหลายภาพเมื่อเร็ว ๆ นี้โดยผู้ใช้ </a>
web.xml:
<servlet> <servlet-name> sweetervlet </servlet-name> <servlet-lass> cn.hncu.servlets.showservlet </servlet-lass> </servlet> <servlet-mapping>
show.jsp:
<%@ page import = "java.io.file"%> <%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! ชายแดน: 0px Solid #000; ความกว้าง: 100px; ความสูง: 100px; ล้น: ซ่อน; } .SPAN IMG {Max-Width: 100px; _width: นิพจน์ (this.width> 100? "100px": this.width); } .Spans {Border: 0px Solid #000; ความกว้าง: 50px; ความสูง: 50px; ล้น: ซ่อน; } .Spans IMG {Max-Width: 50px; _width: นิพจน์ (this.width> 50? "50px": this.width); } </style> </head> <body> <h1> ดูที่เทคโนโลยีคุกกี้ที่ใช้ความงามเพื่อแสดงภาพหลายภาพเมื่อเร็ว ๆ นี้โดยผู้ใช้ </h1> <a href = "/mycookieweb/jsps/show.jsp"> ดูที่ความงามของเทคโนโลยีคุกกี้ <% string str = null; คุกกี้ cs [] = request.getCookies (); if (cs! = null) {สำหรับ (คุกกี้ C: CS) {ถ้า ("รูปภาพ" .Equals (c.getName ())) {str = c.getValue (); // ***. jpg break; }}} if (str! = null) {string strs [] = str.split (","); สำหรับ (String S: Strs) {%> <span> <img src = "<%= request.getContextPath ()%>/imgs/<%= s%>"/> </span> <%}}%> <br/> <hr/> <br/> <%// ใช้ไฟล์ String path = getServletContext (). getRealPath ("/imgs"); //system.out.printf(path); //d:/apache-tomcat-7.0.30/webapps/mycookieweb/jsps ไฟล์ไฟล์ = ใหม่ java.io.file (พา ธ ); ไฟล์ [] files = file.listfiles (); if (ไฟล์! = null) { %> < % สำหรับ (ไฟล์ f: ไฟล์) {string imgname = f.getName (); %> <span> <a href = "<%= request.getContextPath ()%>/showimg? img = <%= imgname%>"> <img src = "<%= request.getContextPath ()%>/imgs/<%= imgName%>"/> </a>sweetervlet.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.cookie; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.htttservletResponse; คลาสสาธารณะ showservlet ขยาย httpservlet {โมฆะสาธารณะ doget (httpservletrequest คำขอ, httpservletresponse การตอบสนอง) โยน servletexception, ioexception PrintWriter out = response.getWriter (); out.println ("<! doctype html สาธารณะ/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <title> a servlet </title> </head>"); out.println ("<body>"); string img = request.getParameter ("img"); string imgstr = "<img src = '"+request.getContextPath ()+"/imgs/"+img+"' //>"+img+"'// ใช้คุกกี้เพื่อบันทึกข้อมูลภาพที่ผู้ใช้คุกกี้ cs [] = request.getCookies (); boolean boo = false; if ("images" .equals (c.getName ())) {// ฉันมีรูปภาพสตริงคุกกี้ imgs = c.getValue (); ถ้า (imgstrs [i] .equals (img)) {ถ้า (i == 1 && imgstrs.length == 2) {imgs = imgstrs [i]+","+imgstrs [0]; imgs = imgstrs [i]+","+imgstrs [0]+","+imgstrs [1]; imgs = img+","+imgs; // มันจะลำบากเล็กน้อยในการใช้วิธีการต่อไปนี้: imgs+","+img ถ้า (imgs.split (","). ความยาว> 3) {// ถ้าภาพเข้าเยี่ยมชมมากกว่า 3 ครั้ง นี่เป็นการดีที่สุดที่จะย้อนกลับลำดับของการเพิ่มรูปแบบการป้องกันข้างต้นด้านข้างต้นวิธีการที่ซ้ำกัน //imgs+","+Img วิธี: imgs = imgs+","+img; if (imgs.split (","). ความยาว> 3) {// ถ้าภาพเข้าเยี่ยมชมมากกว่า 3 ครั้ง imgs = imgs.substring (imgs.indexof (",")+1, imgs.length ()); }*/} C.SetValue (IMGS); // Update C.SetMaxage (60*60*24*30); C.SetPath ("/"); // เทียบเท่ากับสิทธิ์การเข้าถึงที่ผ่อนคลายอย่างสมบูรณ์นั่นคือโครงการทั้งหมดสามารถเข้าถึงการตอบสนอง Addcookie (C); boo = true; หยุดพัก; }}} ถ้า (boo == false) {// ระบุการเข้าชมครั้งแรกนั่นคือไม่มีการเรียกดูภาพในคุกกี้เบราว์เซอร์ c = คุกกี้ใหม่ ("รูปภาพ", img); C.SetMaxage (60*60*24*30); C.SetPath ("/"); Response.addcookie (C); } out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); -ผลการสาธิต:
6. ทดสอบคุกกี้กี่คุกกี้และคุกกี้สูงสุดของเบราว์เซอร์ Firefox สูงสุด?
index.jsp:
<a href = "servlet/howmanycookieservlet"> ทดสอบจำนวนสูงสุดของคุกกี้และคุกกี้หนึ่งที่เบราว์เซอร์ Firefox รองรับ </a> <br/>
web.xml:
<servlet> <servlet-name> howmanycookie </servlet-name> <servlet-lass> cn.hncu.servlets.howmanycookie </servlet-lass> </servlet> <servlet-mapping>
howmanycookie.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.net.urldecoder; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.cookie; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; ชั้นเรียนสาธารณะ Howmanycookie ขยาย httpservlet {public void doget Response.getWriter (); /* // NUM ของการทดสอบ-FIREFOX 47.0.1 รองรับสูงสุด 110 สำหรับ (int i = 1; i <= 110; i ++) {คุกกี้ c = คุกกี้ใหม่ ("textnum"+i, ""+i); C.SetMaxage (60*15); C.SetPath ("/"); Response.addcookie (C); } */// ขนาดทดสอบ --- 4092 ไบต์เป็นสตริงที่เก็บคุกกี้เดี่ยวที่ใหญ่ที่สุดที่รองรับ s = ""; สำหรับ (int i = 0; i <4092; i ++) {s+= "1"; } คุกกี้ c = คุกกี้ใหม่ ("ทดสอบ", s); C.SetMaxage (60*15); C.SetPath ("/"); Response.addcookie (C); คุกกี้ cs [] = request.getCookies (); // อ่านคุกกี้ถ้า (cs! = null) {// ระวังสำหรับ (คุกกี้ cc: cs) {สตริงคีย์ = cc.getName (); String val = cc.getValue (); out.print (key+"="+val+""); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น