监听的作用
监听一些对象、启动销毁、属性的改变等
如何创建以及销毁监听器
接口ServletContextListener
contextInitialized、contextDestroyed
创建监听器
1、新建一个MyServlet类,继承ServletContextListener
2、重写contextInitialized()和contextDestroyed()方法
package jndi;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServlet implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("context init");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("context destroy");
}
}
此时启动servlet,发现报错ame [jy17] is not bound in this Context. Unable to find [jy17].
原因:没有配置
可以在web.xml文件里配置,包名.类名
<listener>
<listener-class>jndi.MyServlet</listener-class>
</listener>
控制台会输出你在方法里写的代码
监听会话
1、创建一个类MySession,继承HttpSessionListener
2、创建sessionCreated()、sessionDestroyed()方法
3、配置文件,可以直接在本页面添加注释配置
@WebListener
导入这个包javax.servlet.annotation.WebListener;
package jndi;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener()
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session create");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session destory");
}
}
4、去创建一个会话request.getSession().setAttribute("xxx", "xxx");
5、重启服务器,浏览器访问会话
6、设置会话访问时间
HttpSession session=request.getSession(true);
session.setMaxInactiveInterval(100);