opencmsservlet.java
来自「找了很久才找到到源代码」· Java 代码 · 共 345 行 · 第 1/2 页
JAVA
345 行
/**
* OpenCms servlet POST request handling method,
* will just call {@link #doGet(HttpServletRequest, HttpServletResponse)}.<p>
*
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
doGet(req, res);
}
/**
* @see org.opencms.main.I_CmsRequestHandler#getHandlerNames()
*/
public String[] getHandlerNames() {
return HANDLER_NAMES;
}
/**
* @see org.opencms.main.I_CmsRequestHandler#handle(HttpServletRequest, HttpServletResponse, String)
*/
public void handle(HttpServletRequest req, HttpServletResponse res, String name)
throws IOException, ServletException {
int errorCode;
try {
errorCode = Integer.valueOf(name).intValue();
} catch (NumberFormatException nf) {
res.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
switch (errorCode) {
case 404:
CmsObject cms = null;
CmsStaticExportData exportData = null;
try {
cms = OpenCms.initCmsObject(OpenCms.getDefaultUsers().getUserExport());
exportData = OpenCms.getStaticExportManager().getExportData(req, cms);
} catch (CmsException e) {
// unlikely to happen
if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(
Messages.LOG_INIT_CMSOBJECT_IN_HANDLER_2,
name,
OpenCmsCore.getInstance().getPathInfo(req)), e);
}
}
if (exportData != null) {
try {
// generate a static export request wrapper
CmsStaticExportRequest exportReq = new CmsStaticExportRequest(req, exportData);
// export the resource and set the response status according to the result
res.setStatus(OpenCms.getStaticExportManager().export(exportReq, res, cms, exportData));
} catch (Throwable t) {
if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(Messages.LOG_ERROR_EXPORT_1, exportData), t);
}
openErrorHandler(req, res, errorCode);
}
} else {
openErrorHandler(req, res, errorCode);
}
break;
default:
openErrorHandler(req, res, errorCode);
}
}
/**
* @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
*/
public synchronized void init(ServletConfig config) throws ServletException {
super.init(config);
try {
// upgrade the runlevel
// usually this should have already been done by the context listener
// however, after a fresh install / setup this will be done from here
OpenCmsCore.getInstance().upgradeRunlevel(config.getServletContext());
// finalize OpenCms initialization
OpenCmsCore.getInstance().initServlet(this);
} catch (CmsInitException e) {
if (Messages.ERR_CRITICAL_INIT_WIZARD_0.equals(e.getMessageContainer().getKey())) {
// if wizard is still enabled - allow retry of initialization (required for setup wizard)
// this means the servlet init() call must be terminated by an exception
if (!Boolean.valueOf(config.getInitParameter(SERVLET_PARAM_ON_ERROR_EXIT_WITHOUT_EXCEPTION)).booleanValue()) {
throw new ServletException(e.getMessage());
} else {
// this is needed since some servlet containers does like the servlet to throw exceptions, like BEA WLS 9.x
LOG.error(Messages.get().getBundle().key(Messages.LOG_ERROR_GENERIC_0), e);
}
}
} catch (Throwable t) {
LOG.error(Messages.get().getBundle().key(Messages.LOG_ERROR_GENERIC_0), t);
}
}
/**
* Manages requests to internal OpenCms request handlers.<p>
*
* @param req the current request
* @param res the current response
* @throws ServletException
* @throws ServletException in case an error occurs
* @throws IOException in case an error occurs
*/
protected void invokeHandler(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
String name = OpenCmsCore.getInstance().getPathInfo(req).substring(HANDLE_PATH.length());
I_CmsRequestHandler handler = OpenCmsCore.getInstance().getRequestHandler(name);
if (handler != null) {
handler.handle(req, res, name);
} else {
openErrorHandler(req, res, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
/**
* Displays an error code handler loaded from the OpenCms VFS,
* or if such a page does not exist,
* displays the default servlet container error code.<p>
*
* @param req the current request
* @param res the current response
* @param errorCode the error code to display
* @throws IOException if something goes wrong
* @throws ServletException if something goes wrong
*/
protected void openErrorHandler(HttpServletRequest req, HttpServletResponse res, int errorCode)
throws IOException, ServletException {
String handlerUri = (new StringBuffer(64)).append(HANDLE_VFS_PATH).append(errorCode).append(HANDLE_VFS_SUFFIX).toString();
CmsObject cms;
CmsFile file;
try {
// create OpenCms context
cms = OpenCms.initCmsObject(OpenCms.getDefaultUsers().getUserGuest());
cms.getRequestContext().setUri(handlerUri);
// read the error handler file
file = cms.readFile(handlerUri, CmsResourceFilter.IGNORE_EXPIRATION);
} catch (CmsException e) {
// unlikely to happen as the OpenCms "Guest" context can always be initialized
CmsMessageContainer container = Messages.get().container(
Messages.LOG_INIT_CMSOBJECT_IN_HANDLER_2,
new Integer(errorCode),
handlerUri);
if (LOG.isWarnEnabled()) {
LOG.warn(org.opencms.jsp.Messages.getLocalizedMessage(container, req), e);
}
// however, if it _does_ happen, then we really can't continue here
if (!res.isCommitted()) {
// since the handler file is not accessible, display the default error page
res.sendError(errorCode, e.getLocalizedMessage());
}
return;
}
try {
// provide the original error code in a request attribute
req.setAttribute(CmsRequestUtil.ATTRIBUTE_ERRORCODE, new Integer(errorCode));
OpenCms.getResourceManager().loadResource(cms, file, req, res);
} catch (CmsException e) {
// unable to load error page handler VFS resource
CmsMessageContainer container = Messages.get().container(
Messages.ERR_SHOW_ERR_HANDLER_RESOURCE_2,
new Integer(errorCode),
handlerUri);
throw new ServletException(org.opencms.jsp.Messages.getLocalizedMessage(container, req), e);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?