每当我在Servlet上收到请求时如何执行Listener类 [英] How execute Listener class every time i receive requests on my servlet
问题描述
在我的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屋!