HTTPSESSIONを使用してJavaにQQアクセスレコードを実装する方法、この記事ではあなたへの回答を明らかにします。特定のコンテンツは次のとおりです
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、 "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、httpservletresponse応答)servletexception、ioexception {//セッションオブジェクトhttpsession session = request.getsession(); //中国のデータResponse.setcharacterencoding( "utf-8")を設定します。 Response.setContentType( "text/html; charset = utf-8"); //出力ストリームprintwriterを取得= response.getWriter(); // qqsデータlinkedhashmap <integer、string> qqs = qqsegqqs(); set <map.entry <integer、string >> set = qqs.entryset(); iterator <map.entry <integer、string >> it = set.iterator(); //出力ページ構造out.println( "<html> <head> <title> qq list </title> <style> 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(it.hasnext()){map.entry <integer、string> entry = it.next(); integer num = entry.getKey();文字列名= entry.getValue(); out.println( "<a href =/"/day08/store?num = "+num+"/">"+name+"</a>"); } // output browsed record information out.println( "<hr/> <br/>"); out.println( "<h3> qqブラウジング履歴</h3>"); out.println( "<hr/> <br/>"); //アクセスレコードデータ文字列履歴=(文字列)session.getAttribute( "history"); if(history == null){out.println( "<font color =/" red/">申し訳ありませんが、現在はアクセスレコードがありません... </font>"); } else {//ユーザー文字列[] nums = history.split( "、")によってアクセスされたレコードデータをループします。 for(string num:nums){string name = qqs.getqs()。get(integer.parseint(num)); out.println(name+"、"); }} //ページ構造を閉じますout.println( "</body> </html>"); }3.ブラウジングQQスペースを保存するページ(storeqqservlet.java)を書く
public void doget(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {//セッションオブジェクトhttpsession session = request.getsession(false); //リクエストパラメーター文字列num = request.getParameter( "num"); //セッション文字列履歴=(string)session.getAttribute( "history")でデータを取得します。 //データを決定します(history == null){//最初の訪問session.setattribute( "history"、num); // history = 10001} else {//複数のsession.setattribute( "history"、history+"、"+num); // numsの数と表示文字列の順序を設定します[] qqs = history.split( "、"); //操作リスト<String> list = arrays.Aslist(QQS)に便利なコレクションに配列を変換します。 // LinkedListにリストを変換して、データの操作を容易にしますlinkedlist <string> linked_list = new linkedlist <string>(); linked_list.addall(list); //表示されるqqsの数を決定する(qqs.length <3){if(linked_list.contains(num)){// history = 10002,1003 // linked_list.remove(num); linked_list.addfirst(num); } else {// history = 1004,10002,1003 // linked_list.addfirst(num); }} else {//> = 3 if(linked_list.contains(num)){// history = 10002,10003,10004 10004 // linked_list.remove(num); linked_list.addfirst(num); } else {// history = 10005、10002,10003 //はlinked_list.removelast(); linked_list.addfirst(num); }} //良い時間と注文のあるアクセスレコードはlinked_list stringbuffer sb = new stringbuffer(); for(string new_num:linked_list){sb.append(new_num+"、"); } string new_history = sb.toString(); session.setattribute( "history"、new_history); } // qqへのリダイレクトページresponse.sendredirect( "/day08/list"); }上記のコードは、セッションオブジェクトにユーザーの閲覧履歴を保存しますが、オブジェクトはサーバーメモリにあり、有効な時間制限があります。時が来た場合、セッションは破壊されます。
デフォルトの時間は30分(30分)です。
4.セッションの有効な時間を構成します
各Webサイトのweb.xmlでは、Webサイトによって作成されたセッションオブジェクトの有効な時間を構成できます。ユニットは構成時に数分であることに注意してください。
thread.slessp(ミリ秒単位)、cookie.setmaxage(2番目のユニット)、セッション(微小単位)
<Session-Config> <Session-TimeOut> 2 </Session-TimeOut>ユニットは議事録</session-config>です
5クッキーを無効にします
Cookieは、クライアントを使用してセッションデータを保存できます。
httpsesssionは、Cookieを使用してSessionID情報を保存できます。
実際、ブラウザの設定では、Webサイトから送信されたCookie情報を拒否できます。
現時点では、上記のケースにアクセスすると、ヌルポインターの例外が発生します。 Webサイトを修正する必要がある場合は、UrlrewRitingテクノロジーを使用する必要があります。
urlrewriteting
上記の問題の原因を分析します。
サーバーはセッションオブジェクトを作成しましたが、ブラウザがCookieの受信を禁止するため、サーバーは作成されたセッションのID値をブラウザに送信できないため、セットCookie応答ヘッダーのストレージの形で送信できないため、セッションIDは2回目の訪問中に怠けないため、セッションが見つかりません。
一般的な方法
string encoderedirecturl(string url)sessionid情報を指定されたリダイレクトパスストリングencodeurl(string url)に追加
実装の原則:
「上記の方法を使用して、ページ内のすべてのURLアドレスをRecode」
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 = respons.encoderedirecturl(path); respons.sendredirect(path);
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。