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

网页效果

在这里插入图片描述
在这里插入图片描述

发布了7 篇原创文章 · 获赞 1 · 访问量 1178

猜你喜欢

转载自blog.csdn.net/kissMe3333/article/details/99105326