httpsession을 사용하여 Java에서 QQ 액세스 레코드를 구현하는 방법이 기사에서는 귀하에 대한 답변을 보여줍니다. 특정 내용은 다음과 같습니다
1. 쓰기 QQ Space Data Class (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, "Wang Wu"); qqs.put (10004, "Zhao Liu"); qqs.put (10005, "Tian Qi"); qqs.put (10006, "Jiao Ba"); qqs.put (10007, "hou jiu"); qqs.put (10008, "Liu Shi"); qqs.put (10009, "Xiao Er"); } public static linkedhashmap <Integer, String> getQqs () {return qqs; }}2. 실제 QQ 데이터 및 브라우징 기록 페이지를 작성하십시오 (Listservlet.java)
public void doget (httpservletrequest request, httpservletreponse response) servletexception, ioexception {// 세션 객체 httpsession session = requestsession (); // 중국 데이터 응답 설정 .SetchAracterEncoding ( "UTF-8"); Response.setContentType ( "Text/Html; charset = utf-8"); // 출력 스트림 get 스트림 printwriter out = response.getWriter (); // qqs 데이터 링크 링크 링크 <정수, String> qqs = qqs.getqqs (); set <map.entry <integer, string >> set = qqs.entryset (); iterator <map.entry <integer, string >> it = set.iterator (); // 출력 페이지 구조 out.println ( "<html> <head> <title> qq list </title> <tyle> a {margin-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 정수 num = entry.getKey (); 문자열 이름 = Entry.GetValue (); out.println ( "<a href =/"/day08/store? num = "+num+"/">"+name+"</a>"); } // output browsed record information.println ( "<hr/> <br/>"); out.println ( "<h3> qq 브라우징 기록 </h3>"); out.println ( "<hr/> <br/>"); // 액세스 레코드 문자열 history = (문자열) 세션 .getAttribute ( "history"); if (history == null) {out.println ( "<font color =/"red/"> 죄송합니다. 현재 액세스 레코드가 없습니다 ... </font>"); } else {// user string [] nums = history.split ( ",")에서 액세스 한 레코드 데이터를 통한 루프; for (string num : nums) {문자열 이름 = qqs.getqqs (). get (integer.parseint (num)); out.println (name+","); }} // 페이지 구조를 닫습니다 .println ( "</body> </html>"); }3. 탐색 QQ 공간을 저장하는 페이지를 작성하십시오 (Storeqqservlet.java)
public void doget (httpservletrequest request, httpservletreponse response) servletexception, ioexception {// 세션 객체 httpsession session = requestsession (false); // 요청 매개 변수를 가져옵니다. string num = request.getParameter ( "num"); // 세션에서 데이터를 가져옵니다. history = (string) session.getAttribute ( "history"); // 데이터를 결정합니다 (history == null) {// 첫 번째 방문 세션을 방문하십시오. // history = 10001} else {// 여러 session.setattribute ( "history", history+","+num); // NUM의 수와 디스플레이 순서를 설정하십시오 String [] qqs = history.split ( ","); // 조작 목록에 편리한 컬렉션으로 배열을 변환합니다. list = arrays.aslist (qqs); // 링크드리스트로 목록을 변환하여 데이터 링크리스트의 작동을 용이하게합니다 링크 <문자열> 링크 된_list = new LinkedList <string> (); linked_list.addall (list); // if (qqs.length <3) {if (linked_list.contains (num)) {// history = 10002,1003 // if linked_list.remove (num); linked_list.addfirst (num); } else {// history = 1004,10002,1003 // if linked_list.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// history = 10002,10003,10004 10004 // if linked_list.remove (num); linked_list.addfirst (num); } else {// history = 10005, 10002,10003 // 링크 된_list.removelast (); linked_list.addfirst (num); }} // 좋은 시간과 순서가있는 레코드에 액세스하는 레코드는 링크 된_list StringBuffer sb = new StringBuffer (); for (string new_num : linked_list) {sb.append (new_num+","); } string new_history = sb.toString (); 세션 .setattribute ( "history", new_history); } // QQ 목록 페이지로 리디렉션 페이지 응답 .sendRedirect ( "/day08/list"); }위의 코드는 세션 객체에 사용자의 브라우징 기록을 저장하지만 객체는 서버 메모리에 있으며 유효한 시간 제한이 있습니다. 시간이 오면 세션이 파괴됩니다.
기본 시간은 30 분 (30 분)입니다.
4. 세션의 유효한 시간을 구성하십시오
각 웹 사이트의 web.xml에서 웹 사이트에서 생성 한 세션 객체의 유효한 시간을 구성 할 수 있습니다. 단위는 구성 할 때 분입니다.
Thread.slessp (밀리 초 단위), 쿠키 .setmaxage (두 번째 단위), 세션 (분 단위)
<Session-Config> <Session-TimeOut> 2 </session-timeOut> 장치는 분입니다 </session-config>
5 쿠키를 비활성화합니다
쿠키는 클라이언트를 사용하여 세션 데이터를 저장할 수 있습니다.
httpsession은 쿠키를 사용하여 SessionID 정보를 저장할 수 있습니다.
실제로 브라우저 설정에서 웹 사이트에서 다시 전송 된 쿠키 정보를 거부 할 수 있습니다.
현재 위의 사례에 액세스하면 널 포인터 예외가 발생합니다. 웹 사이트를 수정 해야하는 경우 Urlrewriting Technology를 사용해야합니다.
URLREWRITETING
위의 문제의 원인을 분석하십시오.
서버는 세션 객체를 생성했지만 브라우저는 쿠키 수신을 금지하기 때문에 서버는 스토리지 용 Set-Cookie 응답 헤더 형식으로 생성 된 세션의 ID 값을 브라우저로 보낼 수 없으므로 두 번째 방문 중에 세션 ID가 느슨해지지 않으므로 세션을 찾을 수 없습니다.
일반적인 방법
String encoderedirecturl (String URL) 지정된 리디렉션 경로 문자열 encodeurl (String URL)에 SessionID 정보 추가 SessionID 정보 추가 일반 URL 주소에 정보 추가
구현 원칙 :
"위 메소드를 사용하여 페이지의 모든 URL 주소를 다시 설명합니다"
1 위의 프로그램을 수정하십시오
1 ListServlet.java
문자열 path = "/day08/store? num ="+num; 경로 = response.encodeUrl (Path); out.println ( "<a href = '+path+"'> "+name+"</a> ");
2. StoreqqServlet.java
문자열 path = "/day08/list"; path = response.encoderedirecturl (path); response.sendredirect (path);
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.