如何以编程方式为 Servlet 添加监听器?
How to add a Listener programatically for Servlets?
在 Servlet 3.0 中,有一种方法可以在 ServletContextListener 的 contextInitialized() 方法中以编程方式添加侦听器。 Servlets 和 Filters 可以通过编程方式添加如下(如果我错了请更正下面的代码)
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
// Register Servlet
ServletRegistration sr = sc.addServlet("DynamicServlet",
"com.sample.DynamicServlet");
sr.setInitParameter("servletInitName", "servletInitValue");
sr.addMapping("/dynamic");
// Register Filter
FilterRegistration fr = sc.addFilter("DynamicFilter","com.sample.TestFilter");
fr.setInitParameter("filterInitName", "filterInitValue");
fr.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST),
true, "DynamicServlet");
}
同样,我希望是否有人可以分享一个以编程方式添加监听器的示例,因为我不知道该怎么做。
是否可以通过编程方式添加 ServletContextListener
本身?如果是,那么我应该在哪里添加它?由于所有 Servlet、Listeners、Filter 及其实例化都是从 contextInitialized()
方法完成的。所以如果我必须以编程方式实例化它,我应该在哪里声明它?
提前致谢
从 Servlet 3.0 开始,您可以通过调用 ServletContext.addListener(Class<? extends EventListener>)
.
以编程方式添加 ServletContextListener
然而,这只能从 ServletContainerInitializer.onStartup
完成,即 运行 在任何 ServletContextListeners
被调用之前。
ServletContext.addListener(Class<? extends EventListener>)
的 Javadoc 内容如下:
Adds a listener of the given class type to this ServletContext.
The given listenerClass must implement one or more of the following
interfaces:
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionAttributeListener
HttpSessionIdListener
HttpSessionListener
If this ServletContext was passed to
ServletContainerInitializer.onStartup(...)
, then the given listenerClass may also
implement ServletContextListener
, in addition to the interfaces listed
above.
在 Servlet 3.0 中,有一种方法可以在 ServletContextListener 的 contextInitialized() 方法中以编程方式添加侦听器。 Servlets 和 Filters 可以通过编程方式添加如下(如果我错了请更正下面的代码)
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
// Register Servlet
ServletRegistration sr = sc.addServlet("DynamicServlet",
"com.sample.DynamicServlet");
sr.setInitParameter("servletInitName", "servletInitValue");
sr.addMapping("/dynamic");
// Register Filter
FilterRegistration fr = sc.addFilter("DynamicFilter","com.sample.TestFilter");
fr.setInitParameter("filterInitName", "filterInitValue");
fr.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST),
true, "DynamicServlet");
}
同样,我希望是否有人可以分享一个以编程方式添加监听器的示例,因为我不知道该怎么做。
是否可以通过编程方式添加 ServletContextListener
本身?如果是,那么我应该在哪里添加它?由于所有 Servlet、Listeners、Filter 及其实例化都是从 contextInitialized()
方法完成的。所以如果我必须以编程方式实例化它,我应该在哪里声明它?
提前致谢
从 Servlet 3.0 开始,您可以通过调用 ServletContext.addListener(Class<? extends EventListener>)
.
ServletContextListener
然而,这只能从 ServletContainerInitializer.onStartup
完成,即 运行 在任何 ServletContextListeners
被调用之前。
ServletContext.addListener(Class<? extends EventListener>)
的 Javadoc 内容如下:
Adds a listener of the given class type to this ServletContext.
The given listenerClass must implement one or more of the following interfaces:ServletContextAttributeListener ServletRequestListener ServletRequestAttributeListener HttpSessionAttributeListener HttpSessionIdListener HttpSessionListener
If this ServletContext was passed to
ServletContainerInitializer.onStartup(...)
, then the given listenerClass may also implementServletContextListener
, in addition to the interfaces listed above.