每当我在Servlet上收到请求时如何执行Listener类 [英] How execute Listener class every time i receive requests on my servlet

查看:48
本文介绍了每当我在Servlet上收到请求时如何执行Listener类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的servlet上接收请求时,我想执行一个与之相关并包含一些指令的侦听器类.

When receiving requests on my servlet, i would like execute one listener class which is related with, and which contains some instructions.

因此,我在myListener上实现了ServletContextListener接口,如下所示:

So i implement on myListener the interface ServletContextListener, like this:

public class MyContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("Context Created");
    }

}

在我的web.xml上:

On my web.xml :

  <servlet>
    <servlet-name>StartUp</servlet-name>
    <servlet-class>com.servlets.StartUp</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>StartUp</servlet-name>
    <url-pattern>/StartUp</url-pattern>
  </servlet-mapping>

  <listener>
    <listener-class>com.servlets.MyContextListener</listener-class>
  </listener>

当在StartUp servlet上接收请求时,如何执行侦听器?

So how can i execute my listener, when receiving requests on my StartUp servlet ?

推荐答案

The ServletContextListener is designed to listen on initialization and destroy of ServletContext. In other words, it's only invoked on webapp's startup and shutdown respectively.

您需要一个 ServletRequestListener 代替:

You need a ServletRequestListener instead:

@WebListener
public class MyRequestListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent event) {
        System.out.println("Request initialized");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent event) {
        System.out.println("Request destroyed");
    }

}

或者,也许只是一个简单的 servlet过滤器.区别在于您可以将其配置为侦听特定的URL模式或特定的servlet,甚至侦听特定转发,包含和/或错误的请求.

Or, perhaps just a simple servlet filter. The difference is that you can configure it to listen on specific URL patterns or specific servlets and even specifically forwarded, included and/or error'ed requests.

@WebFilter("/StartUp") // or @WebFilter(servletNames={"StartUp"})
public class StartUpServletFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        System.out.println("Before StartUp servlet is invoked");
        chain.doFilter(req, res);
        System.out.println("After StartUp servlet is invoked");
    }

    // Don't forget the init() and destroy() boilerplate.

}

这篇关于每当我在Servlet上收到请求时如何执行Listener类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆