4

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

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

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 上:

  <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 上接收请求时,我该如何执行我的侦听器呢?

4

1 回答 1

5

旨在ServletContextListener侦听. ServletContext也就是说,它只在 webapp 的启动和关闭时被调用。

你需要一个ServletRequestListener

@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,甚至专门转发、包含和/或错误的请求。

@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.

}
于 2013-04-19T19:32:16.487 回答