您的位置:首页 > 其它

监听器--监听session创建后计数(servletContext)

2017-05-25 15:38 375 查看
这个servlet用于预置参数

package web;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
//初始化全局变量
public class InitServlet extends HttpServlet {

@Override
public void init() throws ServletException {
ServletContext context = getServletContext();
context.setAttribute("count", 0);
}

}


这个servlet用于创建session

package web;

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;

public class TestServlet extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//发送请求创建自动request,启动request监听器
HttpSession session = req.getSession();//创建session
}

}
这个servlet用于销毁session

package web;

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;

public class LogoutServlet extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//销毁session
HttpSession session = req.getSession();
session.invalidate();
System.out.println("销毁了session ID为:"+session.getId());
}

}
监听器如下:监听session

package web;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class CountListener implements HttpSessionListener{

private int count;
public void sessionCreated(HttpSessionEvent se) {
System.out.println("监听创建session");
HttpSession session = se.getSession();
ServletContext sct = session.getServletContext();
count = (Integer)(sct.getAttribute("count"));
sct.setAttribute("count", ++count);
System.out.println("当前人数:"+count);
}

public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("监听销毁session");
HttpSession session = se.getSession();
ServletContext sct = session.getServletContext();
count = (Integer)sct.getAttribute("count");
if(count > 0){
sct.setAttribute("count", --count);
}
System.out.println("当前人数:"+count);
}

}
配置文件:

<?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" version="2.5">
<display-name>jsp6</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>

<!-- 监听器 -->
<listener>
<listener-class>web.CountListener</listener-class>
</listener>

<!-- 将全局参数在InitServlet中初始化,方便其他调用和修改 -->
<servlet>
<servlet-name>init</servlet-name>
<servlet-class>web.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>test</servlet-name>
<servlet-class>web.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>web.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
</web-app>


测试结果:(l两个不同的浏览器访问--创建2个session和销毁2个session)

请求路径:http://localhost:8080/jsp6/test      http://localhost:8080/jsp6/test     http://localhost:8080/jsp6/logout    http://localhost:8080/jsp6/logout

输出:

监听创建session

当前人数:1

监听创建session

当前人数:2

监听销毁session

当前人数:1

销毁了session ID为:703E789A938E1029007DCE9C4C3BB67E

监听销毁session

当前人数:0

销毁了session ID为:AB27D24FB29EE71825E4E44A430708A1

注意事项:servletContext可以用于读取常量(web.xml)  getInitParameter() 方法

若要读取变变量,则声明一个InitServlet,在init()方法中初始化servletContext中的参数

public void init() throws ServletException {
ServletContext context = getServletContext();
context.setAttribute("count", 0);

}

此时其他servlet可以使用setAttribute()和getAttribute()对该变量进行读取可修改读取变量和常量的方式不能混用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: