Listener作业

用监听器实现一个统计网站在线人数的功能。
提示:创建一个监听器类,通过ServletContextListener监听,当容器启动时,在ServletContext中添加一个List,用来准备存放在线的用户名;
然后,可以通过HttpSessionAttributeListener监听,当用户登录成功把用户名设置到Session中时同时将用户名存放到ServletContext中的List列表中;
最后通过HttpSessionListener监听,当会话注销时将用户名从应用上下文范围的List列表中删除。

login.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta  charset="utf-8">
<title>欢迎来到此页面</title>
</head>
<body>
<form action="ListenerUser" method="post">
           用户名:<input type="text"  name="name"/><br/>
    <input type="submit" value="登录" />
</form>
</body>

ListenerUser.java
package listener;

import java.awt.Event;
import java.util.ArrayList;
import java.util.List;

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

@WebListener
public class ListenerUser implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener{

	private ServletContext sc=null;
	
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
	}
	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		List<String> list=new ArrayList<String>();
		sc=sce.getServletContext();
		sc.setAttribute("online", list);
		System.out.println("容器已启动~~~");
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent e) {
		List<String> number=(List<String>) sc.getAttribute("online");
		if("name".equals(e.getName())){
			number.add((String) e.getValue());
		}
		sc.setAttribute("online", number);
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {	
	}
	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {	
	}
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {		
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		 List<String> num=(List<String>)sc.getAttribute("online");
	     String username=(String) event.getSession().getAttribute("name");
	     num.remove(username);  
	     sc.setAttribute("online", num);
	}

}

ServletUser.java


package listener;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.xml.internal.ws.Closeable;public class ServletUser extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("utf-8");String name=req.getParameter("name");if(name != null){req.getSession().setAttribute("name", name);}List<String> online=(List<String>) getServletContext().getAttribute("online");resp.setContentType("text/html;charset=utf-8"); PrintWriter pw=resp.getWriter();pw.println("<title>用户列表</title>"); pw.println(" "); pw.println("当前用户是:" + name); int size = online == null ? 0 : online.size(); for (int i = 0; i < size; i++) { if(i > 0){ pw.println("<br>"); } pw.println(i + 1 + "." + online.get(i)); } pw.println("<a href=\""+resp.encodeURL("ListenerDelete")+"\">注销</a><br/>");pw.flush();pw.close();}}

ServletDelete.java
package listener;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDelete extends HttpServlet{
    @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
		   throws ServletException, IOException {
     }

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		req.getSession().invalidate();
		List<String> online=(List<String>) getServletContext().getAttribute("online");
		PrintWriter pw=resp.getWriter();
		resp.setContentType("text/html;charset=utf-8"); 
		pw.println("<h2>当前用户</h2>");
	    int size = online == null ? 0 : online.size();  
	    for (int i = 0; i < size; i++) {  
	       if(i > 0){  
	           pw.println("<br>");  
	       }  
	           pw.println(i + 1 + "." + online.get(i));  
	    }     
	    pw.println("<a href='\'login.jsp\''>返回登录</a>");
		pw.flush();
		pw.close();
	}
}
web.xml
<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Test-F_L</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
     <filter-name>FilterLog</filter-name>
     <filter-class>filter.Filter_log</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>FilterLog</filter-name>
      <url-pattern>/log/*</url-pattern>
  </filter-mapping>
 
  <servlet>
       <servlet-name>ListenerU</servlet-name>
       <servlet-class>listener.ServletUser</servlet-class>
  </servlet>
  <servlet-mapping>
       <servlet-name>ListenerU</servlet-name>
       <url-pattern>/user/ListenerUser</url-pattern>
  </servlet-mapping>
  
  <servlet>
       <servlet-name>ListenerD</servlet-name>
       <servlet-class>listener.ServletDelete</servlet-class>
  </servlet>
  <servlet-mapping>
       <servlet-name>ListenerD</servlet-name>
       <url-pattern>/user/ListenerDelete</url-pattern>
  </servlet-mapping>
  
</web-app>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值