如果在 web.xml 文件或 web-fragment.xml 文件中未声明 ServletContextListener,或未使用 @WebListener 来对 ServletContextListener 进行注解,那么 Servlet 3.1 规范中规定不允许 ServletContextListener 接口的实现者以编程方式配置 servlet、过滤器或侦听器。因此,如果 ServletContext 接口的任何调用执行了此类编程配置,那么将会生成 UnsupportedOperationException。此规则将标记以下类:实现 javax.servlet.ServletContextListener 接口,且既未使用 @WebListener 进行注解也未在 web.xml 文件或 web-fragment.xml 文件中定义为侦听器类。
以下方法可抛出 UnsupportedOperationException:
- addFilter(String,Class)
- addFilter(String,Filter)
- addFilter(String,String)
- addListener(Class)
- addListener(String)
- addListener(T)
- addServlet(String,Class)
- addServlet(String,Servlet)
- addServlet(String,String)
- createFilter(Class)
- createListener(class)
- createServlet(Class)
- declareRoles(String.....)
- getClassLoader()
- getDefaultSessionTrackingModes()
- getEffectiveSessionTrackingModes()
- getEffectiveMinorVersion()
- getEffectiveMajorVersion()
- getFilterRegistrations()
- getFilterRegistration(String)
- getJSPConfigDescriptor()
- getServletRegistration(String)
- getServletRegistrations()
- getSessionCookieConfig()
- getVirualServerName()
- setInitParameter()
- setSessionTrackingModes(Set<SessionTrackingMode>)
有关这些方法的更多信息,请参阅
Interface ServletContext。
有关 Servlet 3.1 行为更改的更多信息,请参阅以下资源:Servlet 3.1 behavior changes。