Эта статья подробно объясняет:
1. Продемонстрировать основное использование файлов cookie
2. Продемонстрировать разрешения на доступ к файлам cookie
3. Продемонстрировать удаление печенья
4. Используйте файлы cookie для отображения в последний раз, когда пользователь вошел в систему
5. Используйте технологию cookie для отображения нескольких фотографий, недавно просмотренных пользователями
6. Проверьте, сколько файлов cookie и насколько велик максимальный печенье браузера Firefox?
1. Продемонстрировать основное использование файлов cookie
index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> </Head> <hody> <h1>. href = "cookiedemo"> продемонстрировать основное использование cookie </a> <br/> </body> </html>
web.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <shiple-mame> </display-name> <servlet> <servlet-name> cookiedemo </verletemo </verletemo </verlet-name> <Servlet-class> cn.hncu.servlets.cookiedemo </servlet> </servlet> <servlet-mapping> <servlet-name> cookiedemo </servlet-name> <url-pattern>/cookiedemo </url-pattern> </servlet> <welcome-list> <beldefile> index.jspather> </servlet> <belde-list> <beldefile> index. </werving-file-list> </web-app>
Cookiedemo.java:
Пакет cn.hncu.servlets; импорт java.io.ioexception; import java.io.printwriter; импорт java.net.urldecoder; import java.net.urlencoder; импорт java.util.random; импорт javax.servlet.servletexception; import.sermer.http; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class cookiedemo httpservlet {public void growserververv wepsors wepservels wesporsersvels {httpserquest refsessvels wepsesvel ServletException, ioException {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); // Написать файлы cookie в клиентский случайный r = new Random (); int n = r.nextint (100); String name = "jack"; // формат cookie: key = value cookie c = new cookie ("имя", имя+n); c.setmaxage (60*60); // Установить время истечения, в секундах c.setpath (request.getContextPath ()); // Этот путь:/имя проекта // В механизме cookie разрешения контролируются по пути. Только сервлеты с тем же путем, что и путь или подлон, могут получить доступ к файлу cookie // Если путь cookie установлен в качестве справочного каталога Project Root, тогда все сервлеты в рамках проекта могут получить доступ к IT -ответ. Addcookie (C); // это демонстрационное печенье имеет китайскую строку str = "Я приношу китайский"; str = urlencoder.encode (str, "utf-8"); // Установить кодирование на китайском языке! ! ! urlencode Кодирование cookie cstr = new cookie ("str", str); // Если SetMaxage не установлен, браузер истекает, как только он закрыт cstr.setPath ("/"); response.addcookie (cstr); // Читать cookie cs [] = request.getcookies (); // Читать cookie if (cs! = Null) {// Остерегайтесь для (cookie cc: cs) {string 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. Продемонстрировать разрешения на доступ к файлам cookie
index.jsp:
<a href = "Servlet/cookiedemo2"> демонстрируйте разрешения на доступ к файлам cookie </a> <br/> web.xml: <servlet> <serlet-name> cookiedemo2 </servlet-name> <servlet-class> cn.hncu.servlets.cookiedemo2 </servlet-class> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> <servlet-name> cookiedemo2 </servlet-name> <url-pattern>/сервис/cookiedemo2 </url-pattern> </servlet-mapping>
Ciesiedemo2.java:
Пакет cn.hncu.servlets; import java.io.ioexception; import java.io.printwriter; import java.util.random; import javax.servlet.servletexception; import javax.servlet.http.cookie; импорт javax.servlet.httpservlet. javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class cookiedemo2 расширяет httpservlet {public void Doget (httpservletrequest, httpservestonse response) prows servletexcept response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); // Написать файлы cookie в клиентский случайный r = new Random (); int n = r.nextint (100); Cookie c = новое печенье («Возраст», »"+n); C.SetMaxage (60*60); // Время истечения срока действия c.setPath (request.getContextPath ()+"/servlet/cookiedemo2"); // В механизме cookie разрешения контролируются по пути //, поскольку URL-паттерн CookieDemo-это проект корневой каталог/приготовленные из них, и не является поддиректом, приготовленным на основе приготовления. ! ! Если путь отличается, то cookie - это другой объект, что означает, что печенье с одинаковым именем не будет перекрыто! response.addcookie (c); // Читать файлы cookie, отправленные с клиентского cookie cs [] = request.getcookies (); if (cs! = null) {for (cookie cc: cs) {string name = cc.getname (); String val = cc.getValue (); out.print ("22222-"+name+"="+val+"<br/>"); }} out.print ("cookie успешно сохраняется!"); }}Демонстрационные результаты:
Сначала введите страницу PoreiedeMo2, чтобы получить доступ к Caisiedemo name-cookie
Введите снова на странице Cookiedemo и не сможет получить доступ к возрастному Cookiedemo2.
3. Продемонстрировать удаление печенья
index.jsp:
<a href = "Servlet/delcookiedemo"> Продемонстрировать удаление файлов cookie </a> <br/>
web.xml:
<servlet> <servlet-name>DelCookieDemo</servlet-name> <servlet-class>cn.hncu.servlets.DelCookieDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>DelCookieDemo</servlet-name> <url-pattern>/servlet/DelCookieDemo</url-pattern> </servlet-mapping>
Delcookiedemo.java:
Пакет cn.hncu.servlets; импорт java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; импорт javax.servlet.http.cookie; import javax.servlet.http.httpservlet; импорт. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый класс Delcookiedemo Extends httpservlet {public void Doget (httpservletrequest, httpservest response) response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); Cookie cs [] = request.getcookies (); if (cs! = null) {for (cookie c: cs) {// Чтобы перейти к «имени» cookie, текущий сервт должен иметь разрешение на чтение, то есть URL-паттерн сервлета должен быть путем, установленным Cookie или подпадением пути, установленного IT // Удалить название cookie if ("name) (c.c.getname () {c. s.metpate (c.) {c. speatpate (c.c.getname (). request.getContextPath ()); // При удалении разрешение осуществляется через это предложение! Это должно быть точно так же, как исходный путь, установленный для удаления, в противном случае его нельзя удалить! // Для предыдущего предложения мое личное понимание такова: потому что если настройки вашего пути разные, на самом деле это так же, как открывается новый файл cookie. Время истечения нового cookie составляет 0, а имя-«имя» c.setmaxage (0); // Когда истекает, см. Установка в 0, что означает удаление --- логотип удаления просто установлен здесь, чтобы ответить.addcookie (c); }}}}}}Демонстрационные результаты:
В настоящее время имя все еще существует.
Мы посещаем Delcookiedemo.
Перейдите к первой ссылке, чтобы прочитать:
Имя ушло!
Firefox автоматически удалит печенье с истекшим сроком действия:
4. Используйте файлы cookie для отображения в последний раз, когда пользователь вошел в систему
index.jsp:
<a href = "loginservlet"> Используйте файлы cookie, чтобы отобразить последний раз, когда пользователь вошел в систему </a>
web.xml:
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping>
Loginservlet.java:
Пакет cn.hncu.servlets; import java.io.ioexception; import java.io.printwriter; import java.text.simpledateformat; импорт java.util.date; импорт javax.servlet.servletexception; import javax.servlet.cookie. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый логический класс Extens httpservlet {public void Doget (httpservletrequest, httpservlece recsom response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Head> <Title> демонстрировать использование файлов cookie для отображения последнего времени входа в систему пользователя </title> </head>"); out.println ("<body>"); // Читать cookie cookie клиента CS [] = request.getCookies (); логический буо = ложь; if (cs! = null) {for (cookie c: cs) {// ездить if ("logintime" .equals (c.getName ())) {string val = c.getValue (); long dt = long.parselong (val); Дата D = новая дата (DT); SimpleDateFormat SDF = new SimpleDateFormat ("yyyyy Year Mm Month DD Date HH: MM: SS"); out.print («Ваше последнее время входа было:»+sdf.format (d)); boo = true; перерыв; }}} if (boo == false) {// означает, что за один год нет записи доступа! Потому что время истечения срока, которое мы экономят ниже. } // Будь то новые или старые пользователи, за последние два раза будут созданы файл cookie и записаны клиенту. То, что у меня было изначально, это дата обновления D = New Date (); Cookie c = new cookie ("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. Используйте технологию cookie для отображения нескольких фотографий, недавно просмотренных пользователями
index.jsp:
<a href = "jsps/show.jsp"> Посмотрите на технологию, использующую красавица, чтобы показать несколько фотографий, недавно просмотренных пользователями </a>
web.xml:
<servlet> <servlet-name> showervlet </servlet-name> <verlet-class> cn.hncu.servlets.showservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> showerervlet </servlet-name> <url-pattern>/showimg </url-pattern> </servlet> <url-pattern>/showimg </url-pattern> </servlet> <url-pattern>/showimg </url-pattern>
show.jsp:
<%@ page import = "java.io.file"%> <%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <head> <head> <head> <head> <hade> <head>. Граница: 0px твердое вещество #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; Cookie cs [] = request.getcookies (); if (cs! = null) {for (cookie c: cs) {if ("image" .equals (c.getName ())) {str = c.getValue (); // ***. Jpg Break; }}} if (str! = null) {string strs [] = str.split (","); Для (String S: Strs) {%> <pan> <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 file = new java.io.file (path); File [] files = file.listfiles (); if (files! = null) { %> < % для (файл f: файлы) {string imgname = f.getName (); %> <pan> <a href = "<%= request.getContextPath ()%>/showimg? img = <%= imgname%>"> <img src = "<%= request.getContextPath ()%>/img/<%= imgname%>"/> </a> </span> <%> <%}%>%> "/> </> </a> </span> <%> <%}%>%> </ht> </ht> </ht> </ht> </ht>.Showservlet.java:
Пакет cn.hncu.servlets; импорт java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; импорт javax.servlet.http.cookie; import javax.servlet.http.httpservlet; импорт. javax.servlet.http.httpservletresponse; public class showervlet exters httpservlet {public void doget (httpservlectrequest, httpservletresponse response) throws servletexception, ioException {response.sontentType ("text/html"); Printwriter Out = response.getWriter (); out.println ("<! Doctype html public/"-// 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+"'' // Использовать файлы cookie, чтобы записать информацию о изображении, посещаемой пользователем cookie cs [] = request.getcookies (); boolean boo = false; if (cs! if (Images ». if (imgstrs [i] .equals (img)) {if (i == 1 && imgstrs.length == 2) {imgs = imgstrs [i]+","+imgstrs [0]; Imgs = imgstrs [i]+","+imgstrs [0]+","+imgstrs [1]; imgs = img+","+imgs; // будет немного трудно использовать следующий метод: imgs+","+img if (imgs.split (","). Длина> 3) {// Если изображение посещало более 3 раза imgs = imgs.substring (0, imgs.lastexof (",", "////если нет левого, не включает в себя///если нет левого, не включает в себя. Это лучше всего отменить порядок добавления вышеупомянутого предотвращения дубликатов изображений if (imgs.split (","). Длина> 3) {// Если изображение посетило более 3 раза imgs = imgs.substring (imgs.indexof (",")+1, imgs.length ()); }*/} c.setValue (imgs); // Обновление c.setmaxage (60*60*24*30); c.setpath ("/"); // эквивалентно полностью расслабляющему доступу, то есть все проекты могут получить доступ к ответу. Addcookie (C); boo = true; перерыв; }}} if (boo == false) {// укажите первое посещение, то есть нет никакого просмотра изображений в cookie браузера C = новый cookie ("Images", IMG); c.setmaxage (60*60*24*30); c.setpath ("/"); response.addcookie (c); } out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Демонстрационные результаты:
6. Проверьте, сколько файлов cookie и насколько велик максимальный печенье браузера Firefox?
index.jsp:
<a href = "Servlet/HowmanyCookieservlet"> Проверьте максимальное количество файлов cookie и одного печенья, которое поддерживает браузер Firefox </a> <br/>
web.xml:
<servlet> <servlet-name> HowmanyCookie </servlet-name> <verlet-class> cn.hncu.servlets.howmanycookie </servlet> </servlet> <serplet-mapping> <servlet-name> howmanycookie </servlet-name> <url-pattern>/servlet/Howmanycookererverververververving </urllet-paternmating> </url-pattern>/Howmanycookererververving </urllet-patterning> </url-pattern>/Howmanycou
HowmanyCookie.java:
Пакет cn.hncu.servlets; import java.io.ioexception; import java.io.printwriter; import java.net.urldecoder; import javax.servlet.servletexception; import javax.servlet.http.cokie; import javax.servlet.http.htplte.http.cokie; import javax.servlet.http.htpllet. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый класс HowmanyCookie расширяет httpservlet {public void Doget (httpservletrequest, httpservestsone out out out out out outwriterriter {httpservessonse). /* // Число тестов-Firefox 47.0.1 поддерживает до 110 для (int i = 1; i <= 110; i ++) {cookie c = new cookie ("textnum"+i, ""+i); C.SetMaxage (60*15); c.setpath ("/"); response.addcookie (c); } */// Размер теста --- 4092 байт является крупнейшей поддерживаемой строкой для хранения печенья S = ""; for (int i = 0; i <4092; i ++) {s+= "1"; } Cookie c = new cookie ("test", s); C.SetMaxage (60*15); c.setpath ("/"); response.addcookie (c); Cookie cs [] = request.getcookies (); // Читать cookie if (cs! = Null) {// Остерегайтесь для (cookie cc: cs) {string key = cc.getname (); String val = cc.getValue (); out.print (key+"="+val+""); }}}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.