📄 exportagxservlet.java
字号:
package com.esri.solutions.jitk.common.export.agx;
import com.esri.adf.web.data.WebContext;
import org.apache.log4j.Logger;
import java.io.IOException;
import javax.faces.FactoryFinder;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.lifecycle.LifecycleFactory;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Class that handles client requests to view map data
* in ArcGIS Explorer by extending {@link HttpServlet}. This class
* will use the {@link AGXExporter} to export map resources to an AGX
* document and stream it back to the client.
*/
@SuppressWarnings("serial")
public class ExportAGXServlet extends HttpServlet {
/**
* {@link Logger} used to log messages for this class.
*/
private static final Logger _logger = Logger.getLogger(ExportAGXServlet.class);
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
AGXExporter exporter = null;
WebContext context = null;
String agxXml = null;
String fileName = null;
ServletOutputStream out = null;
FacesContext fc = null;
String webContextInitParamName = "WebContext";
String webContextName = null;
try {
webContextName = getServletConfig()
.getInitParameter(webContextInitParamName);
if (webContextName == null) {
response.getWriter()
.write(generateErrorHtml(
"An error has occurred exporting to ArcGIS Explorer. Possible configuration problem."));
_logger.debug("Missing servlet initialization parameter '" +
webContextInitParamName + "' for servlet: " +
getServletConfig().getServletName() +
" - cannot export to AGX");
response.getWriter().flush();
response.getWriter().close();
return;
}
fc = getFacesContext(request, response);
if (!(fc.getApplication().getVariableResolver()
.resolveVariable(fc, webContextName) instanceof WebContext)) {
response.getWriter()
.write(generateErrorHtml(
"An error has occurred exporting to ArcGIS Explorer. Possible configuration problem."));
_logger.debug("WebContext bean is not of type '" +
WebContext.class.getName() + "' - cannot export to AGX");
response.getWriter().flush();
response.getWriter().close();
return;
}
context = (WebContext) fc.getApplication().getVariableResolver()
.resolveVariable(fc, webContextName);
exporter = new AGXExporter(context);
agxXml = exporter.export();
if (agxXml != null) {
fileName = "map.nmf";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setContentLength(agxXml.length());
response.addHeader("Content-Disposition",
"attachment;filename=" + fileName);
out = response.getOutputStream();
out.print(agxXml);
out.flush();
out.close();
} else {
_logger.warn(
"AGX xml is null, cannot export ArcGIS Explorer document.");
}
} catch (Exception ex) {
_logger.warn("Exception occurred while exporting ArcGIS Explorer document.",
ex);
}
}
/**
* Utility method to get the {@link FacesContext} object via
* the {@link FacesContextFactory#getFacesContext(Object, Object, Object, Lifecycle)}.
*
* @param request Reference to the {@link HttpServletRequest} needed for getting the
* {@link FacesContext}.
* @param response Reference to the {@link HttpServletResponse} needed for getting the
* {@link FacesContext}.
* @return {@link FacesContext} reference.
*/
private FacesContext getFacesContext(HttpServletRequest request,
HttpServletResponse response) {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext == null) {
FacesContextFactory contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
facesContext = contextFactory.getFacesContext(getServletContext(),
request, response, lifecycle);
}
return facesContext;
}
/**
* Utility method to generate an HTML message that can be
* sent back to the client.
*
* @param message {@link String} message.
* @return HTML message that can be viewed in a browser.
*/
private String generateErrorHtml(String message) {
StringBuilder errorHtml = null;
errorHtml = new StringBuilder();
errorHtml.append("<html>");
errorHtml.append("<head>");
errorHtml.append("<title>");
errorHtml.append("Error Exporting to ArcGIS Explorer");
errorHtml.append("</title>");
errorHtml.append("</head>");
errorHtml.append("<body>");
errorHtml.append(message);
errorHtml.append("</body>");
errorHtml.append("</html>");
return errorHtml.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -