📄 jpublishwrapper.java
字号:
render(path, request, response, writer);
try {
content = writer.toString();
writer.close();
} catch (IOException e) {
throw new GeneralException("Problems closing the Writer", e);
}
return content;
}
public void render(String path, HttpServletRequest request, HttpServletResponse response, Writer writer) throws GeneralException {
render(path, request, response, writer, null, false);
}
public void render(String path, HttpServletRequest request, HttpServletResponse response, Writer writer, OutputStream outputStream) throws GeneralException {
render(path, request, response, writer, outputStream, false);
}
public void render(String path, HttpServletRequest request, HttpServletResponse response, Writer writer, OutputStream outputStream, boolean allowRedirect) throws GeneralException {
HttpSession session = request.getSession();
ActionManager actionManager = siteContext.getActionManager();
//String path = servletContext.getRealPath(pagePath);
//Debug.logError("Path:" + path, module);
// get the character encoding map
CharacterEncodingMap characterEncodingMap = siteContext.getCharacterEncodingManager().getMap(path);
// put standard servlet stuff into the context
JPublishContext context = new JPublishContext(this);
context.put("request", request);
context.put("response", response);
context.put("session", session);
context.put("application", servletContext);
// add the character encoding map to the context
context.put("characterEncodingMap", characterEncodingMap);
// add the URLUtilities to the context
URLUtilities urlUtilities = new URLUtilities(request, response);
context.put("urlUtilities", urlUtilities);
// add the DateUtilities to the context
context.put("dateUtilities", DateUtilities.getInstance());
// add the NumberUtilities to the context
context.put("numberUtilities", NumberUtilities.getInstance());
// add the messages log to the context
context.put("syslog", SiteContext.syslog);
// expose the SiteContext
context.put("site", siteContext);
if (siteContext.isProtectReservedNames()) {
context.enableCheckReservedNames(this);
}
// add the repositories to the context
Iterator repositories = siteContext.getRepositories().iterator();
while (repositories.hasNext()) {
Repository repository = (Repository) repositories.next();
context.put(repository.getName(), new RepositoryWrapper(repository, context));
// add the fs_repository also as the name 'pages' so we can use existing logic in pages
// note this is a hack and we should look at doing this a different way; but first need
// to investigate how to get content from different repositories
if (repository.getName().equals("fs_repository")) {
context.put("pages", new RepositoryWrapper(repository, context));
}
}
try {
if (executePreEvaluationActions(request, response, context, path))
return;
// if the page is static
StaticResourceManager staticResourceManager = siteContext.getStaticResourceManager();
if (staticResourceManager.resourceExists(path)) {
if (outputStream != null) {
// execute the global actions
if (executeGlobalActions(request, response, context, path, allowRedirect))
return;
// execute path actions
if (executePathActions(request, response, context, path, allowRedirect))
return;
// execute parameter actions
if (executeParameterActions(request, response, context, path, allowRedirect))
return;
// load and return the static resource
staticResourceManager.load(path, outputStream);
outputStream.flush();
return;
} else {
throw new GeneralException("Cannot load static resource with a null OutputStream");
}
}
// check and make sure we have a writer
if (writer == null)
throw new GeneralException("Cannot load dynamic content with a null Writer");
// load the page
PageInstance pageInstance = siteContext.getPageManager().getPage(path);
Page page = new Page(pageInstance);
context.disableCheckReservedNames(this);
// expose the page in the context
context.put("page", page);
// expose components in the context
context.put("components", new ComponentMap(context));
if (siteContext.isProtectReservedNames()) {
context.enableCheckReservedNames(this);
}
// execute the global actions
if (executeGlobalActions(request, response, context, path, allowRedirect))
return;
// execute path actions
if (executePathActions(request, response, context, path, allowRedirect))
return;
// execute parameter actions
if (executeParameterActions(request, response, context, path, allowRedirect))
return;
// execute the page actions
if (optionalRedirect(page.executeActions(context), path, response, allowRedirect))
return;
// get the template
Template template = siteContext.getTemplateManager().getTemplate(page.getFullTemplateName());
// merge the template
template.merge(context, page, writer);
writer.flush();
} catch (FileNotFoundException e) {
throw new GeneralException("File not found", e);
} catch (Exception e) {
throw new GeneralException("JPublish execution error", e);
} finally {
try {
executePostEvaluationActions(request, response, context, path);
} catch (Exception e) {
throw new GeneralException("Error executing JPublish post evaluation actions", e);
}
}
}
/**
* Privleged action for setting the class path. This is used to get around
* the Java security system to set the class path so scripts have full
* access to all loaded Java classes.
*
* <p>Note: This functionality is untested.</p>
*
* @author Anthony Eden
*/
class SetClassPathAction implements PrivilegedAction {
private String classPath;
/**
* Construct the action to set the class path.
* @param classPath The new class path
*/
public SetClassPathAction(String classPath) {
this.classPath = classPath;
}
/**
* Set the "java.class.path" property.
* @return Returns null
*/
public Object run() {
System.setProperty("java.class.path", classPath);
return null; // nothing to return
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -