Servlet监听器

来源:互联网 发布:好玩的c语言小程序 编辑:程序博客网 时间:2024/06/15 13:51

Servlet中定义了8个监听器接口,可以用于监听ServletContext、HttpSession和ServletRequest对象的生命周期事件,以及这些对象的属性改变事件。
这里写图片描述
这里写图片描述
注意:实现ServletContextListener、ServletContextAttributeListener、HttpSessionListener接口的类需要在web.xml中配置。

HttpSessionAttributeListener接口:用于监听Session中何时添加、删除或替换了某种类型的属性。
HttpSessionBindingListener接口:由属性自身来实现,以便属性知道它自己何时被添加到一个session中。

一、ServletContextListener接口
在Servlet上下文对象初始化时或者将要被销毁时得到通知,可以实现该接口。

public void contextInitialized(ServletContextEvent sce):该方法将在所有的过滤器和Servlet**初始化之前被调用**。
public void contextDestroyed(ServletContextEvent sce):该方法将在所有的Servlet和过滤器销毁之后被调用。

1、自定义监控类,实现ServletContextListener接口
(只要应用程序启动,就会被监控)

//实现ServletContextListener接口的监控类public class MyServletContextListener implements ServletContextListener {    //会在servlet上下文对象初始化之前被调用    public void contextInitialized(ServletContextEvent sce){        //获得一个上下文对象        ServletContext servletContext=sce.getServletContext();        String name=(String) servletContext.getInitParameter("name");        System.out.println(name);        System.out.println("初始化之前被调用");    }    public void contextDestroyed(ServletContextEvent sce){        System.out.println("销毁之后被调用");    }}

2、具体servlet实现类(用于处理请求)

public class ListenerTest extends HttpServlet {    public void init(ServletConfig config)throws ServletException{        System.out.println("servlet初始化");    }    @Override    public void destroy() {        System.out.println("servlet销毁");    }    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{    }    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{        doGet(request,response);    }}

3、web.xml中的配置

 <context-param>    <param-name>name</param-name>    <param-value>test listener</param-value>  </context-param><servlet>    <servlet-name>ListenerTest</servlet-name>    <servlet-class>org.wdz.listener.ListenerTest</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>ListenerTest</servlet-name>    <url-pattern>/test.jsp</url-pattern>  </servlet-mapping> <!--一定要配置监控类-->   <listener>    <listener-class>org.wdz.listener.MyServletContextListener</listener-class>  </listener>

4、结果:

//启动Tomcattest listener初始化之前被调用//访问:http://localhost:8080/servletTest/test.jsp//执行init()初始化方法servlet初始化//关闭Tomcat之后servlet销毁销毁之后被调用

二、HttpSessionBindingListener接口
如果一个对象实现了HttpSessionBindingListener接口,当这个对象被绑定到Session中或从Session中被删除时,Servlet容器会通知这个对象,而这个对象在接收到通知后,可以做一些初始化或清除状态的操作。

public void valueBound(HttpSessionBindingEvent event);
当对象正被绑定到Session中,Servlet容器调用这个方法来通知该对象。

public void valueUnbound(HttpSessionBindingEvent event)
当从Session中删除对象时,Servlet容器调用这个方法来通知该对象。

1、实现HttpSessionBindingListener接口的User对象

public class User implements HttpSessionBindingListener {    private String name;    private int age;    public User(String name,int age){        this.name=name;        this.age=age;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public void valueBound(HttpSessionBindingEvent event){        System.out.println("user对象绑定到session中");        //获取该session        HttpSession session=event.getSession();        //要绑定到session中属性的名字        String name=event.getName();        System.out.println("name="+name);        //要绑定到session中的属性值        User user=(User)event.getValue();        System.out.println("username="+user.getName()+"  age="+user.getAge());    }    public void valueUnbound(HttpSessionBindingEvent event){        System.out.println("user对象从session中删除");    }}

2、绑定user对象

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{        HttpSession session=request.getSession();        User user=new User("test",89);        //绑定User对象        System.out.println("绑定User对象");        session.setAttribute("user",user);        //删除User对象        System.out.println("删除User对象");        session.removeAttribute("user");    }

3、结果

绑定User对象user对象绑定到session中name=userusername=test  age=89删除User对象user对象从session中删除

三、HttpSessionListener接口
在Session对象创建后或者在Session无效前得到通知:(需要在web.xml中配置)

public class MySessionListener implements HttpSessionListener

四、ServletRequestAttributeListener接口
在Servlet请求对象中的属性发生改变时得到通知:

public class MyRequestAttributeListener implements ServletRequestAttributeListener
原创粉丝点击