Servlet+jsp中的過濾器,監聽器等獲取登入名+在線人數計數

監聽聽器概念

監聽對象:作用域對象servletContext,servletSeesion,servletRequest、
Application
Session
Request
監聽內容
對象的創建,銷燬,屬性改變事件。
監聽作用:
在事件發生之前,之後進行一些處理。比如統計在線人數。Session的客戶的登入退出。

使用:
監聽request
監聽session
監聽application

部署:創建一個實現servletRequestListener接口的實現類。
Web.xml部署該監聽request的實現類。
實現類路徑名提示tomcat創建request時調用該監聽器類。
有初始方法:servletRequestEvent sre。通過sre方法調用獲取被創建的request對象。
獲取監聽對象作用域的值:

  1. Sre.GetName();
  2. Sre.Getvalue();
  3. Application的不同
    Src.getServletContext();

監聽事件:接口可以多實現。

  1. servletRequestListener監聽request對象的創建和銷燬

  2. servletRequestAttributeListener:監聽域對象數值的修改,添加,移除。變更

  3. HttpSessionListener:監聽session的創建和銷燬。接口有兩個方法。

  4. HttpSessionAttributeListener;監聽session的數據變更;

  5. ServletContextListener:監聽appliation的創建和銷燬;

  6. ServletContextAttributeListener:監聽對象的數據的變更;

項目實踐:提要獲取servletContext對象的方法3種

  1. This.getServleContext();
  2. getSession().getServleContext();
  3. servletConfig. getServleContext();

統計在線人數;不同用戶都能訪問到的數據存儲在application中。

封裝用戶登入數據與實體類對象–實體類user

package com.entry;

public class user {
	private String name;
	private String password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "user [name=" + name + ", password=" + password + "]";
	}
}

servlet處理

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.entry.user;

public class test_count extends HttpServlet {
	//這屬於登入數據的提取--登入人數的封裝在線
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	        //獲取表單提交參數
		    String name = request.getParameter("name");
	        String password = request.getParameter("password");
	        //參數注入實體類中
	        user u = new user();
	        u.setName(name);
	        u.setPassword(password);
	        //即是創建又是獲取
	       HttpSession session = request.getSession();
	       //存儲
	       System.out.println("test_count.doGet()"+u);
	       System.out.println("test_count.doGet()中的session被實現了。。。");
	       System.out.println("test_count.doGet()"+session.getId());
	        session.setAttribute("user", u);
	        //重定向
	        response.sendRedirect("index02.jsp");
	}

}

監聽器-listener

建立一個普通類繼承兩個接口,實現事件的監聽。
下面可以看出兩個接口實現的方法其實差不多(一個初始化(創建),一個銷燬)–當相應作用作用域被創建或被銷燬時就會執行相應方法中的內容。如果有不懂得術語可以看上面的理論加以理解。

package com.listener;

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

public class test_listener implements HttpSessionListener,ServletContextListener{

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		ServletContext context = sce.getServletContext();
		context.setAttribute("count", 0);
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		ServletContext context = se.getSession().getServletContext();
		int count = (int) context.getAttribute("count");
		context.setAttribute("count", ++count);
		System.out.println("session被創建了");
		System.out.println("test_listener.sessionDestroyed()"+se.getSession().getId());
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		ServletContext context = se.getSession().getServletContext();
		int count = (int) context.getAttribute("count");
		context.setAttribute("count", --count);
		System.out.println("session被創建了");
		
	}

}

過濾器–創建一個普通類實現Filter實現其接口內方法。

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class test_filter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

注意配置文件內web.xml中的過濾器,監聽器,servlet等相關配置。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

      <display-name>servlet_listener1</display-name>
      
      <servlet>
      <servlet-name>test_count</servlet-name>
      <servlet-class>com.servlet.test_count</servlet-class>
      </servlet> 
      <servlet-mapping>
        <servlet-name>test_count</servlet-name>
        <url-pattern>/test_count</url-pattern>
      </servlet-mapping>
      <filter>
         <filter-name>test_filter</filter-name>
         <filter-class>com.filter.test_filter</filter-class>
      </filter>
      <filter-mapping>
         <filter-name>test_filter</filter-name>
         <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <listener>
          <listener-class>com.listener.test_listener</listener-class>
      </listener>
      
    </web-app>

效果就是:

session被創建了
test_listener.sessionDestroyed()2C8C413853BFDE2422175C2317C58055
test_count.doGet()user [name=某某, password=123]
test_count.doGet()中的session被實現了。。。
test_count.doGet()2C8C413853BFDE2422175C2317C58055

網頁效果

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章