opencmscore.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,617 行 · 第 1/5 页
JAVA
1,617 行
}
// initialize the configuration
initConfiguration(configuration);
}
/**
* Initialize member variables.<p>
*/
protected void initMembers() {
synchronized (LOCK) {
m_resourceInitHandlers = new ArrayList();
m_requestHandlers = new HashMap();
m_systemInfo = new CmsSystemInfo();
m_exportPoints = Collections.EMPTY_SET;
m_defaultUsers = new CmsDefaultUsers();
m_localeManager = new CmsLocaleManager(Locale.ENGLISH);
m_sessionManager = new CmsSessionManager();
m_runtimeProperties = new Hashtable();
// the default event manager must be available because the configuration already registers events
m_eventManager = new CmsEventManager();
// default link manager is required for test cases
m_linkManager = new CmsLinkManager(new CmsDefaultLinkSubstitutionHandler());
}
}
/**
* Reads the requested resource from the OpenCms VFS,
* in case a directory name is requested, the default files of the
* directory will be looked up and the first match is returned.<p>
*
* The resource that is returned is always a <code>{@link org.opencms.file.CmsFile}</code>,
* even though the content will usually not be loaded in the result. Folders are never returned since
* the point of this method is really to load the default file if just a folder name is requested.<p>
*
* The URI stored in the given OpenCms user context will be changed to the URI of the resource
* that was found and returned.<p>
*
* Implementing and configuring an <code>{@link I_CmsResourceInit}</code> handler
* allows to customize the process of default resource selection.<p>
*
* @param cms the current users OpenCms context
* @param resourceName the path of the requested resource in the OpenCms VFS
* @param req the current http request
* @param res the current http response
*
* @return the requested resource read from the VFS
*
* @throws CmsException in case the requested file does not exist or the user has insufficient access permissions
*
* @see OpenCms#initResource(CmsObject, String, HttpServletRequest, HttpServletResponse)
*/
protected CmsResource initResource(
CmsObject cms,
String resourceName,
HttpServletRequest req,
HttpServletResponse res) throws CmsException {
CmsException tmpException = null;
CmsResource resource;
try {
// try to read the requested resource
resource = cms.readDefaultFile(resourceName);
} catch (CmsException e) {
// file or folder with given name does not exist, store exception
tmpException = e;
resource = null;
}
if (resource != null) {
// set the request uri to the right file
cms.getRequestContext().setUri(cms.getSitePath(resource));
// test if this file is only available for internal access operations
if (resource.isInternal()) {
throw new CmsException(Messages.get().container(
Messages.ERR_READ_INTERNAL_RESOURCE_1,
cms.getRequestContext().getUri()));
}
// check online project
if (cms.getRequestContext().currentProject().isOnlineProject()) {
// check if resource is secure
boolean secure = Boolean.valueOf(
cms.readPropertyObject(cms.getSitePath(resource), CmsPropertyDefinition.PROPERTY_SECURE, true).getValue()).booleanValue();
if (secure) {
// resource is secure, check site config
CmsSite site = OpenCms.getSiteManager().getCurrentSite(cms);
// check the secure url
boolean usingSec = req.getRequestURL().toString().toUpperCase().startsWith(
site.getSecureUrl().toUpperCase());
if (site.isExclusiveUrl() && !usingSec) {
resource = null;
// secure resource without secure protocol, check error config
if (site.isExclusiveError()) {
// trigger 404 error
throw new CmsVfsResourceNotFoundException(Messages.get().container(
Messages.ERR_REQUEST_SECURE_RESOURCE_0));
} else {
// redirect
String uri = req.getRequestURL().toString();
String target = site.getSecureUrl()
+ uri.substring(uri.indexOf("/", uri.indexOf("//") + 2));
try {
res.sendRedirect(target);
} catch (Exception e) {
// ignore, but should never happen
}
}
}
}
}
}
// test if this file has to be checked or modified
Iterator i = m_resourceInitHandlers.iterator();
while (i.hasNext()) {
try {
resource = ((I_CmsResourceInit)i.next()).initResource(resource, cms, req, res);
// the loop has to be interrupted when the exception is thrown!
} catch (CmsResourceInitException e) {
break;
}
}
// file is still null and not found exception was thrown, so throw original exception
if ((resource == null) && (tmpException != null)) {
throw tmpException;
}
// return the resource read from the VFS
return resource;
}
/**
* Initializes the system with the OpenCms servlet.<p>
*
* This is the final step that is called on the servlets "init()" method.
* It registers the servlets request handler and also outputs the final
* startup message. The servlet should auto-load since the <load-on-startup>
* parameter is set in the 'web.xml' by default.<p>
*
* @param servlet the OpenCms servlet
*/
protected void initServlet(OpenCmsServlet servlet) {
synchronized (LOCK) {
// add the servlets request handler
addRequestHandler(servlet);
// Sets the request error page attribute name to use if {@link HttpServletRequest#getPathInfo()}
// is not working properly, like in BEA WLS 9.x.
// please note that this init parameter is global and not servlet dependent!
m_requestErrorPageAttribute = servlet.getInitParameter(OpenCmsServlet.SERVLET_PARAM_REQUEST_ERROR_PAGE_ATTRIBUTE);
// output the final 'startup is finished' message
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SYSTEM_RUNNING_1,
CmsStringUtil.formatRuntime(getSystemInfo().getRuntime())));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_LINE_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
}
}
}
/**
* This method adds an Object to the OpenCms runtime properties.
* The runtime properties can be used to store Objects that are shared
* in the whole system.<p>
*
* @param key the key to add the Object with
* @param value the value of the Object to add
*/
protected void setRuntimeProperty(Object key, Object value) {
m_runtimeProperties.put(key, value);
}
/**
* Displays a resource from the OpenCms by writing the result to the provided
* Servlet response output stream.<p>
*
* @param req the current servlet request
* @param res the current servlet response
*/
protected void showResource(HttpServletRequest req, HttpServletResponse res) {
CmsObject cms = null;
try {
cms = initCmsObject(req, res);
// user is initialized, now deliver the requested resource
CmsResource resource = initResource(cms, cms.getRequestContext().getUri(), req, res);
if (resource != null) {
// a file was read, go on process it
m_resourceManager.loadResource(cms, resource, req, res);
m_sessionManager.updateSessionInfo(cms, req);
}
} catch (Throwable t) {
errorHandling(cms, req, res, t);
}
}
/**
* Destroys this OpenCms instance, called if the servlet (or shell) is shut down.<p>
*/
protected void shutDown() {
synchronized (LOCK) {
if (getRunLevel() > OpenCms.RUNLEVEL_0_OFFLINE) {
System.err.println(Messages.get().getBundle().key(
Messages.LOG_SHUTDOWN_CONSOLE_NOTE_2,
getSystemInfo().getVersionNumber(),
getSystemInfo().getWebApplicationName()));
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_LINE_0));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SHUTDOWN_START_1,
getSystemInfo().getVersionNumber()));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_CURRENT_RUNLEVEL_1,
new Integer(getRunLevel())));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SHUTDOWN_TIME_1,
new Date(System.currentTimeMillis())));
}
// take the system offline
setRunLevel(OpenCms.RUNLEVEL_0_OFFLINE);
if (LOG.isDebugEnabled()) {
// log exception to see which method did call the shutdown
LOG.debug(Messages.get().getBundle().key(Messages.LOG_SHUTDOWN_TRACE_0), new Exception());
}
try {
// the first thing we have to do is to wait until the current publish process finishes
m_publishEngine.shutDown();
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_PUBLISH_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_staticExportManager != null) {
m_staticExportManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_EXPORT_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_moduleManager != null) {
m_moduleManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_MODULE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_scheduleManager != null) {
m_scheduleManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_SCHEDULE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_resourceManager != null) {
m_resourceManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_RESOURCE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
// has to be stopped before the security manager, since this thread uses it
if (m_threadStore != null) {
m_threadStore.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_THREAD_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_securityManager != null) {
m_securityManager.destroy();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_SECURITY_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_sessionManager != null) {
m_sessionManager.shutdown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_SESSION_MANAGER_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_memoryMonitor != null) {
m_memoryMonitor.shutdown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_MEMORY_MONITOR_SHUTDOWN_1,
e.getMessage()), e);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?