侦听器、过滤器和 Servlet 的程序化配置
了解 Servlet 3.0 规范中引入的配置方法(addListener、addFilter 和 addServlet)。 这些方法是 ServletContext 接口的一部分,可以从 ServletContainerInitializer 或 ServletContextListener 调用这些方法。
详细描述了配置方法 addListener、addFilter 和 addServlet。 如果 ServletContext侦听器未在 web.xml 文件或 web-fragment.xml file中声明,或者未使用 @WebListener进行注释,那么 ServletContext侦听器无法以编程方式配置 Servlet ,过滤器或侦听器。 因此,为执行此类程序配置而对 ServletContext 进行的任何调用都会导致 UnsupportedOperationException。
addListener
在 WebSphere® Application Server V 9.0中不推荐使用 addGlobal侦听器方法。 此方法会替换为 addListener 方法。
- 使用以下方法以将侦听器添加到此 servlet 上下文:
void addListener(java.lang.String className)
- 使用以下方法以将侦听器添加到此 servlet 上下文:
<T extends java.util.EventListener> void addListener(T t)
- 使用以下方法以将侦听器添加到此 servlet 上下文:
void addListener(java.lang.Class<? extends java.util.EventListener> listenerClass)
侦听器类必须实现以下一个或多个接口:
- ServletContextAttributeListener
- ServletRequestListener
- ServletRequestAttributeListener
- HttpSessionListener
- HttpSessionAttributeListener
- javax.servlet.http.HttpSessionIdListener
- javax.servlet.ServletContextListener注: 只能从 javax.servlet.ServletContainerInitializer的 onStartUp 方法添加 javax.servlet.ServletContextListener 。
addFilter
在 WebSphere Application Server V 9.0中不推荐使用 addMapping过滤器方法。 此方法会替换为 addFilter 方法。 此方法会将具有给定名称、描述和类名的过滤器添加到 Web 应用程序上下文。 可以使用返回的 FilterRegistration 对象对注册过滤器进行进一步配置。
- 使用以下方法以将过滤器添加到此 servlet 上下文:
addFilter(java.lang.String filterName, java.lang.Class<? extends Filter> filterClass)
- 使用以下方法以将过滤器添加到此 servlet 上下文:
addFilter(java.lang.String filterName, Filter filter)
- 使用以下方法以将过滤器添加到此 servlet 上下文:
addFilter(java.lang.String filterName, java.lang.String className)
addServlet
addServlet 方法会将 servlet 动态添加到 servletContext。 这些方法会将具有给定参数的 servlet 添加到 Web 应用程序上下文。 可以使用返回的 ServletRegistration 对象对注册的 servlet 进行进一步配置。
- 使用以下方法以将 servlet 添加到此 servlet 上下文:
addServlet(java.lang.String servletName, java.lang.Class<? extends Servlet> servletClass)
- 使用以下方法以将 servlet 添加到此 servlet 上下文:
addServlet(java.lang.String servletName, Servlet servlet)
- 使用以下方法以将 servlet 添加到此 servlet 上下文:
addServlet(java.lang.String servletName, java.lang.String className)
ServletContainerInitializer
为共享库配置 JAR 文件且在 JAR 中发现 ServletContainerInitializer 时,会为与共享库关联的每个应用程序调用 ServletContainerInitializer。
Servlet 3.0 中不推荐的类
com.ibm.websphere.servlet.context.IBMServletContext 中不推荐以下类:
- public void addDynamicServlet(String servletName, String servletClass, String mappingURI, Properties initParameters) throws ServletException, java.lang.SecurityException;
- public void removeDynamicServlet(String servletName) throws java.lang.SecurityException