域对象监听器(request、session、application)

域对象监听器是用来监听request、session、application域对象自身的创建和销毁的事件监听器;

域对象的创建和销毁时机:

域对象

创建时机

销毁时机

ServletContext

Web服务器启动时为每个web应用程序创建相应的ServletContext对象。

Web服务器关闭时为每个web应用程序销毁相应的ServletContext对象。

HttpSession

浏览器开始与服务器会话时创建

调用HttpSession.invalidate();超过了session的最大有效时间间隔;服务器进程被停止。

ServletRequest

每次请求开始时创建

每次访问结束后销毁

ServletContextListener 接口

ServletContextListener 是用来监听ServletContent对象(即Application对象)的创建和销毁;

  • ServletContext对象被创建后调用contextInitialized(ServletContextEvent sce)方法。
  • ServletContext对象被销毁前调用contextDestroyed(ServletContextEvent sce)方法。
  • ServletContextEvent类中可以通过getServletContext()获取ServletContext
  • ServletContextListener实现类代码变化,则重新加载销毁
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ApplicationListener implements ServletContextListener {

	//Application对象销毁时执行
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("Application contextDestroyed");

	}

	//Application对象创建时执行
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("Application contextInitialized");

	}

}

创建ApplicationListener对象实现ServletContextListener接口;其中的两个方法是分别在Application对象(例子中是ApplicationListener对象)销毁和创建时执行,这里我们仅写入输出语句,我们会发现,对象创建的输出语句会在项目发布时执行,而对象销毁的输出语句会在项目正常停止(右键选中stop停止)时执行。

执行该方法需要在web.xml中配制一下<listener>属性:

  <listener>
	<listener-class>online.yangxinbiao.ApplicationListener</listener-class>
  </listener>

中间的部分是你创建对象的完整路径,直接右键对象选择 Copy Qualified Name 获取。

HttpSessionListener 接口

HttpSessionListener接口用于监听HttpSession对象的创建和销毁。

  • HttpSession对象被创建后调用sessionCreated (HttpSessionEvent sce)方法。
  • HttpSession对象被销毁前调用sessionDestroyed(HttpSessionEvent sce)方法。
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {

	//session对象创建时执行
	public void sessionCreated(HttpSessionEvent arg0) {
		System.out.println("Session sessionCreated");
	}

	session对象销毁时执行
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("Session sessionDestroyed");
	}

}

创建SessionListener对象实现HttpSessionListener接口;其中两个方法会在session对象创建和销毁时执行(建议先去了解一下session的创建和销毁时机);

配置<listener>属性:

  <listener>
  	<listener-class>online.yangxinbiao.SessionListener</listener-class>
  </listener>

ServletRequestListener 接口

ServletRequestListener接口用于监听request对象的创建和销毁。

  • public void requestInitiallized(ServletRequestEvent event):ServletRequest对象被创建后调用;
  • public void requestDestroyed(ServletRequestEvent event):ServletRequest对象被销毁前调用。
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener {

	//request对象销毁时执行
	public void requestDestroyed(ServletRequestEvent arg0) {
		System.out.println("Request requestDestroyed");

	}

	//request对象创建时执行
	public void requestInitialized(ServletRequestEvent arg0) {
		System.out.println("Request requestInitialized");

	}

}

创建RequestListener对象实现ServletRequestListener接口;其中的两个方法分别会在客户端向服务器发送请求时执行和服务器响应客户端时执行;

配置<listener>属性:

  <listener>
  	<listener-class>online.yangxinbiao.RequestListener</listener-class>
  </listener>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java Web应用程序中,使用Servlet监听器统计在线用户的示例代码: 首先,需要创建一个Servlet监听器,在该监听器中实现ServletContextListener接口,并在contextInitialized()方法中初始化application对象,如下所示: ```java public class OnlineUserListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { ServletContext context = sce.getServletContext(); List<String> onlineUsers = new ArrayList<String>(); context.setAttribute("onlineUsers", onlineUsers); } public void contextDestroyed(ServletContextEvent sce) { // do nothing } } ``` 在上面的代码中,我们实现了ServletContextListener接口,并在contextInitialized()方法中初始化了一个名为onlineUsers的List对象,并将其保存到application对象中。这个List对象将用于保存在线用户的信息。 接下来,我们可以在用户登录时,将他的用户名添加到onlineUsers列表中: ```java public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户信息 String username = request.getParameter("username"); String password = request.getParameter("password"); // 验证用户是否合法 // ... // 如果用户合法,将他的信息添加到在线用户列表中 ServletContext context = request.getServletContext(); List<String> onlineUsers = (List<String>) context.getAttribute("onlineUsers"); onlineUsers.add(username); context.setAttribute("onlineUsers", onlineUsers); // 设置Session属性 HttpSession session = request.getSession(); session.setAttribute("username", username); // 跳转到用户主页 // ... } } ``` 在上面的代码中,我们首先从ServletContext对象中获取在线用户列表,并将用户的用户名添加到列表中。最后,我们将更新后的在线用户列表保存到application对象中,并设置Session属性保存用户信息。 当用户退出时,我们可以从onlineUsers列表中删除他的用户名,如下所示: ```java public class LogoutServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取Session属性 HttpSession session = request.getSession(); String username = (String) session.getAttribute("username"); // 从在线用户列表中删除该用户 ServletContext context = request.getServletContext(); List<String> onlineUsers = (List<String>) context.getAttribute("onlineUsers"); onlineUsers.remove(username); context.setAttribute("onlineUsers", onlineUsers); // 注销Session session.invalidate(); // 跳转到登录页面 // ... } } ``` 在上面的代码中,我们首先从Session中获取当前用户的用户名,然后从ServletContext对象中获取在线用户列表,并从列表中删除该用户。最后,我们将更新后的在线用户列表保存到application对象中,并注销Session。 通过上述代码,我们可以在Java Web应用程序中使用Servlet监听器统计在线用户,并实现用户登录和退出的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值