如何以编程方式为Servlet添加监听器?

时间:2015-10-01 12:10:15

标签: java servlets servlet-3.0

在Servlet 3.0中,有一种方法可以在ServletContextListener的contextInitialized()方法中以编程方式添加监听器。 Servlet和过滤器可以编程方式添加如下(如果我错了,请更正以下代码

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()方法完成的。所以,如果我必须以编程方式实例化它,我应该在哪里声明它?

先谢谢

1 个答案:

答案 0 :(得分:0)

您可以通过调用ServletContextListener,自Servlet 3.0以编程方式添加ServletContext.addListener(Class<? extends EventListener>)

但是,这只能在调用任何ServletContainerInitializer.onStartup之前运行的ServletContextListeners进行。

ServletContext.addListener(Class<? extends EventListener>)的Javadoc读取:

  

将此给定类类型的侦听器添加到此ServletContext   给定的listenerClass必须实现以下一个或多个   接口:

ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionAttributeListener
HttpSessionIdListener
HttpSessionListener 
     

如果传递此ServletContext   ServletContainerInitializer.onStartup(...),然后给定的listenerClass也可以   除了列出的接口之外,还要实现ServletContextListener   上方。