org.apache.wicket.protocol.http
Class WebApplication

java.lang.Object
  extended by org.apache.wicket.Application
      extended by org.apache.wicket.protocol.http.WebApplication
All Implemented Interfaces:
IEventSink, ISessionStore.UnboundListener
Direct Known Subclasses:
AuthenticatedWebApplication, BreadCrumbApplication, ExampleApplication, MockApplication, RepeaterApplication, ResourceDecorationApplication, RolesApplication, SpringWebApplication, TestApp1, TestApp2, VelocityTemplateApplication, WicketApplication, WicketExampleApplication, WizardApplication

public abstract class WebApplication
extends Application

A web application is a subclass of Application which associates with an instance of WicketServlet to serve pages over the HTTP protocol. This class is intended to be subclassed by framework clients to define a web application.

Application settings are given defaults by the WebApplication() constructor and internalInit method, such as error page classes appropriate for HTML. WebApplication subclasses can override these values and/or modify other application settings by overriding the init() method and then by calling getXXXSettings() to retrieve an interface to a mutable Settings object. Do not do this in the constructor itself because the defaults will then override your settings.

If you want to use a filter specific configuration, e.g. using init parameters from the FilterConfig object, you should override the init() method. For example:

  public void init() {
  String webXMLParameter = getInitParameter("myWebXMLParameter");
  URL schedulersConfig = getServletContext().getResource("/WEB-INF/schedulers.xml");
  ...
 

Author:
Jonathan Locke, Chris Turner, Johan Compagner, Eelco Hillenius, Juergen Donnerstag
See Also:
WicketFilter, IApplicationSettings, IDebugSettings, IExceptionSettings, IMarkupSettings, IPageSettings, IRequestCycleSettings, IResourceSettings, ISecuritySettings, ISessionSettings, Filter, FilterConfig, ServletContext

Field Summary
 
Fields inherited from class org.apache.wicket.Application
CONFIGURATION
 
Constructor Summary
WebApplication()
          Constructor.
 
Method Summary
 void addIgnoreMountPath(java.lang.String path)
          Partly unmounts/ignores a path that normally would map to another mount path.
static WebApplication get()
          Covariant override for easy getting the current WebApplication without having to cast it.
 AjaxRequestTargetListenerCollection getAjaxRequestTargetListeners()
          Returns the registered AjaxRequestTarget.IListener objects.
 IContextProvider<AjaxRequestTarget,Page> getAjaxRequestTargetProvider()
          Returns the provider for AjaxRequestTarget objects.
 BufferedWebResponse getAndRemoveBufferedResponse(java.lang.String sessionId, Url url)
           
 java.lang.String getApplicationKey()
          Gets the unique key of this application within a given context (like a web application).
 RuntimeConfigurationType getConfigurationType()
          Gets the configuration mode to use for configuring the app, either RuntimeConfigurationType.DEVELOPMENT or RuntimeConfigurationType.DEPLOYMENT.
 FilterFactoryManager getFilterFactoryManager()
           
 java.lang.String getInitParameter(java.lang.String key)
          Gets an init parameter of the filter, or null if the parameter does not exist.
 java.lang.String getMimeType(java.lang.String fileName)
          Returns the mime type for given filename.
protected  IResourceFinder getResourceFinder()
          By default it return a WebApplicationPath
 javax.servlet.ServletContext getServletContext()
          Gets the servlet context for this application.
 java.lang.String getSessionAttributePrefix(WebRequest request, java.lang.String filterName)
          Gets the prefix for storing variables in the actual session (typically HttpSession for this application instance.
 WicketFilter getWicketFilter()
           
 boolean hasBufferedResponse(java.lang.String sessionId, Url url)
           
 boolean hasFilterFactoryManager()
           
protected  void init()
          Initialize; if you need the wicket servlet/filter for initialization, e.g.
 void internalDestroy()
          THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
protected  void internalInit()
          THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
 void logEventTarget(IRequestHandler target)
          THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
 void logResponseTarget(IRequestHandler target)
          THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
 void mount(IRequestMapper mapper)
          Mounts an encoder at the given path.
<P extends Page>
void
mountPackage(java.lang.String path, java.lang.Class<P> pageClass)
          Mounts mounts all bookmarkable pages in a the pageClass's package to the given path.
<T extends Page>
void
mountPage(java.lang.String path, java.lang.Class<T> pageClass)
          Mounts a page class to the given path.
 void mountResource(java.lang.String path, ResourceReference reference)
          Mounts a shared resource to the given path.
 AjaxRequestTarget newAjaxRequestTarget(Page page)
          Creates a new ajax request target used to control ajax responses
 Session newSession(Request request, Response response)
          Creates a new session.
protected  WebRequest newWebRequest(javax.servlet.http.HttpServletRequest servletRequest, java.lang.String filterPath)
          Create a new WebRequest.
protected  WebResponse newWebResponse(WebRequest webRequest, javax.servlet.http.HttpServletResponse httpServletResponse)
          Creates a WebResponse.
protected  void outputDevelopmentModeWarning()
          This method prints a warning to stderr that we are starting in development mode.
 void renderXmlDecl(WebPage page, boolean insert)
          The rules if and when to insert an xml decl in the response are a bit tricky.
 void sessionUnbound(java.lang.String sessionId)
          Informs the listener that session with specific id has been unbound.
 void setAjaxRequestTargetProvider(IContextProvider<AjaxRequestTarget,Page> ajaxRequestTargetProvider)
          Sets the provider for AjaxRequestTarget objects.
 void setServletContext(javax.servlet.ServletContext servletContext)
          Sets servlet context this application runs after.
 void setWicketFilter(WicketFilter wicketFilter)
          THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
 void storeBufferedResponse(java.lang.String sessionId, Url url, BufferedWebResponse response)
           
 void unmount(java.lang.String path)
          Unregisters all IRequestMappers which would match on a this path
 
Methods inherited from class org.apache.wicket.Application
configure, createRequestCycle, decorateHeaderResponse, exists, fetchCreateAndSetSession, get, getApplicationKeys, getApplicationSettings, getComponentInitializationListeners, getComponentInstantiationListeners, getComponentOnAfterRenderListeners, getComponentPostOnBeforeRenderListeners, getComponentPreOnBeforeRenderListeners, getConverterLocator, getDebugSettings, getExceptionMapperProvider, getExceptionSettings, getFrameworkSettings, getHeaderContributorListenerCollection, getHomePage, getMapperContext, getMarkupSettings, getMetaData, getName, getPageFactory, getPageManagerContext, getPageManagerProvider, getPageRendererProvider, getPageSettings, getRequestCycleListeners, getRequestCycleProvider, getRequestCycleSettings, getRequestLogger, getRequestLoggerSettings, getResourceReferenceRegistry, getResourceSettings, getRootRequestMapper, getRootRequestMapperAsCompound, getSecuritySettings, getSessionSettings, getSessionStore, getSessionStoreProvider, getSharedResources, getStoreSettings, initApplication, initializeComponents, newConverterLocator, newMapperContext, newPageFactory, newRequestLogger, newResourceReferenceRegistry, newSharedResources, onDestroy, onEvent, setApplicationSettings, setDebugSettings, setExceptionSettings, setFrameworkSettings, setHeaderResponseDecorator, setMarkupSettings, setMetaData, setName, setPageManagerProvider, setPageRendererProvider, setPageSettings, setRequestCycleProvider, setRequestCycleSettings, setRequestLoggerSettings, setResourceSettings, setRootRequestMapper, setSecuritySettings, setSessionSettings, setSessionStoreProvider, setStoreSettings, usesDeploymentConfig, usesDevelopmentConfig, validateInit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WebApplication

public WebApplication()
Constructor. Use init() for any configuration of your application instead of overriding the constructor.

Method Detail

get

public static WebApplication get()
Covariant override for easy getting the current WebApplication without having to cast it.


getApplicationKey

public final java.lang.String getApplicationKey()
Description copied from class: Application
Gets the unique key of this application within a given context (like a web application). NOT INTENDED FOR FRAMEWORK CLIENTS.

Specified by:
getApplicationKey in class Application
Returns:
The unique key of this application
See Also:
Application.getApplicationKey()

getInitParameter

public java.lang.String getInitParameter(java.lang.String key)
Gets an init parameter of the filter, or null if the parameter does not exist.

Parameters:
key - the key to search for
Returns:
the value of the filter init parameter

setServletContext

public void setServletContext(javax.servlet.ServletContext servletContext)
Sets servlet context this application runs after. This is uaully done from a filter or a servlet responsible for managing this application object, such as WicketFilter

Parameters:
servletContext -

getServletContext

public javax.servlet.ServletContext getServletContext()
Gets the servlet context for this application. Use this to get references to absolute paths, global web.xml parameters (<context-param>), etc.

Returns:
The servlet context for this application

getSessionAttributePrefix

public java.lang.String getSessionAttributePrefix(WebRequest request,
                                                  java.lang.String filterName)
Gets the prefix for storing variables in the actual session (typically HttpSession for this application instance.

Parameters:
request - the request
filterName - If null, than it defaults to the WicketFilter filter name. However according to the ServletSpec the Filter is not guaranteed to be initialized e.g. when WicketSessionFilter gets initialized. Thus, though you (and WicketSessionFilter) can provide a filter name, you must make sure it is the same as WicketFilter will provide once initialized.
Returns:
the prefix for storing variables in the actual session

getWicketFilter

public final WicketFilter getWicketFilter()
Returns:
The Wicket filter for this application

logEventTarget

public void logEventTarget(IRequestHandler target)
Description copied from class: Application
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.

Overrides:
logEventTarget in class Application
See Also:
Application.logEventTarget(org.apache.wicket.request.IRequestHandler)

logResponseTarget

public void logResponseTarget(IRequestHandler target)
Description copied from class: Application
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.

Overrides:
logResponseTarget in class Application
See Also:
Application.logResponseTarget(org.apache.wicket.request.IRequestHandler)

mount

public final void mount(IRequestMapper mapper)
Mounts an encoder at the given path.

Parameters:
mapper - the encoder that will be used for this mount

mountPage

public final <T extends Page> void mountPage(java.lang.String path,
                                             java.lang.Class<T> pageClass)
Mounts a page class to the given path.

Type Parameters:
T - type of page
Parameters:
path - the path to mount the page class on
pageClass - the page class to be mounted

mountResource

public final void mountResource(java.lang.String path,
                                ResourceReference reference)
Mounts a shared resource to the given path.

Parameters:
path - the path to mount the resource reference on
reference - resource reference to be mounted

mountPackage

public final <P extends Page> void mountPackage(java.lang.String path,
                                                java.lang.Class<P> pageClass)
Mounts mounts all bookmarkable pages in a the pageClass's package to the given path.

Type Parameters:
P - type of page
Parameters:
path - the path to mount the page class on
pageClass - the page class to be mounted

unmount

public final void unmount(java.lang.String path)
Unregisters all IRequestMappers which would match on a this path

Parameters:
path - the path to unmount

addIgnoreMountPath

public final void addIgnoreMountPath(java.lang.String path)
Partly unmounts/ignores a path that normally would map to another mount path. Like mount("/mypage", MyPage.class); and then "/mypage/arealdir" should be ignored. This can be done by calling unMount("/mypage/arealdir");

Parameters:
path - the path that should be ignored.

newWebRequest

protected WebRequest newWebRequest(javax.servlet.http.HttpServletRequest servletRequest,
                                   java.lang.String filterPath)
Create a new WebRequest. Subclasses of WebRequest could e.g. decode and obfuscate URL which has been encoded by an appropriate WebResponse.

Parameters:
servletRequest - the current HTTP Servlet request
filterPath - the filter mapping read from web.xml
Returns:
a WebRequest object

newWebResponse

protected WebResponse newWebResponse(WebRequest webRequest,
                                     javax.servlet.http.HttpServletResponse httpServletResponse)
Creates a WebResponse. Subclasses of WebRequest could e.g. encode wicket's default URL and hide the details from the user. A appropriate WebRequest must be implemented and configured to decode the encoded URL.

Parameters:
webRequest - the WebRequest that will handle the current HTTP Servlet request
httpServletResponse - the current HTTP Servlet response
Returns:
a WebResponse object

newSession

public Session newSession(Request request,
                          Response response)
Description copied from class: Application
Creates a new session. Override this method if you want to provide a custom session.

Specified by:
newSession in class Application
Parameters:
request - The request that will create this session.
response - The response to initialize, for example with cookies. This is important to use cases involving unit testing because those use cases might want to be able to sign a user in automatically when the session is created.
Returns:
The session
See Also:
Application.newSession(org.apache.wicket.request.Request, org.apache.wicket.request.Response)

sessionUnbound

public void sessionUnbound(java.lang.String sessionId)
Description copied from interface: ISessionStore.UnboundListener
Informs the listener that session with specific id has been unbound.

Specified by:
sessionUnbound in interface ISessionStore.UnboundListener
Overrides:
sessionUnbound in class Application
See Also:
Application.sessionUnbound(java.lang.String)

setWicketFilter

public final void setWicketFilter(WicketFilter wicketFilter)
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.

Parameters:
wicketFilter - The wicket filter instance for this application

init

protected void init()
Initialize; if you need the wicket servlet/filter for initialization, e.g. because you want to read an initParameter from web.xml or you want to read a resource from the servlet's context path, you can override this method and provide custom initialization. This method is called right after this application class is constructed, and the wicket servlet/filter is set. Use this method for any application setup instead of the constructor.

Overrides:
init in class Application

internalDestroy

public void internalDestroy()
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.

Overrides:
internalDestroy in class Application

internalInit

protected void internalInit()
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT. Internal initialization. First determine the deployment mode. First check the system property -Dwicket.configuration. If it does not exist check the servlet init parameter ( <init-param><param-name>configuration</param-name>). If not found check the servlet context init parameter <context-param><param-name6gt;configuration</param-name>). If the parameter is "development" (which is default), settings appropriate for development are set. If it's "deployment" , deployment settings are used. If development is specified and a "sourceFolder" init parameter is also set, then resources in that folder will be polled for changes.

Overrides:
internalInit in class Application

getConfigurationType

public RuntimeConfigurationType getConfigurationType()
Gets the configuration mode to use for configuring the app, either RuntimeConfigurationType.DEVELOPMENT or RuntimeConfigurationType.DEPLOYMENT.

The configuration type. Must currently be either DEVELOPMENT or DEPLOYMENT. Currently, if the configuration type is DEVELOPMENT, resources are polled for changes, component usage is checked, wicket tags are not stripped from output and a detailed exception page is used. If the type is DEPLOYMENT, component usage is not checked, wicket tags are stripped from output and a non-detailed exception page is used to display errors.

Note that you should not run Wicket in DEVELOPMENT mode on production servers - the various debugging checks and resource polling is inefficient and may leak resources, particularly on webapp redeploy.

To change the deployment mode, add the following to your web.xml, inside your mapping (or mapping if you're using 1.3.x):

 <init-param>
             <param-name>configuration</param-name>
             <param-value>deployment</param-value>
 </init-param>
 

You can alternatively set this as a <context-param> on the whole context.

Another option is to set the "wicket.configuration" system property to either "deployment" or "development". The value is not case-sensitive.

The system property is checked first, allowing you to add a web.xml param for deployment, and a command-line override when you want to run in development mode during development.

You may also override Application.getConfigurationType() to provide your own custom switch, in which case none of the above logic is used.

IMPORTANT NOTE

THIS METHOD IS CALLED OFTEN FROM MANY DIFFERENT POINTS IN CODE, INCLUDING DURING THE RENDER PROCESS, THEREFORE THE IMPLEMENTATION SHOULD BE FAST - PREFERRABLY USING A FAST-TO-RETRIEVE CACHED VALUE

Specified by:
getConfigurationType in class Application
Returns:
configuration

renderXmlDecl

public void renderXmlDecl(WebPage page,
                          boolean insert)
The rules if and when to insert an xml decl in the response are a bit tricky. Hence, we allow the user to replace the default implementation per page and per application.

Default implementation: the page mime type must be "application/xhtml+xml" and request HTTP_ACCEPT header must include "application/xhtml+xml" to automatically include the xml decl. Please see http://developer.mozilla.org/en/Writing_JavaScript_for_XHTML#Finally.3a_Content_Negotiation for details.

Please note that xml decls in Wicket's markup are only used for reading the markup. The markup's xml decl will always be removed and never be used to configure the response.

Parameters:
page - The page currently being rendered
insert - If false, than the rules are applied. If true, it'll always be written. In order to never insert it, than subclass renderXmlDecl() with an empty implementation.

getResourceFinder

protected IResourceFinder getResourceFinder()
By default it return a WebApplicationPath

Returns:
resource finder

newAjaxRequestTarget

public final AjaxRequestTarget newAjaxRequestTarget(Page page)
Creates a new ajax request target used to control ajax responses

Parameters:
page - page on which ajax response is made
Returns:
non-null ajax request target instance

outputDevelopmentModeWarning

protected void outputDevelopmentModeWarning()
This method prints a warning to stderr that we are starting in development mode.

If you really need to test Wicket in development mode on a staging server somewhere and are annoying the sysadmin for it with stderr messages, you can override this to make it do something else.


hasBufferedResponse

public boolean hasBufferedResponse(java.lang.String sessionId,
                                   Url url)
Parameters:
sessionId -
url -
Returns:
true if has buffered response

getAndRemoveBufferedResponse

public BufferedWebResponse getAndRemoveBufferedResponse(java.lang.String sessionId,
                                                        Url url)
Parameters:
sessionId -
url -
Returns:
buffered response

storeBufferedResponse

public void storeBufferedResponse(java.lang.String sessionId,
                                  Url url,
                                  BufferedWebResponse response)
Parameters:
sessionId -
url -
response -

getMimeType

public java.lang.String getMimeType(java.lang.String fileName)
Description copied from class: Application
Returns the mime type for given filename.

Overrides:
getMimeType in class Application
Returns:
mime type

getAjaxRequestTargetProvider

public IContextProvider<AjaxRequestTarget,Page> getAjaxRequestTargetProvider()
Returns the provider for AjaxRequestTarget objects.

Returns:
the provider for AjaxRequestTarget objects.

setAjaxRequestTargetProvider

public void setAjaxRequestTargetProvider(IContextProvider<AjaxRequestTarget,Page> ajaxRequestTargetProvider)
Sets the provider for AjaxRequestTarget objects.

Parameters:
ajaxRequestTargetProvider - the new provider

getAjaxRequestTargetListeners

public AjaxRequestTargetListenerCollection getAjaxRequestTargetListeners()
Returns the registered AjaxRequestTarget.IListener objects.

Returns:
the registered AjaxRequestTarget.IListener objects.

hasFilterFactoryManager

public final boolean hasFilterFactoryManager()
Returns:
True if at least one filter factory has been added.

getFilterFactoryManager

public final FilterFactoryManager getFilterFactoryManager()
Returns:
The filter factory manager


Copyright © 2006-2011 Apache Software Foundation. All Rights Reserved.