Как использовать httpsession для внедрения записей доступа QQ в Java, эта статья раскрывает ответы на вас. Конкретный контент заключается в следующем
1. Напишите класс пространственных данных QQ (QQS.Java)
открытый класс qqs {private static linkedHashmap <integer, string> qqs = new LinkedHashmap <Integer, String> (); static {qqs.put (10001, "Zhang San"); qqs.put (10002, "li si"); qqs.put (10003, "Ван Ву"); qqs.put (10004, "Zhao Liu"); qqs.put (10005, "tian qi"); qqs.put (10006, "Jiao ba"); qqs.put (10007, "Hou jiu"); qqs.put (10008, "Лю ши"); qqs.put (10009, "xiao er"); } public static LinkedHashmap <Integer, String> getQqs () {return qqs; }}2. Напишите страницу реальных данных QQ и истории просмотра (Listservlet.java)
public void Doget (httpservlectrequest, httpservletresponse response) Throws ServletException, ioException {// Получить объект сеанса httpsession session = request.getSession (); // установить китайский ответ данных. Setcharacterencoding ("UTF-8"); response.setContentType ("text/html; charset = utf-8"); // Получить выходной stream printwriter = response.getWriter (); // Получить QQS Data LinkedHashmap <Integer, String> QQS = QQS.GetQQS (); SET <Map.Entry <Integer, String >> set = QQS.EntrySet (); Итератор <map.Entry <integer, string >> it = set.iterator (); // Структура вывода страницы out.println ("<html> <head> <title> QQ List </title> <style> a {kargin-right: 20px;} </style> </head> <body>"); out.println ("<hr/> <br/>"); out.println ("<h3> qq list </h3>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); // Цикть гиперссылки пространства QQ while (it.hasnext ()) {map.entry <integer, string> entry = it.next (); Integer num = entry.getKey (); String name = entry.getValue (); out.println ("<a href =/"/day08/store? num = "+num+"/">"+name+"</a>"); } // Вывод просмотра информации о записи out.println ("<hr/> <br/>"); out.println ("<h3> QQ История просмотра </h3>"); out.println ("<hr/> <br/>"); // Получить запись доступа string string = (string) session.getAttribute ("ИСТОРИЯ"); if (ystory == null) {out.println ("<font color =/" red/"> извините, в настоящее время нет записи доступа ... </font>"); } else {// rup через данные записи, доступ к которой пользовательская строка [] nums = vistory.split (","); for (String num: nums) {string name = qqs.getqqs (). get (integer.parseint (num)); out.println (имя+","); }} // Закрыть структуру страницы out.println ("</body> </html>"); }3. Напишите страницу, на которой хранится просмотр пространства QQ (storeqqservlet.java)
public void Doget (httpservletrequest, httpservletresponse response) Throws servletexception, ioException {// Получить объект сеанса httpsession = request.getSession (false); // Получить параметр запроса string num = request.getParameter ("num"); // Получить данные в сеансе string ystory = (string) session.getAttribute ("ИСТОРИЯ"); // Определите данные if (ystory == null) {// первое посещение session.setattribute ("История", num); // История = 10001} else {// посетить несколько session.setattribute ("История", история+","+num); // Установить количество Nums и порядок отображения строки [] QQS = vistory.split (","); // конвертировать массив в коллекцию, которая удобна для списка операций <string> list = arrays.aslist (QQS); // конвертировать список в LinkedList, чтобы облегчить работу данных LinkedList <String> linked_list = new LinkedList <string> (); linked_list.addall (list); // Определите количество QQ, которое появляется if (QQS.Length <3) {if (linked_list.contains (num)) {// yoristy = 10002,1003 // if linked_list.remove (num); linked_list.addfirst (num); } else {// История = 1004,10002,1003 // Если Linked_list.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// история = 10002,10003,10004 10004 // if linked_list.remove (num); linked_list.addfirst (num); } else {// История = 10005, 10002,10003 // не включает в себя linked_list.removelast (); linked_list.addfirst (num); }} // Доступ к записям с хорошим временем и порядок for (string new_num: linked_list) {sb.append (new_num+","); } String new_history = sb.toString (); session.setattribute («История», new_history); } // перенаправить на страницу QQ страница response.sendredirect ("/day08/list"); }Приведенный выше код хранит историю просмотра пользователя в объекте сеанса, но объект находится в памяти сервера и имеет допустимый ограничение по времени. Если придет время, сессия будет уничтожена.
Время по умолчанию составляет полчаса (30 минут).
4. Настройте достоверное время сеанса
В Web.xml каждого веб -сайта вы можете настроить достоверное время объекта сеанса, созданного веб -сайтом. Обратите внимание, что устройство - это минуты при настройке.
Thread.slessp (миллисекундные единицы), cookie.setmaxage (вторые единицы), сеанс (минутные единицы)
<session-config> <session-timeout> 2 </session-timeout> единица-минута </session-config>
5 Отключить файлы cookie
Файлы cookie могут использовать клиент для хранения данных сеанса.
HTTPSession может использовать файлы cookie для хранения информации SessionId.
Фактически, в настройках браузера вы можете отклонить информацию о файле cookie, отправленную веб -сайтом.
В настоящее время доступ к вышеупомянутым случаям приведет к возникновению нулевого исключения указателя. Если вам нужно исправить веб -сайт, вы должны использовать технологию UrlrewRiting.
Urlrewriteting
Проанализируйте причины вышеуказанных проблем:
Сервер создал объект сеанса, но, поскольку браузер запрещает прием файлов cookie, сервер не может отправить значение идентификатора созданного сеанса в браузер в форме заголовка ответа с установленными куки для хранения, поэтому идентификатор сеанса не будет ослаблен во время второго посещения, поэтому сеанс не может быть найден.
Общие методы
String encoderedirecturl (string url) Добавьте информацию SessionId в указанный string Path String string EncodeUrl (string url) Добавьте информацию SessionId в обычный адрес URL -адреса
Принципы реализации:
"Recode все адреса URL на странице, используя приведенный выше метод"
1 Измените вышеуказанную программу
1 listservlet.java
String path = "/day08/store? Num ="+num; path = response.encodeurl (path); out.println ("<a href = '"+path+"'>"+name+"</a>");2. Storeqqservlet.java
String path = "/day08/list"; path = response.conedererecturl (path); response.sendredirect (path);
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.