天天看點

JSP/Servlet執行個體篇(線上使用者清單)

前言

好多沒有寫部落格了 , 因為将要寫的東西全當成筆記記錄起來了 , 是以就沒有寫部落格 , 以後部落格會記錄一些平時遇到的問題和一些想和大家分享的技術點和技巧和話語.希望可以和大家做朋友 , 一起為自己的目标而奮鬥 , 努力 , 努力 , 努力

知識點分類

這裡涉及到的知識點并不會進行太多的介紹 , 詳情大家可以自己去看書籍或視訊學習.并且做出的Web前端界面這裡并不美化, 主要學習這種方法.
  1. Servlet監聽器
  2. Java基礎知識
  3. Servlet各種對象(對應着JSP的各種内置對象)
  4. JSP的屬性範圍(了解即可)

成功圖

JSP/Servlet執行個體篇(線上使用者清單)

代碼

Servlet監聽器

  • 路徑:src目錄下的 com.ghoset.listener.OnlineUserList
package com.ghoset.listener;

import java.util.Set;
import java.util.TreeSet;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * Servlet監聽器執行個體
 * @author Ghoset
 *
 */
public class OnlineUserList implements HttpSessionAttributeListener , HttpSessionListener , ServletContextListener {

    private ServletContext app = null;      //application對象


    /**
     * 初始化操作
     * 建立一個set集合
     */
    //初始化時建立一個執行個體對象 , 用來存儲使用者資訊
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        this.app = arg0.getServletContext();
        this.app.setAttribute("online" , new TreeSet() );
    }

    /**
     * Session失效了
     * 删除這個session中的使用者資訊
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        Set all = (Set )this.app.getAttribute("online" );
        all.remove(arg0.getSession().getAttribute("userName" ) );//擷取這個session中的使用者資訊 
        this.app.setAttribute("online" , all );
    }

    /**
     * 使用者登陸了
     * 往集合中添加一個使用者資訊
     */
    @Override
    public void attributeAdded(HttpSessionBindingEvent arg0) {
        Set all = (Set)this.app.getAttribute("online" );
        all.add(arg0.getValue() );
        this.app.setAttribute("online", all );
    }

    /**
     * 使用者登出了
     * 往集合中減少一個使用者資訊
     */
    @Override
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
        Set all = (Set )this.app.getAttribute("online" );
        all.remove(arg0.getValue() );   //往集合中删除這個值
        this.app.setAttribute("online" , all );
    }


    /**
     * 以下方法沒有被使用到 , 如果有要求則可以添加
     */
    @Override
    public void attributeReplaced(HttpSessionBindingEvent arg0) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }
    @Override
    public void sessionCreated(HttpSessionEvent arg0) {

    }
}
           

使用者登陸頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'login.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" >
    -->

  </head>

  <body>
    <section>
        <form method="post" action="listener/login.jsp" >
            <p>使用者名:<input type="text" name="userName" ></p>
            <p><input type="submit" value="登陸"></p>
        </form>
    </section>

    <%//驗證使用者請求資訊
        request.setCharacterEncoding("utf-8" );
        String name = request.getParameter("userName" );
        if(null != name && name.length() >  ){
            session.setAttribute(name , name );         //注意我們設定的session名字不能一樣 , 不然監聽器擷取不到建立立session
            response.sendRedirect("list.jsp" );
        } else{
            //out.println("<script>alert('使用者名輸入用誤!')</script>" );
            //response.sendRedirect("login.jsp" );
        }
     %>
  </body>
</html>
           

線上使用者清單

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.text.*" %>
<h2>線上使用者清單資訊如下</h2>
<table border="1px" >
    <tr>
        <th>使用者名稱</th>
        <th>更新時間</th>
    </tr>
<%//周遊出所有的線上使用者清單
    Set all = (Set) application.getAttribute("online" );
    Iterator iterator = all.iterator();
    while(iterator.hasNext() ){
%>
    <tr>
        <td><%=iterator.next()  %></td>
        <td><%=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss" ).format(new Date() ) %></td>
    </tr>

<%  
    }
%>

           

web.xml

<listener>
    <listener-class>com.ghoset.listener.OnlineUserList</listener-class>
  </listener>