gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:07 24 4
gpt4 key购买 nike

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

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

提前致谢

最佳答案

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

但是这只能从 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.

关于java - 如何以编程方式为 Servlet 添加监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32887285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com