public class OsgiDynamicServletContext extends Object implements javax.servlet.ServletContext
This class wraps OsgiServletContext and is used to perform "dynamic registration operations" of
servlets, filters and listeners into single physical ServletContext. This wrapper is passed to
ServletContainerInitializers and allows dynamic configuration. While the context that's
wrapped doesn't allow this.
Many OsgiServletContexts may point to single container-specific physical servlet context and many
ServletContainerInitializers may be used to register dynamic servlets/filters/listeners
through many OsgiServletContexts into single ServletContext. We need to keep track of the dynamic
web elements registered by multiple SCIs and actually register them later after all SCIs are invoked.
2021-07-29 update: when implementing WebSockets (having problems in Undertow), I realized it's not that easy...
org.eclipse.jetty.servlet.ServletContextHandler.Context#checkDynamic(),
Tomcat checks !context.getState().equals(LifecycleState.STARTING_PREP) and Undertow calls
io.undertow.servlet.spec.ServletContextImpl#ensureNotInitialized()WebListener and such listeners should always be able to add more
listeners. Each container has it's own way to mark the point when new listeners can't be added:ContextHandler.Context#setEnabled(false) when invoking first programmatic
listener, but new ServletContextListener can't be added if
org.eclipse.jetty.server.handler.ContextHandler.Context#_extendedListenerTypes is
falseServletContextListener, but then inside
org.apache.catalina.core.StandardContext#listenerStart(), newServletContextListenerAllowed
is set to false. Additionally all programmatic ServletContextListeners are marked as
"no pluggability listeners", so they can't add ANY new listener. ServletContextListeners added
in SCIs can add other listeners only.ServletContext.addListener(java.lang.String) only if the adding
listener is NOT programmatic. But new ServletContextListener can
never be added anyway| Modifier and Type | Field and Description |
|---|---|
static org.slf4j.Logger |
LOG |
| Constructor and Description |
|---|
OsgiDynamicServletContext(OsgiServletContext osgiContext,
DynamicRegistrations registration) |
| Modifier and Type | Method and Description |
|---|---|
javax.servlet.FilterRegistration.Dynamic |
addFilter(String filterName,
Class<? extends javax.servlet.Filter> filterClass) |
javax.servlet.FilterRegistration.Dynamic |
addFilter(String filterName,
javax.servlet.Filter filter) |
javax.servlet.FilterRegistration.Dynamic |
addFilter(String filterName,
String className) |
javax.servlet.ServletRegistration.Dynamic |
addJspFile(String servletName,
String jspFile) |
void |
addListener(Class<? extends EventListener> listenerClass) |
void |
addListener(String className) |
<T extends EventListener> |
addListener(T t) |
javax.servlet.ServletRegistration.Dynamic |
addServlet(String servletName,
Class<? extends javax.servlet.Servlet> servletClass) |
javax.servlet.ServletRegistration.Dynamic |
addServlet(String servletName,
javax.servlet.Servlet servlet) |
javax.servlet.ServletRegistration.Dynamic |
addServlet(String servletName,
String className) |
<T extends javax.servlet.Filter> |
createFilter(Class<T> clazz) |
<T extends EventListener> |
createListener(Class<T> clazz) |
<T extends javax.servlet.Servlet> |
createServlet(Class<T> clazz) |
void |
declareRoles(String... roleNames) |
Object |
getAttribute(String name) |
Enumeration<String> |
getAttributeNames() |
ClassLoader |
getClassLoader() |
javax.servlet.ServletContext |
getContainerServletContext() |
javax.servlet.ServletContext |
getContext(String uripath) |
String |
getContextPath() |
Set<javax.servlet.SessionTrackingMode> |
getDefaultSessionTrackingModes() |
int |
getEffectiveMajorVersion() |
int |
getEffectiveMinorVersion() |
Set<javax.servlet.SessionTrackingMode> |
getEffectiveSessionTrackingModes() |
javax.servlet.FilterRegistration |
getFilterRegistration(String filterName) |
Map<String,? extends javax.servlet.FilterRegistration> |
getFilterRegistrations() |
String |
getInitParameter(String name) |
Enumeration<String> |
getInitParameterNames() |
javax.servlet.descriptor.JspConfigDescriptor |
getJspConfigDescriptor() |
int |
getMajorVersion() |
String |
getMimeType(String file) |
int |
getMinorVersion() |
javax.servlet.RequestDispatcher |
getNamedDispatcher(String name) |
OsgiContextModel |
getOsgiContextModel() |
String |
getRealPath(String path) |
String |
getRequestCharacterEncoding() |
javax.servlet.RequestDispatcher |
getRequestDispatcher(String path) |
URL |
getResource(String path) |
InputStream |
getResourceAsStream(String path) |
Set<String> |
getResourcePaths(String path) |
String |
getResponseCharacterEncoding() |
String |
getServerInfo() |
javax.servlet.Servlet |
getServlet(String name) |
String |
getServletContextName() |
Enumeration<String> |
getServletNames() |
javax.servlet.ServletRegistration |
getServletRegistration(String servletName) |
Map<String,? extends javax.servlet.ServletRegistration> |
getServletRegistrations() |
Enumeration<javax.servlet.Servlet> |
getServlets() |
javax.servlet.SessionCookieConfig |
getSessionCookieConfig() |
int |
getSessionTimeout() |
String |
getVirtualServerName() |
void |
log(Exception exception,
String msg) |
void |
log(String msg) |
void |
log(String message,
Throwable throwable) |
void |
rememberAttributesFromSCIs()
This method has to be called after
SCIWrapper calls wrapped
ServletContainerInitializer, so attributes potentially added by the SCI are removed
when the context is restarted. |
void |
removeAttribute(String name) |
void |
setAttribute(String name,
Object object) |
boolean |
setInitParameter(String name,
String value) |
void |
setRequestCharacterEncoding(String encoding) |
void |
setResponseCharacterEncoding(String encoding) |
void |
setSessionTimeout(int sessionTimeout) |
void |
setSessionTrackingModes(Set<javax.servlet.SessionTrackingMode> sessionTrackingModes) |
public OsgiDynamicServletContext(OsgiServletContext osgiContext, DynamicRegistrations registration)
public void rememberAttributesFromSCIs()
SCIWrapper calls wrapped
ServletContainerInitializer, so attributes potentially added by the SCI are removed
when the context is restarted.public OsgiContextModel getOsgiContextModel()
public javax.servlet.ServletContext getContainerServletContext()
public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, String className)
addFilter in interface javax.servlet.ServletContextpublic javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, javax.servlet.Filter filter)
addFilter in interface javax.servlet.ServletContextpublic javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Class<? extends javax.servlet.Filter> filterClass)
addFilter in interface javax.servlet.ServletContextpublic void addListener(String className)
addListener in interface javax.servlet.ServletContextpublic <T extends EventListener> void addListener(T t)
addListener in interface javax.servlet.ServletContextpublic void addListener(Class<? extends EventListener> listenerClass)
addListener in interface javax.servlet.ServletContextpublic javax.servlet.ServletRegistration.Dynamic addServlet(String servletName, String className)
addServlet in interface javax.servlet.ServletContextpublic javax.servlet.ServletRegistration.Dynamic addServlet(String servletName, javax.servlet.Servlet servlet)
addServlet in interface javax.servlet.ServletContextpublic javax.servlet.ServletRegistration.Dynamic addServlet(String servletName, Class<? extends javax.servlet.Servlet> servletClass)
addServlet in interface javax.servlet.ServletContextpublic <T extends javax.servlet.Filter> T createFilter(Class<T> clazz) throws javax.servlet.ServletException
createFilter in interface javax.servlet.ServletContextjavax.servlet.ServletExceptionpublic <T extends EventListener> T createListener(Class<T> clazz) throws javax.servlet.ServletException
createListener in interface javax.servlet.ServletContextjavax.servlet.ServletExceptionpublic <T extends javax.servlet.Servlet> T createServlet(Class<T> clazz) throws javax.servlet.ServletException
createServlet in interface javax.servlet.ServletContextjavax.servlet.ServletExceptionpublic void declareRoles(String... roleNames)
declareRoles in interface javax.servlet.ServletContextpublic boolean setInitParameter(String name, String value)
setInitParameter in interface javax.servlet.ServletContextpublic void setSessionTrackingModes(Set<javax.servlet.SessionTrackingMode> sessionTrackingModes)
setSessionTrackingModes in interface javax.servlet.ServletContextpublic javax.servlet.ServletRegistration.Dynamic addJspFile(String servletName, String jspFile)
addJspFile in interface javax.servlet.ServletContextpublic Object getAttribute(String name)
getAttribute in interface javax.servlet.ServletContextpublic Enumeration<String> getAttributeNames()
getAttributeNames in interface javax.servlet.ServletContextpublic void setAttribute(String name, Object object)
setAttribute in interface javax.servlet.ServletContextpublic void removeAttribute(String name)
removeAttribute in interface javax.servlet.ServletContextpublic String getContextPath()
getContextPath in interface javax.servlet.ServletContextpublic javax.servlet.ServletContext getContext(String uripath)
getContext in interface javax.servlet.ServletContextpublic Set<javax.servlet.SessionTrackingMode> getDefaultSessionTrackingModes()
getDefaultSessionTrackingModes in interface javax.servlet.ServletContextpublic int getEffectiveMajorVersion()
getEffectiveMajorVersion in interface javax.servlet.ServletContextpublic int getEffectiveMinorVersion()
getEffectiveMinorVersion in interface javax.servlet.ServletContextpublic Set<javax.servlet.SessionTrackingMode> getEffectiveSessionTrackingModes()
getEffectiveSessionTrackingModes in interface javax.servlet.ServletContextpublic javax.servlet.FilterRegistration getFilterRegistration(String filterName)
getFilterRegistration in interface javax.servlet.ServletContextpublic Map<String,? extends javax.servlet.FilterRegistration> getFilterRegistrations()
getFilterRegistrations in interface javax.servlet.ServletContextpublic int getMajorVersion()
getMajorVersion in interface javax.servlet.ServletContextpublic int getMinorVersion()
getMinorVersion in interface javax.servlet.ServletContextpublic javax.servlet.Servlet getServlet(String name) throws javax.servlet.ServletException
getServlet in interface javax.servlet.ServletContextjavax.servlet.ServletExceptionpublic Enumeration<String> getServletNames()
getServletNames in interface javax.servlet.ServletContextpublic javax.servlet.ServletRegistration getServletRegistration(String servletName)
getServletRegistration in interface javax.servlet.ServletContextpublic Map<String,? extends javax.servlet.ServletRegistration> getServletRegistrations()
getServletRegistrations in interface javax.servlet.ServletContextpublic Enumeration<javax.servlet.Servlet> getServlets()
getServlets in interface javax.servlet.ServletContextpublic String getVirtualServerName()
getVirtualServerName in interface javax.servlet.ServletContextpublic String getServerInfo()
getServerInfo in interface javax.servlet.ServletContextpublic void log(String msg)
log in interface javax.servlet.ServletContextpublic void log(Exception exception, String msg)
log in interface javax.servlet.ServletContextpublic void log(String message, Throwable throwable)
log in interface javax.servlet.ServletContextpublic javax.servlet.SessionCookieConfig getSessionCookieConfig()
getSessionCookieConfig in interface javax.servlet.ServletContextpublic javax.servlet.descriptor.JspConfigDescriptor getJspConfigDescriptor()
getJspConfigDescriptor in interface javax.servlet.ServletContextpublic int getSessionTimeout()
getSessionTimeout in interface javax.servlet.ServletContextpublic void setSessionTimeout(int sessionTimeout)
setSessionTimeout in interface javax.servlet.ServletContextpublic String getRequestCharacterEncoding()
getRequestCharacterEncoding in interface javax.servlet.ServletContextpublic void setRequestCharacterEncoding(String encoding)
setRequestCharacterEncoding in interface javax.servlet.ServletContextpublic String getResponseCharacterEncoding()
getResponseCharacterEncoding in interface javax.servlet.ServletContextpublic void setResponseCharacterEncoding(String encoding)
setResponseCharacterEncoding in interface javax.servlet.ServletContextpublic String getMimeType(String file)
getMimeType in interface javax.servlet.ServletContextpublic String getRealPath(String path)
getRealPath in interface javax.servlet.ServletContextpublic URL getResource(String path) throws MalformedURLException
getResource in interface javax.servlet.ServletContextMalformedURLExceptionpublic InputStream getResourceAsStream(String path)
getResourceAsStream in interface javax.servlet.ServletContextpublic Set<String> getResourcePaths(String path)
getResourcePaths in interface javax.servlet.ServletContextpublic String getInitParameter(String name)
getInitParameter in interface javax.servlet.ServletContextpublic Enumeration<String> getInitParameterNames()
getInitParameterNames in interface javax.servlet.ServletContextpublic javax.servlet.RequestDispatcher getRequestDispatcher(String path)
getRequestDispatcher in interface javax.servlet.ServletContextpublic javax.servlet.RequestDispatcher getNamedDispatcher(String name)
getNamedDispatcher in interface javax.servlet.ServletContextpublic String getServletContextName()
getServletContextName in interface javax.servlet.ServletContextpublic ClassLoader getClassLoader()
getClassLoader in interface javax.servlet.ServletContextCopyright © 2006–2024 OPS4J - Open Participation Software for Java. All rights reserved.