统计访问本网站的ip 、时间、 设备型号
(ctrl+i快速生成监听器方法)
<% getServletConfig().getServletContext().setAttribute("ip",request.getRemoteAddr());//设置ip放入application中 application.setAttribute("time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); application.setAttribute("form",request.getHeader("User-Agent"));//取得访问设备信息 %>
public class Count implements HttpSessionListener, HttpSessionAttributeListener {
public void sessionCreated(HttpSessionEvent se) { ServletContext ctx=se.getSession().getServletContext();//相当于application System.out.println("有人上线访问:"+ctx.getAttribute("ip")+""+ctx.getAttribute("time")); System.out.println(ctx.getAttribute("form")); System.out.println("--------------------------------------------------"); count++; }}
计时任务实现
//计时监听器,定时执行任务 @WebListener public class MyTime implements ServletContextListener { private Timer timer=null; @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("s---------------s"); timer = new Timer(true); System.out.println("计时器启动"); sce.getServletContext().log("定时器启动"); timer.schedule(new TimerTask() { @Override public void run() { System.out.printf("%tF %<tT",System.currentTimeMillis()); } },1000,5000); } @Override public void contextDestroyed(ServletContextEvent sce) { timer.cancel(); sce.getServletContext().log("销毁"); } }
Servlet Listener 监听器
三个域对象:request session servletContext
Servlet 与application
相同的是都是保存容器的全局信息、在jsp中application==getServletcontext,可以相互读取。Application是servletcontext在jsp应用的封装。
不同点:application只能在jsp页面中使用。