servlet監聽器有什麼做用_樂字節java

監聽器

介紹

​ web 監聽器是Servlet 中一種的特殊的類,能幫助開發者監聽 web 中的特定事件, 好比 ServletContext,HttpSession,ServletRequest 的建立和銷燬;變量的建立、銷燬和修改等。 能夠在某些動做先後增長處理,實現監控。例如能夠用來統計在線人數等。html

實現

​ 監聽器有三類8種:java

​ ⑴ 監聽生命週期:web

​ ServletRequestListenersession

​ HttpSessionListener app

​ ServletContextListeneride

​ ⑵ 監聽值的變化:測試

​ ServletRequestAttributeListener.net

​ HttpSessionAttributeListenercode

​ ServletContextAttributeListener htm

​ ⑶ 針對 session 中的對象:

​ 監聽 session 中的 java 對象(javaBean) ,是 javaBean 直接實現監聽器 的接口。

示例

​ 作一個對在線人數的監控。

實現步驟:

​ Step1:建立一個監聽器,須要實現某種接口,根據需求選取 HttpSessionListener

​ Step2:經過@WebListener註解配置該監聽器

​ 建立一個類,並實現 HttpSessionListener 接口,用來檢測 Session 的建立和銷燬。

1.在類中定義一個成員變量用來存儲當前的 session 個數。(OnlineListener.java)

/**
 * 在線人數統計
 *  當有新的session對象被建立,則在線人數+1;
 *  有session對象被銷燬,在線人數-1;
 * @author Lisa Li
 *
 */
@WebListener
public class OnlineListener implements HttpSessionListener {

    // 默認在線人數
    private Integer onlineNumber = 0;

    /**
     * 當有新的session對象被建立,則在線人數+1;
     */
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        // 人數+1
        onlineNumber++;
        // 將人數存到session做用域中
        // se.getSession().setAttribute("onlineNumber", onlineNumber);
        // 將人數存到application做用域中
        se.getSession().getServletContext().setAttribute("onlineNumber", onlineNumber);
    }

    /**
     * 有session對象被銷燬,在線人數-1;
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // 人數-1
        onlineNumber--;
        // 將人數存到session做用域中
        // se.getSession().setAttribute("onlineNumber", onlineNumber);
        // 將人數存到application做用域中
        se.getSession().getServletContext().setAttribute("onlineNumber", onlineNumber);
    }

}

2.作一個測試的 Servlet 用來登陸,和顯示當前在線人數。(OnlineServlet.java)

/**
 * 在線人數統計
 */
public class OnlineServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 獲得參數
        String key = request.getParameter("key");

        // 判斷是否爲空 (不爲空,且值爲logout則爲退出操做)
        if (key != null && "logout".equals(key)) {
            // 傳遞了參數,表示要作用戶退出操做
            request.getSession().invalidate();
            return;
        }

        // 建立session對象
        HttpSession session = request.getSession();
        // 獲取sessio做用域中的在線人數
        Integer onlineNumber = (Integer) session.getServletContext().getAttribute("onlineNumber");                      

        // 輸出
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h2>在線人數:"+onlineNumber+"</h2><h4><a href='online?key=logout'>退出</a><h4>"); 

    }
}

image

相關文章
相關標籤/搜索