org.mortbay.jetty.webapp
Class WebAppContext

java.lang.Object
  extended byorg.mortbay.component.AbstractLifeCycle
      extended byorg.mortbay.jetty.handler.AbstractHandler
          extended byorg.mortbay.jetty.handler.AbstractHandlerContainer
              extended byorg.mortbay.jetty.handler.HandlerWrapper
                  extended byorg.mortbay.jetty.handler.ContextHandler
                      extended byorg.mortbay.jetty.servlet.Context
                          extended byorg.mortbay.jetty.webapp.WebAppContext
All Implemented Interfaces:
Attributes, Handler, HandlerContainer, LifeCycle

public class WebAppContext
extends Context

Web Application Context Handler. The WebAppContext handler is an extension of ContextHandler that coordinates the construction and configuration of nested handlers: SecurityHandler, SessionHandler and ServletHandler. The handlers are configured by pluggable configuration classes, with the default being WebXmlConfiguration and JettyWebXmlConfiguration.

Author:
gregw

Nested Class Summary
 class WebAppContext.WebAppErrorHandler
           
 
Nested classes inherited from class org.mortbay.jetty.handler.ContextHandler
ContextHandler.Context
 
Field Summary
static String ERROR_PAGE
           
static String WEB_DEFAULTS_XML
           
 
Fields inherited from class org.mortbay.jetty.servlet.Context
_securityHandler, _servletHandler, _sessionHandler, NO_SECURITY, NO_SESSIONS, SECURITY, SESSIONS
 
Fields inherited from class org.mortbay.jetty.handler.AbstractHandler
_string
 
Fields inherited from interface org.mortbay.jetty.Handler
ALL, DEFAULT, ERROR, FORWARD, INCLUDE, REQUEST
 
Constructor Summary
WebAppContext()
           
WebAppContext(HandlerContainer parent, String webApp, String contextPath)
           
WebAppContext(SecurityHandler securityHandler, SessionHandler sessionHandler, ServletHandler servletHandler, ErrorHandler errorHandler)
           
WebAppContext(String webApp, String contextPath)
           
 
Method Summary
 void addEventListener(EventListener listener)
          Add EventListener Conveniance method that calls setEventListeners(EventListener[])
static void addWebApplications(HandlerContainer contexts, String webapps, String defaults, boolean extract, boolean java2CompliantClassLoader)
          Add Web Applications.
static void addWebApplications(HandlerContainer contexts, String webapps, String defaults, String[] configurations, boolean extract, boolean java2CompliantClassLoader)
          Add Web Applications.
static void addWebApplications(Server server, String webapps, String defaults, boolean extract, boolean java2CompliantClassLoader)
          Add Web Applications.
static void addWebApplications(Server server, String webapps, String defaults, String[] configurations, boolean extract, boolean java2CompliantClassLoader)
          Add Web Applications.
protected  void doStart()
           
protected  void doStop()
           
 String[] getConfigurationClasses()
           
 Configuration[] getConfigurations()
           
static WebAppContext getCurrentWebAppContext()
           
 String getDefaultsDescriptor()
           
 PermissionCollection getPermissions()
           
 Resource getResource(String uriInContext)
           
 String getResourceAlias(String alias)
           
 Map getResourceAliases()
           
 String[] getServerClasses()
           
 String[] getSystemClasses()
           
 File getTempDirectory()
          Get a temporary directory in which to unpack the war etc etc.
 String getWar()
           
 Resource getWebInf()
           
 boolean isDistributable()
           
 boolean isExtractWAR()
           
 boolean isParentLoaderPriority()
           
protected  boolean isProtectedTarget(String target)
          Check the target.
 boolean isTempWorkDirectory()
          Check if the _tmpDir itself is called "work", or if the _tmpDir is in a directory called "work".
protected  void loadConfigurations()
           
 String removeResourceAlias(String alias)
           
protected  void resolveWebApp()
          Resolve Web App directory If the BaseResource has not been set, use the war resource to derive a webapp resource (expanding WAR if required).
 void setConfigurationClasses(String[] configurations)
           
 void setConfigurations(Configuration[] configurations)
           
 void setDefaultsDescriptor(String defaultsDescriptor)
           
 void setDistributable(boolean distributable)
           
 void setEventListeners(EventListener[] eventListeners)
           
 void setExtractWAR(boolean extractWAR)
           
 void setParentLoaderPriority(boolean java2compliant)
           
 void setPermissions(PermissionCollection permissions)
           
 void setResourceAlias(String alias, String uri)
          Set Resource Alias.
 void setResourceAliases(Map map)
           
 void setSecurityHandler(SecurityHandler securityHandler)
           
 void setServerClasses(String[] serverClasses)
           
 void setServletHandler(ServletHandler servletHandler)
           
 void setSessionHandler(SessionHandler sessionHandler)
           
 void setSystemClasses(String[] systemClasses)
           
 void setTempDirectory(File dir)
          Set temporary directory for context.
 void setWar(String war)
           
protected  void startContext()
           
 
Methods inherited from class org.mortbay.jetty.servlet.Context
addServlet, addServlet, addServlet, getSecurityHandler, getServletHandler, getSessionHandler
 
Methods inherited from class org.mortbay.jetty.handler.ContextHandler
addLocaleEncoding, clearAttributes, getAttribute, getAttributeNames, getAttributes, getBaseResource, getClassLoader, getConnectorNames, getContextPath, getCurrentContext, getDisplayName, getErrorHandler, getEventListeners, getHosts, getInitParameter, getInitParameterNames, getInitParams, getLocaleEncoding, getMimeTypes, getResourceBase, getResourcePaths, getVirtualHosts, getWelcomeFiles, handle, isShutdown, loadClass, removeAttribute, setAttribute, setAttributes, setBaseResource, setClassLoader, setConnectorNames, setContextPath, setDisplayName, setErrorHandler, setHosts, setInitParams, setMimeTypes, setResourceBase, setServer, setShutdown, setVirtualHosts, setWelcomeFiles, toString
 
Methods inherited from class org.mortbay.jetty.handler.HandlerWrapper
addHandler, expandChildren, getHandler, setHandler
 
Methods inherited from class org.mortbay.jetty.handler.AbstractHandlerContainer
expandHandler, getChildHandlerByClass, getChildHandlers, getChildHandlersByClass
 
Methods inherited from class org.mortbay.jetty.handler.AbstractHandler
getServer
 
Methods inherited from class org.mortbay.component.AbstractLifeCycle
isFailed, isRunning, isStarted, isStarting, isStopping, start, stop
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.mortbay.component.LifeCycle
isFailed, isRunning, isStarted, isStarting, isStopping, start, stop
 

Field Detail

WEB_DEFAULTS_XML

public static final String WEB_DEFAULTS_XML
See Also:
Constant Field Values

ERROR_PAGE

public static final String ERROR_PAGE
See Also:
Constant Field Values
Constructor Detail

WebAppContext

public WebAppContext()

WebAppContext

public WebAppContext(String webApp,
                     String contextPath)
Parameters:
contextPath - The context path
webApp - The URL or filename of the webapp directory or war file.

WebAppContext

public WebAppContext(HandlerContainer parent,
                     String webApp,
                     String contextPath)
Parameters:
parent - The parent HandlerContainer.
contextPath - The context path
webApp - The URL or filename of the webapp directory or war file.

WebAppContext

public WebAppContext(SecurityHandler securityHandler,
                     SessionHandler sessionHandler,
                     ServletHandler servletHandler,
                     ErrorHandler errorHandler)
Method Detail

getCurrentWebAppContext

public static WebAppContext getCurrentWebAppContext()

addWebApplications

public static void addWebApplications(Server server,
                                      String webapps,
                                      String defaults,
                                      boolean extract,
                                      boolean java2CompliantClassLoader)
                               throws IOException
Add Web Applications. Add auto webapplications to the server. The name of the webapp directory or war is used as the context name. If the webapp matches the rootWebApp it is added as the "/" context.

Parameters:
server - Must not be null
webapps - Directory file name or URL to look for auto webapplication.
defaults - The defaults xml filename or URL which is loaded before any in the web app. Must respect the web.dtd. If null the default defaults file is used. If the empty string, then no defaults file is used.
extract - If true, extract war files
java2CompliantClassLoader - True if java2 compliance is applied to all webapplications
Throws:
IOException

addWebApplications

public static void addWebApplications(Server server,
                                      String webapps,
                                      String defaults,
                                      String[] configurations,
                                      boolean extract,
                                      boolean java2CompliantClassLoader)
                               throws IOException
Add Web Applications. Add auto webapplications to the server. The name of the webapp directory or war is used as the context name. If the webapp matches the rootWebApp it is added as the "/" context.

Parameters:
server - Must not be null.
webapps - Directory file name or URL to look for auto webapplication.
defaults - The defaults xml filename or URL which is loaded before any in the web app. Must respect the web.dtd. If null the default defaults file is used. If the empty string, then no defaults file is used.
configurations - Array of classnames of Configuration implementations to apply.
extract - If true, extract war files
java2CompliantClassLoader - True if java2 compliance is applied to all webapplications
Throws:
IOException
IllegalAccessException
InstantiationException

addWebApplications

public static void addWebApplications(HandlerContainer contexts,
                                      String webapps,
                                      String defaults,
                                      boolean extract,
                                      boolean java2CompliantClassLoader)
                               throws IOException
Add Web Applications. Add auto webapplications to the server. The name of the webapp directory or war is used as the context name. If the webapp is called "root" it is added as the "/" context.

Parameters:
contexts - A HandlerContainer to which the contexts will be added
webapps - Directory file name or URL to look for auto webapplication.
defaults - The defaults xml filename or URL which is loaded before any in the web app. Must respect the web.dtd. If null the default defaults file is used. If the empty string, then no defaults file is used.
extract - If true, extract war files
java2CompliantClassLoader - True if java2 compliance is applied to all webapplications
Throws:
IOException
IllegalAccessException
InstantiationException

addWebApplications

public static void addWebApplications(HandlerContainer contexts,
                                      String webapps,
                                      String defaults,
                                      String[] configurations,
                                      boolean extract,
                                      boolean java2CompliantClassLoader)
                               throws IOException
Add Web Applications. Add auto webapplications to the server. The name of the webapp directory or war is used as the context name. If the webapp is called "root" it is added as the "/" context.

Parameters:
contexts - A HandlerContainer to which the contexts will be added
webapps - Directory file name or URL to look for auto webapplication.
defaults - The defaults xml filename or URL which is loaded before any in the web app. Must respect the web.dtd. If null the default defaults file is used. If the empty string, then no defaults file is used.
configurations - Array of classnames of Configuration implementations to apply.
extract - If true, extract war files
java2CompliantClassLoader - True if java2 compliance is applied to all webapplications
Throws:
IOException
IllegalAccessException
InstantiationException

setResourceAlias

public void setResourceAlias(String alias,
                             String uri)
Set Resource Alias. Resource aliases map resource uri's within a context. They may optionally be used by a handler when looking for a resource.

Parameters:
alias -
uri -

getResourceAliases

public Map getResourceAliases()

setResourceAliases

public void setResourceAliases(Map map)

getResourceAlias

public String getResourceAlias(String alias)

removeResourceAlias

public String removeResourceAlias(String alias)

getResource

public Resource getResource(String uriInContext)
                     throws MalformedURLException
Overrides:
getResource in class ContextHandler
Throws:
MalformedURLException

doStart

protected void doStart()
                throws Exception
Overrides:
doStart in class ContextHandler
Throws:
Exception

doStop

protected void doStop()
               throws Exception
Overrides:
doStop in class ContextHandler
Throws:
Exception

getConfigurationClasses

public String[] getConfigurationClasses()
Returns:
Returns the configurations.

getConfigurations

public Configuration[] getConfigurations()
Returns:
Returns the configurations.

getDefaultsDescriptor

public String getDefaultsDescriptor()
Returns:
Returns the defaultsDescriptor.

getPermissions

public PermissionCollection getPermissions()
Returns:
Returns the permissions.

getServerClasses

public String[] getServerClasses()
Returns:
Returns the serverClasses.

getSystemClasses

public String[] getSystemClasses()
Returns:
Returns the systemClasses.

getTempDirectory

public File getTempDirectory()
Get a temporary directory in which to unpack the war etc etc. The algorithm for determining this is to check these alternatives in the order shown:

A. Try to use an explicit directory specifically for this webapp:

  1. Iff an explicit directory is set for this webapp, use it. Do NOT set delete on exit.
  2. Iff javax.servlet.context.tempdir context attribute is set for this webapp && exists && writeable, then use it. Do NOT set delete on exit.

B. Create a directory based on global settings. The new directory will be called "Jetty_"+host+"_"+port+"__"+context+"_"+virtualhost Work out where to create this directory:

  1. Iff $(jetty.home)/work exists create the directory there. Do NOT set delete on exit. Do NOT delete contents if dir already exists.
  2. Iff WEB-INF/work exists create the directory there. Do NOT set delete on exit. Do NOT delete contents if dir already exists.
  3. Else create dir in $(java.io.tmpdir). Set delete on exit. Delete contents if dir already exists.

Returns:

isTempWorkDirectory

public boolean isTempWorkDirectory()
Check if the _tmpDir itself is called "work", or if the _tmpDir is in a directory called "work".

Returns:

getWar

public String getWar()
Returns:
Returns the war as a file or URL string (Resource)

getWebInf

public Resource getWebInf()
                   throws IOException
Throws:
IOException

isDistributable

public boolean isDistributable()
Returns:
Returns the distributable.

isExtractWAR

public boolean isExtractWAR()
Returns:
Returns the extractWAR.

isParentLoaderPriority

public boolean isParentLoaderPriority()
Returns:
Returns the java2compliant.

loadConfigurations

protected void loadConfigurations()
                           throws Exception
Throws:
Exception

isProtectedTarget

protected boolean isProtectedTarget(String target)
Description copied from class: ContextHandler
Check the target. Called by ContextHandler.handle(String, HttpServletRequest, HttpServletResponse, int) when a target within a context is determined. If the target is protected, 404 is returned. The default implementation always returns false.

Overrides:
isProtectedTarget in class ContextHandler
See Also:
isProtectedTarget(String)

resolveWebApp

protected void resolveWebApp()
                      throws IOException
Resolve Web App directory If the BaseResource has not been set, use the war resource to derive a webapp resource (expanding WAR if required).

Throws:
IOException

setConfigurationClasses

public void setConfigurationClasses(String[] configurations)
Parameters:
configurations - The configuration class names. If setConfigurations is not called these classes are used to create a configurations array.

setConfigurations

public void setConfigurations(Configuration[] configurations)
Parameters:
configurations - The configurations to set.

setDefaultsDescriptor

public void setDefaultsDescriptor(String defaultsDescriptor)
Parameters:
defaultsDescriptor - The defaultsDescriptor to set.

setDistributable

public void setDistributable(boolean distributable)
Parameters:
distributable - The distributable to set.

setEventListeners

public void setEventListeners(EventListener[] eventListeners)
Overrides:
setEventListeners in class ContextHandler

addEventListener

public void addEventListener(EventListener listener)
Add EventListener Conveniance method that calls setEventListeners(EventListener[])

Parameters:
listener -

setExtractWAR

public void setExtractWAR(boolean extractWAR)
Parameters:
extractWAR - The extractWAR to set.

setParentLoaderPriority

public void setParentLoaderPriority(boolean java2compliant)
Parameters:
java2compliant - The java2compliant to set.

setPermissions

public void setPermissions(PermissionCollection permissions)
Parameters:
permissions - The permissions to set.

setSecurityHandler

public void setSecurityHandler(SecurityHandler securityHandler)
Parameters:
securityHandler - The SecurityHandler to set on this context.

setServerClasses

public void setServerClasses(String[] serverClasses)
Parameters:
serverClasses - The serverClasses to set.

setServletHandler

public void setServletHandler(ServletHandler servletHandler)
Parameters:
servletHandler - The servletHandler to set.

setSessionHandler

public void setSessionHandler(SessionHandler sessionHandler)
Parameters:
sessionHandler - The sessionHandler to set.

setSystemClasses

public void setSystemClasses(String[] systemClasses)
Parameters:
systemClasses - The systemClasses to set.

setTempDirectory

public void setTempDirectory(File dir)
Set temporary directory for context. The javax.servlet.context.tempdir attribute is also set.

Parameters:
dir - Writable temporary directory.

setWar

public void setWar(String war)
Parameters:
war - The war to set as a file name or URL

startContext

protected void startContext()
                     throws Exception
Overrides:
startContext in class ContextHandler
Throws:
Exception