⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 application.java

📁 Wicket一个开发Java Web应用程序框架。它使得开发web应用程序变得容易而轻松。 Wicket利用一个POJO data beans组件使得它可以与任何持久层技术相结合。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.wicket;import java.io.IOException;import java.io.InputStream;import java.io.Serializable;import java.net.URL;import java.util.ArrayList;import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;import org.apache.wicket.application.IComponentInstantiationListener;import org.apache.wicket.application.IComponentOnAfterRenderListener;import org.apache.wicket.application.IComponentOnBeforeRenderListener;import org.apache.wicket.markup.IMarkupCache;import org.apache.wicket.markup.html.IHeaderContributor;import org.apache.wicket.markup.html.IHeaderResponse;import org.apache.wicket.markup.html.image.resource.DefaultButtonImageResourceFactory;import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;import org.apache.wicket.markup.parser.filter.WicketMessageTagHandler;import org.apache.wicket.markup.resolver.AutoComponentResolver;import org.apache.wicket.markup.resolver.BorderBodyResolver;import org.apache.wicket.markup.resolver.EnclosureResolver;import org.apache.wicket.markup.resolver.FragmentResolver;import org.apache.wicket.markup.resolver.HtmlHeaderResolver;import org.apache.wicket.markup.resolver.MarkupInheritanceResolver;import org.apache.wicket.markup.resolver.ParentResolver;import org.apache.wicket.markup.resolver.WicketContainerResolver;import org.apache.wicket.markup.resolver.WicketLinkResolver;import org.apache.wicket.markup.resolver.WicketMessageResolver;import org.apache.wicket.protocol.http.IRequestLogger;import org.apache.wicket.protocol.http.RequestLogger;import org.apache.wicket.session.ISessionStore;import org.apache.wicket.settings.IApplicationSettings;import org.apache.wicket.settings.IDebugSettings;import org.apache.wicket.settings.IExceptionSettings;import org.apache.wicket.settings.IFrameworkSettings;import org.apache.wicket.settings.IMarkupSettings;import org.apache.wicket.settings.IPageSettings;import org.apache.wicket.settings.IRequestCycleSettings;import org.apache.wicket.settings.IRequestLoggerSettings;import org.apache.wicket.settings.IResourceSettings;import org.apache.wicket.settings.ISecuritySettings;import org.apache.wicket.settings.ISessionSettings;import org.apache.wicket.settings.Settings;import org.apache.wicket.util.convert.ConverterLocator;import org.apache.wicket.util.lang.Classes;import org.apache.wicket.util.lang.Objects;import org.apache.wicket.util.lang.PropertyResolver;import org.apache.wicket.util.time.Duration;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Base class for all Wicket applications. To create a Wicket application, you generally should * <i>not </i> directly subclass this class. Instead, you will want to subclass some subclass of * Application, like WebApplication, which is appropriate for the protocol and markup type you are * working with. * <p> * Application has the following interesting features / attributes: * <ul> * <li><b>Name </b>- The Application's name, which is the same as its class name. *  * <li><b>Home Page </b>- The Application's home Page class. Subclasses must override getHomePage() * to provide this property value. *  * <li><b>Settings </b>- Application settings are partitioned into sets of related settings using * interfaces in the org.apache.wicket.settings package. These interfaces are returned by the * following methods, which should be used to configure framework settings for your application: * getApplicationSettings(), getDebugSettings(), getExceptionSettings(), getMarkupSettings(), * getPageSettings(), getRequestCycleSettings(), getSecuritySettings and getSessionSettings(). These * settings are configured by default through the constructor or internalInit methods. Default the * application is configured for DEVELOPMENT. You can configure this globally to DEPLOYMENT or * override specific settings by implementing the init() method. *  * <li><b>Shared Resources </b>- Resources added to an Application's SharedResources have * application-wide scope and can be referenced using a logical scope and a name with the * ResourceReference class. ResourceReferences can then be used by multiple components in the same * application without additional overhead (beyond the ResourceReference instance held by each * referee) and will yield a stable URL, permitting efficient browser caching of the resource (even * if the resource is dynamically generated). Resources shared in this manner may also be localized. * See {@link org.apache.wicket.ResourceReference} for more details. *  * <li><b>Session Factory </b>- The Application subclass WebApplication supplies an implementation * of getSessionFactory() which returns an implementation of ISessionFactory that creates WebSession * Session objects appropriate for web applications. You can (and probably will want to) override * getSessionFactory() to provide your own session factory that creates Session instances of your * own application-specific subclass of WebSession. *  * </ul> *  * @see org.apache.wicket.protocol.http.WebApplication * @author Jonathan Locke */public abstract class Application{	/** Configuration constant for the 2 types */	public static final String CONFIGURATION = "configuration";	/**	 * Configuration type constant for getting the context path out of the web.xml	 */	public static final String CONTEXTPATH = "contextpath";	/** Configuration type constant for deployment */	public static final String DEPLOYMENT = "deployment";	/** Configuration type constant for development */	public static final String DEVELOPMENT = "development";	/**	 * Applications keyed on the {@link #getApplicationKey()} so that they can be retrieved even	 * without being in a request/ being set in the thread local (we need that e.g. for when we are	 * in a destruction thread).	 */	private static final Map applicationKeyToApplication = new HashMap(1);	/** Thread local holder of the application object. */	private static final ThreadLocal current = new ThreadLocal();	/** Log. */	private static final Logger log = LoggerFactory.getLogger(Application.class);	/**	 * Checks if the <code>Application</code> threadlocal is set in this thread	 * 	 * @return true if {@link Application#get()} can return the instance of application, false	 *         otherwise	 */	public static boolean exists()	{		return current.get() != null;	}	/**	 * Get Application for current thread.	 * 	 * @return The current thread's Application	 */	public static Application get()	{		final Application application = (Application)current.get();		if (application == null)		{			throw new WicketRuntimeException("There is no application attached to current thread " +				Thread.currentThread().getName());		}		return application;	}	/**	 * Gets the Application based on the application key of that application. You typically never	 * have to use this method unless you are working on an integration project.	 * 	 * @param applicationKey	 *            The unique key of the application within a certain context (e.g. a web	 *            application)	 * @return The application	 * @throws IllegalArgumentException	 *             When no application was found with the provided key	 */	public static Application get(String applicationKey)	{		Application application = (Application)applicationKeyToApplication.get(applicationKey);		return application;	}	/**	 * Gets the keys of the currently registered Wicket applications for this web application. You	 * typically never have to use this method unless you are working on an integration project.	 * 	 * @return unmodifiable set with keys that correspond with {@link #getApplicationKey()}. Never	 *         null, but possibly empty	 */	public static Set/* <String> */getApplicationKeys()	{		return Collections.unmodifiableSet(applicationKeyToApplication.keySet());	}	/**	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.	 * 	 * @param application	 *            The current application or null for this thread	 */	public static void set(final Application application)	{		if (application == null)		{			throw new IllegalArgumentException("Argument application can not be null");		}		current.set(application);	}	/**	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.	 */	public static void unset()	{		current.set(null);	}	/** list of {@link IComponentInstantiationListener}s. */	private IComponentInstantiationListener[] componentInstantiationListeners = new IComponentInstantiationListener[0];	/** The converter locator instance. */	private IConverterLocator converterLocator;	/** list of initializers. */	private final List initializers = new ArrayList();	/** Application level meta data. */	private MetaDataEntry[] metaData;	/** Name of application subclass. */	private final String name;	/** Request logger instance. */	private IRequestLogger requestLogger;	/** The session facade. */	private ISessionStore sessionStore;	/** Settings for this application. */	private Settings settings;	/** can the settings object be set/used. */	private boolean settingsAccessible;	/** Shared resources for this application */	private final SharedResources sharedResources;	/**	 * Constructor. <strong>Use {@link #init()} for any configuration of your application instead of	 * overriding the constructor.</strong>	 */	public Application()	{		// Create name from subclass		name = Classes.simpleName(getClass());		// Create shared resources repository		sharedResources = new SharedResources(this);		// Install default component instantiation listener that uses		// authorization strategy to check component instantiations.		addComponentInstantiationListener(new IComponentInstantiationListener()		{			/**			 * @see org.apache.wicket.application.IComponentInstantiationListener#onInstantiation(org.apache.wicket.Component)			 */			public void onInstantiation(final Component component)			{				// If component instantiation is not authorized				if (!Session.get().getAuthorizationStrategy().isInstantiationAuthorized(					component.getClass()))				{					// then call any unauthorized component instantiation					// listener					getSecuritySettings().getUnauthorizedComponentInstantiationListener()						.onUnauthorizedInstantiation(component);				}			}		});	}	/**	 * Adds a component instantiation listener. This method should typically only be called during	 * application startup; it is not thread safe.	 * <p>	 * Note: wicket does not guarantee the execution order of added listeners	 * 	 * @param listener	 *            the listener to add	 */	public final void addComponentInstantiationListener(		final IComponentInstantiationListener listener)	{		if (listener == null)		{			throw new IllegalArgumentException("argument listener may not be null");		}		// if an instance of this listener is already present ignore this call		for (int i = 0; i < componentInstantiationListeners.length; i++)		{			if (listener == componentInstantiationListeners[i])			{				return;			}		}		final IComponentInstantiationListener[] newListeners = new IComponentInstantiationListener[componentInstantiationListeners.length + 1];		System.arraycopy(componentInstantiationListeners, 0, newListeners, 0,			componentInstantiationListeners.length);		newListeners[componentInstantiationListeners.length] = listener;		componentInstantiationListeners = newListeners;	}	/**	 * Configures application settings to good defaults.	 */	public final void configure()	{		final String configurationType = getConfigurationType();		// As long as this is public api the development and deployment mode		// should counter act each other for all properties.		if (DEVELOPMENT.equalsIgnoreCase(configurationType))		{			getResourceSettings().setResourcePollFrequency(Duration.ONE_SECOND);			getDebugSettings().setComponentUseCheck(true);			getMarkupSettings().setStripWicketTags(false);			getExceptionSettings().setUnexpectedExceptionDisplay(				IExceptionSettings.SHOW_EXCEPTION_PAGE);			getDebugSettings().setAjaxDebugModeEnabled(true);			getResourceSettings().setStripJavascriptCommentsAndWhitespace(false);		}		else if (DEPLOYMENT.equalsIgnoreCase(configurationType))		{			getResourceSettings().setResourcePollFrequency(null);			getDebugSettings().setComponentUseCheck(false);			getMarkupSettings().setStripWicketTags(true);			getExceptionSettings().setUnexpectedExceptionDisplay(				IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE);			getDebugSettings().setAjaxDebugModeEnabled(false);			getResourceSettings().setStripJavascriptCommentsAndWhitespace(true);		}		else		{			throw new IllegalArgumentException("Invalid configuration type: '" + configurationType +				"'.  Must be \"development\" or \"deployment\".");		}	}	/**	 * Gets the unique key of this application within a given context (like a web application). NOT	 * INTENDED FOR FRAMEWORK CLIENTS.	 * 	 * @return The unique key of this application	 */	public abstract String getApplicationKey();	/**	 * @return Application's application-wide settings	 * @see IApplicationSettings	 * @since 1.2	 */	public IApplicationSettings getApplicationSettings()	{		return getSettings();	}	/**	 * Gets the configuration mode to use for configuring the app, either {@link #DEVELOPMENT} or	 * {@link #DEPLOYMENT}.	 * <p>	 * The configuration type. Must currently be either DEVELOPMENT or DEPLOYMENT. Currently, if the

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -