📄 requesthandler.java
字号:
} catch (EventHandlerException e) {
Debug.logError(e, module);
}
}
}
// check for a url for redirection
if (nextView != null && nextView.startsWith("url:")) {
Debug.log("[RequestHandler.doRequest]: Response is a URL redirect.", module);
nextView = nextView.substring(4);
callRedirect(nextView, response);
}
// check for a View
else if (nextView != null && nextView.startsWith("view:")) {
Debug.log("[RequestHandler.doRequest]: Response is a view.", module);
nextView = nextView.substring(5);
renderView(nextView, requestManager.allowExtView(requestUri), request, response);
}
// check for a no dispatch return (meaning the return was processed by the event
else if (nextView != null && nextView.startsWith("none:")) {
Debug.log("[RequestHandler.doRequest]: Response is handled by the event.", module);
}
// a page request
else if (nextView != null) {
Debug.log("[RequestHandler.doRequest]: Response is a page.", module);
renderView(nextView, requestManager.allowExtView(requestUri), request, response);
}
// unknown request
else {
throw new RequestHandlerException("Illegal request; handler could not process the request.");
}
}
}
/** Find the event handler and invoke an event. */
public String runEvent(HttpServletRequest request, HttpServletResponse response, String type,
String path, String method) throws EventHandlerException {
EventHandler eventHandler = eventFactory.getEventHandler(type);
return eventHandler.invoke(path, method, request, response);
}
/** Returns the default error page for this request. */
public String getDefaultErrorPage(HttpServletRequest request) {
//String requestUri = RequestHandler.getRequestUri(request.getPathInfo());
//return requestManager.getErrorPage(requestUri);
return requestManager.getDefaultErrorPage();
}
/** Returns the RequestManager Object. */
public RequestManager getRequestManager() {
return requestManager;
}
/** Returns the ServletContext Object. */
public ServletContext getServletContext() {
return context;
}
/** Returns the ViewFactory Object. */
public ViewFactory getViewFactory() {
return viewFactory;
}
/** Returns the EventFactory Object. */
public EventFactory getEventFactory() {
return eventFactory;
}
public static String getRequestUri(String path) {
List pathInfo = StringUtil.split(path, "/");
if (((String)pathInfo.get(0)).indexOf('?') > -1) {
return ((String) pathInfo.get(0)).substring(0, ((String)pathInfo.get(0)).indexOf('?'));
} else {
return (String) pathInfo.get(0);
}
}
public static String getNextPageUri(String path) {
List pathInfo = StringUtil.split(path, "/");
String nextPage = null;
for (int i = 1; i < pathInfo.size(); i++) {
String element = (String) pathInfo.get(i);
if (element.indexOf('~') != 0) {
if (element.indexOf('?') > -1) {
element = element.substring(0, element.indexOf('?'));
}
if (i == 1) {
nextPage = element;
} else {
nextPage = nextPage + "/" + element;
}
}
}
return nextPage;
}
private void callRedirect(String url, HttpServletResponse resp) throws RequestHandlerException {
if (Debug.infoOn()) Debug.logInfo("[Sending redirect]: " + url, module);
try {
resp.sendRedirect(url);
} catch (IOException ioe) {
throw new RequestHandlerException(ioe.getMessage(), ioe);
} catch (IllegalStateException ise) {
throw new RequestHandlerException(ise.getMessage(), ise);
}
}
private void renderView(String view, boolean allowExtView, HttpServletRequest req, HttpServletResponse resp) throws RequestHandlerException {
GenericValue userLogin = (GenericValue) req.getSession().getAttribute("userLogin");
GenericDelegator delegator = (GenericDelegator) req.getAttribute("delegator");
// workaraound if we are in the root webapp
String cname = UtilHttp.getApplicationName(req);
String oldView = view;
if (view != null && view.length() > 0 && view.charAt(0) == '/') view = view.substring(1);
// if the view name starts with the control servlet name and a /, then it was an
// attempt to override the default view with a call back into the control servlet,
// so just get the target view name and use that
String servletName = req.getServletPath().substring(1);
Debug.logInfo("servletName=" + servletName + ", view=" + view, module);
if (view.startsWith(servletName + "/")) {
view = view.substring(servletName.length() + 1);
Debug.logInfo("a manual control servlet request was received, removing control servlet path resulting in: view=" + view, module);
}
if (Debug.verboseOn()) Debug.logVerbose("[Getting View Map]: " + view, module);
// before mapping the view, set a session attribute so we know where we are
req.setAttribute("_CURRENT_VIEW_", view);
String viewType = requestManager.getViewType(view);
String tempView = requestManager.getViewPage(view);
String nextPage = null;
if (tempView == null) {
if (!allowExtView) {
throw new RequestHandlerException("No view to render.");
} else {
nextPage = "/" + oldView;
}
} else {
nextPage = tempView;
}
if (Debug.verboseOn()) Debug.logVerbose("[Mapped To]: " + nextPage, module);
long viewStartTime = System.currentTimeMillis();
// setup chararcter encoding and content type
String charset = getServletContext().getInitParameter("charset");
if (charset == null || charset.length() == 0) charset = req.getCharacterEncoding();
if (charset == null || charset.length() == 0) charset = "UTF-8";
String viewCharset = requestManager.getViewEncoding(view);
//NOTE: if the viewCharset is "none" then no charset will be used
if (viewCharset != null && viewCharset.length() > 0) charset = viewCharset;
if (!"none".equals(charset)) {
try {
req.setCharacterEncoding(charset);
} catch (UnsupportedEncodingException e) {
throw new RequestHandlerException("Could not set character encoding to " + charset, e);
} catch (IllegalStateException e) {
Debug.logInfo(e, "Could not set character encoding to " + charset + ", something has probably already committed the stream", module);
}
}
// setup content type
String contentType = "text/html";
String viewContentType = requestManager.getViewContentType(view);
if (viewContentType != null && viewContentType.length() > 0) contentType = viewContentType;
if (charset.length() > 0 && !"none".equals(charset)) {
resp.setContentType(contentType + "; charset=" + charset);
} else {
resp.setContentType(contentType);
}
if (Debug.verboseOn()) Debug.logVerbose("The ContentType for the " + view + " view is: " + contentType, module);
try {
if (Debug.verboseOn()) Debug.logVerbose("Rendering view [" + nextPage + "] of type [" + viewType + "]", module);
ViewHandler vh = viewFactory.getViewHandler(viewType);
//Debug.log("Obtained View Handler : " + vh, module);
vh.render(view, nextPage, requestManager.getViewInfo(view), contentType, charset, req, resp);
//Debug.log("Rendered View : " + view + " : " + vh, module);
} catch (ViewHandlerException e) {
Throwable throwable = e.getNested() != null ? e.getNested() : e;
throw new RequestHandlerException(e.getNonNestedMessage(), throwable);
}
// before getting the view generation time flush the response output to get more consistent results
try {
resp.flushBuffer();
} catch (java.io.IOException e) {
throw new RequestHandlerException("Error flushing response buffer", e);
}
String vname = (String) req.getAttribute("_CURRENT_VIEW_");
if (vname != null) {
ServerHitBin.countView(cname + "." + vname, req, viewStartTime,
System.currentTimeMillis() - viewStartTime, userLogin, delegator);
}
}
public String makeLink(HttpServletRequest request, HttpServletResponse response, String url) {
return makeLink(request, response, url, false, false, false);
}
public String makeLink(HttpServletRequest request, HttpServletResponse response, String url, boolean fullPath, boolean secure, boolean encode) {
GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
String webSiteId = WebSiteWorker.getWebSiteId(request);
String httpsPort = null;
String httpsServer = null;
String httpPort = null;
String httpServer = null;
Boolean enableHttps = null;
// load the properties from the website entity
GenericValue webSite = null;
if (webSiteId != null) {
try {
webSite = delegator.findByPrimaryKeyCache("WebSite", UtilMisc.toMap("webSiteId", webSiteId));
if (webSite != null) {
httpsPort = webSite.getString("httpsPort");
httpsServer = webSite.getString("httpsHost");
httpPort = webSite.getString("httpPort");
httpServer = webSite.getString("httpHost");
enableHttps = webSite.getBoolean("enableHttps");
}
} catch (GenericEntityException e) {
Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module);
}
}
// fill in any missing properties with fields from the global file
if (httpsPort == null)
httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443");
if (httpServer == null)
httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host");
if (httpPort == null)
httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80");
if (httpServer == null)
httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host");
if (enableHttps == null)
enableHttps = new Boolean(UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y"));
// create the path the the control servlet
String controlPath = (String) request.getAttribute("_CONTROL_PATH_");
String requestUri = RequestHandler.getRequestUri(url);
StringBuffer newURL = new StringBuffer();
boolean useHttps = enableHttps.booleanValue();
if (useHttps || fullPath || secure) {
if (secure || (useHttps && requestManager.requiresHttps(requestUri) && !request.isSecure())) {
String server = httpsServer;
if (server == null || server.length() == 0) {
server = request.getServerName();
}
newURL.append("https://");
newURL.append(server);
if (!httpsPort.equals("443")) {
newURL.append(":" + httpsPort);
}
} else if (fullPath || (useHttps && !requestManager.requiresHttps(requestUri) && request.isSecure())) {
String server = httpServer;
if (server == null || server.length() == 0) {
server = request.getServerName();
}
newURL.append("http://");
newURL.append(server);
if (!httpPort.equals("80")) {
newURL.append(":" + httpPort);
}
}
}
newURL.append(controlPath);
newURL.append(url);
String encodedUrl = null;
if (response != null && !encode) {
encodedUrl = response.encodeURL(newURL.toString());
} else {
if (encode) {
String sessionId = request.getSession().getId();
newURL.append(";jsessionid=" + sessionId);
}
encodedUrl = newURL.toString();
}
return encodedUrl;
}
public static String makeUrl(HttpServletRequest request, HttpServletResponse response, String url) {
return makeUrl(request, response, url, false, false, false);
}
public static String makeUrl(HttpServletRequest request, HttpServletResponse response, String url, boolean fullPath, boolean secure, boolean encode) {
ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
return rh.makeLink(request, response, url, fullPath, secure, encode);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -