この記事では、サーブレットリスナーに基づいてオンラインユーザー監視機能を実装するJavaの方法について説明します。次のように、参照のために共有してください。
1。分析:
ウェブサイトのオンライン数の人々を行うには、ServletContextListenerを聴くことができます。 Webアプリケーションのコンテキストが開始されたら、ServletContextにリストを追加します。それを使用して、オンラインで保存されているユーザー名を準備し、httpsssionAttributeListenerを聞きます。ユーザーが正常にログインしたら、ユーザー名をセッションに設定します。同時に、ユーザー名メソッドがservletcontextのリストに配置され、最後にhttpsessionlistenerを介して聞きました。ユーザーがセッションからログアウトすると、ユーザー名はアプリケーションコンテキストスコープのリストリストから削除されます。
2。注意すべきこと
テスト中に、さまざまなユーザーにログインするために、さまざまなブラウザを起動する必要があります。ログアウトボタンをクリックすることによってのみ、オンラインユーザーを減らすことができます。ブラウザを閉じることは、オンラインユーザーを減らすことができません。
3.プロジェクトソースコード
(1)Javaコード
OnlineListenerクラス
パッケージcom.smalle.listener; Import java.util.linkedlist; Import java.util.list; import javax.servlet.servletcontext; import javax.servletcontextevent; import javax.servlet.servletecontextlistener; import; javax.servlet.http.httpssessionattributelistener; import javax.servlet.httpsessionbindevent; Import javax.servlet.httpsessionevent; Import javax.servlet.http.httpsessionlistener; httpsssionAttributeListener、httpsessionlistener {private servletcontext application = null; //アプリケーションコンテキストの先頭にコールバック@Override public void contextInitialized(servletContextevent e){//アプリケーションオブジェクトアプリケーションを初期化= e.getServletContext(); // list属性を設定して、オンラインユーザー名を保存しますthis.application.setattribute( "online"、new linkedlist <string>()); } // callbackメソッドセッションに属性を追加するとき@Override public void attributeAdded(httpssessionbindingEvent e){//ユーザー名リスト<string> onlines =(list <string>)this.application.getattribute( "online"); if( "username" .equals(e.getname())){onlines.add((string)e.getValue()); } //追加されたリストの列アプリケーションプロパティをリセットします。 this.application.setattribute( "online"、onlines); } //セッションが破壊されたときにコールバックするメソッド@override public sessiondestroyed(httpssessionevent e){//ユーザー名リスト<string> onlines =(list <string>)this.application.getattribute( "online"); //現在のusername string username =(string)e.getSession()。getAttribute( "username");を取得します。 //このユーザーをリストonlines.remove(username)から削除します。 //削除されたリストをアプリケーションプロパティにリセットします。 this.application.setattribute( "online"、onlines); } public void sessioneded(httpssessionevent e){} public void astributeremoved(httpssessionbindingevent e){} public void astributeReplaced(httpssessionbindingevent e){}}}LoginServletクラス
パッケージcom.smalle.listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class loginervletはhttpservletを拡張します{private static final long serialversionuid = 1l; public void doget(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {this.dopost(request、response); } public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {request.setcharacterencoding( "utf-8"); //応答コンテンツタイプ文字列ユーザー名= request.getParameter( "username"); //リクエストパラメーターでユーザー名を取得する//セッションに属性を追加すると、httpsssionAttributeListenerの属性メソッドがトリガーされます。 } //アプリケーションコンテキストリストからオンラインユーザー名リストを取得<String>オンライン=(リスト<String>)getServletContext()。 system.out.println( "loginservlet" + online); Response.setContentType( "text/html; charset = utf-8"); printwriter out = response.getWriter(); out.println( ""); out.println( "<title> user list </title>"); out.println( ""); out.println( "現在のユーザーは:" + username); out.print( "<hr> <h3>オンラインユーザーリスト</h3>"); int size =オンライン== null? 0:online.size(); for(int i = 0; i <size; i ++){if(i> 0){out.println( "<br>"); } out.println(i + 1 + "。" + online.get(i)); } //注:link url out.println( "<hr/> <a href =/" + respons.encodeurl( "logoutlistener") + "/"> logout </a> "); out.println( "); out.println(" "); out.flush(); out.close();}}}}logoutservletクラス
パッケージcom.smalle.listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; javax.servlet.http.httpservletResponse; public class logoutservlet extends httpservlet {public void doget(httpservletrequest request、httpservletresponse応答) } public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {request.setcharacterencoding( "utf-8"); //応答コンテンツタイプを設定します//アプリケーションコンテキストリスト<String>オンライン=(List <String>)getServletContext()。 Response.setContentType( "text/html; charset = utf-8"); printwriter out = response.getWriter(); out.println( ""); out.println( "<title> user list </title>"); out.println( ""); out.println( ""); out.print( "<h3>オンラインユーザーリスト</h3>"); int size =オンライン== null? 0:online.size(); for(int i = 0; i <size; i ++){if(i> 0){out.println( "<br>"); } out.println(i + 1 + "。" + online.get(i)); } out.println( "<hr> <a href = '/' index.html/''> home </a>"); out.println( ""); out.println( ""); out.flush(); out.close(); }}(2)web.xmlコード
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/nns/javaee xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/ns/javaee/web-app_0.0.0.xsd" "id" "id" id "id" webaee/wweb-app_0.xsdd <display-name> testServlet </display-name> <リスナー> <リスナークラス> com.smalle.linlineListener </ristener-class> </ristener> <servlet> <servlet> <servlet> loginservlet </servet-name> <servlet-class> com.smalle.listener.listener.loginervlet> <Servlet-Name> loginServlet </servlet-name> <url-pattern>/loginlistener </url-pattern> </servlet-mapping> <servlet-name> logoutservlet </servlet-name> <servlet-class> com.smalle.listener.logoutservlet <Servlet-Name> logoutServlet </servlet-name> <url-pattern>/logoutlistener </url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
(3)プレゼンテーションレイヤーコード
<!doctype html> <html> <head> <title> index.html </title> <meta name = "content-type" content = "text/html; charset = utf-8"> </head> <body> value = "login"> <br> <br> </form> </body> </html>
Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Java Networkプログラミングスキルの要約」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、「Java Operation Dom Nodeスキルの概要」、「Javaファイルの要約と監督操作スキル」、Java Cache操作スキルの概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。