requestadapter.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 562 行
JAVA
562 行
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * Free SoftwareFoundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */package com.caucho.server.connection;import com.caucho.server.session.SessionManager;import com.caucho.server.webapp.WebApp;import com.caucho.util.FreeList;import com.caucho.util.L10N;import com.caucho.vfs.ReadStream;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletRequestWrapper;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.util.HashMap;/** * Any requests that depends on an underlying request, like * include() requests or adapters for other servlet engines. */public class RequestAdapter extends RequestWrapper implements CauchoRequest { static final L10N L = new L10N(RequestAdapter.class); static final int MAX_DEPTH = 64; public static String REQUEST_URI = "javax.servlet.include.request_uri"; public static String CONTEXT_PATH = "javax.servlet.include.context_path"; public static String SERVLET_PATH = "javax.servlet.include.servlet_path"; public static String PATH_INFO = "javax.servlet.include.path_info"; public static String QUERY_STRING = "javax.servlet.include.query_string"; public static String STATUS_CODE = "javax.servlet.error.status_code"; public static String EXCEPTION_TYPE = "javax.servlet.error.exception_type"; public static String MESSAGE = "javax.servlet.error.message"; public static String EXCEPTION = "javax.servlet.error.exception"; public static String ERROR_URI = "javax.servlet.error.request_uri"; public static String SERVLET_NAME = "javax.servlet.error.servlet_name"; public static String JSP_EXCEPTION = "javax.servlet.jsp.jspException"; public static String SHUTDOWN = "com.caucho.shutdown"; private static final FreeList<RequestAdapter> _freeList = new FreeList<RequestAdapter>(16); // for real adapters private WebApp _webApp; private HttpServletResponse _response; private HashMap<String,String> _roleMap; protected RequestAdapter() { super(null); } protected RequestAdapter(HttpServletRequest request, WebApp app) { super(request); _webApp = app; } /** * Creates a new RequestAdapter. */ public static RequestAdapter create(HttpServletRequest request, WebApp app) { RequestAdapter reqAdapt = _freeList.allocate(); if (reqAdapt == null) return new RequestAdapter(request, app); else { reqAdapt.setRequest(request); reqAdapt._webApp = app; return reqAdapt; } } /** * Creates a new RequestAdapter. */ public static RequestAdapter create() { RequestAdapter reqAdapt = _freeList.allocate(); if (reqAdapt != null) return reqAdapt; else return new RequestAdapter(); } public void init(HttpServletRequest request, HttpServletResponse response, WebApp app) throws ServletException { setRequest(request); _response = response; _webApp = app; if (request == this || request instanceof CauchoRequest && ((CauchoRequest) request).getRequestDepth(0) > MAX_DEPTH) { throw new ServletException(L.l("too many servlet includes `{0}'", request.getRequestURI())); } } public boolean isTop() { return false; } public void setWebApp(WebApp app) { _webApp = app; } protected HttpServletResponse getResponse() { return _response; } public void setResponse(CauchoResponse response) { _response = response; } /** * Returns the underlying read stream. */ public ReadStream getStream() throws IOException { if (getRequest() instanceof CauchoRequest) return ((CauchoRequest) getRequest()).getStream(); else return null; } /** * Returns the URI for the current page: included or top-level. */ public String getPageURI() { String uri = (String) getAttribute(REQUEST_URI); if (uri != null) return uri; else return getRequestURI(); } public static String getPageURI(HttpServletRequest request) { String uri = (String) request.getAttribute(REQUEST_URI); if (uri != null) return uri; else return request.getRequestURI(); } public String getPageContextPath() { String contextPath = (String) getAttribute(CONTEXT_PATH); if (contextPath != null) return contextPath; else return getContextPath(); } public static String getPageContextPath(HttpServletRequest request) { String contextPath = (String) request.getAttribute(CONTEXT_PATH); if (contextPath != null) return contextPath; else return request.getContextPath(); } /** * Returns the servlet-path for the current page, i.e. this will return the * url of the include page, not the original request. */ public String getPageServletPath() { String servletPath = (String) getAttribute(SERVLET_PATH); if (servletPath != null) return servletPath; else return getServletPath(); } /** * Returns the servlet-path for the current page, i.e. this will return the * url of the include page, not the original request. */ public static String getPageServletPath(HttpServletRequest request) { String servletPath = (String) request.getAttribute(SERVLET_PATH); if (servletPath != null) return servletPath; else return request.getServletPath(); } /** * Returns the path-info for the current page, i.e. this will return the * url of the include page, not the original request. */ public String getPagePathInfo() { String uri = (String) getAttribute(REQUEST_URI); if (uri != null) return (String) getAttribute(PATH_INFO); else return getPathInfo(); } /** * Returns the path-info for the current page, i.e. this will return the * url of the include page, not the original request. */ public static String getPagePathInfo(HttpServletRequest request) { String uri = (String) request.getAttribute(REQUEST_URI); if (uri != null) return (String) request.getAttribute(PATH_INFO); else return request.getPathInfo(); } /** * Returns the query-string for the current page, i.e. this will return the * url of the include page, not the original request. */ public String getPageQueryString() { String uri = (String) getAttribute(REQUEST_URI); if (uri != null) return (String) getAttribute(QUERY_STRING); else return getQueryString(); } /** * Returns the query-string for the current page, i.e. this will return the * url of the include page, not the original request. */ public static String getPageQueryString(HttpServletRequest request) { String uri = (String) request.getAttribute(REQUEST_URI); if (uri != null) return (String) request.getAttribute(QUERY_STRING); else return request.getQueryString(); } public int getRequestDepth(int depth) { if (depth > MAX_DEPTH) throw new RuntimeException(L.l("too many request dispatchers")); ServletRequest req = getRequest(); while (req != null) { if (req instanceof CauchoRequest) return ((CauchoRequest) req).getRequestDepth(depth + 1); else if (req instanceof ServletRequestWrapper) { ServletRequestWrapper reqWrap = (ServletRequestWrapper) req; req = reqWrap.getRequest(); } else break; } return depth + 2; } public void setHeader(String key, String value) { } public WebApp getWebApp() { return _webApp; } public void setVaryCookie(String cookie) { // super.setVaryCookie(cookie); if (getRequest() instanceof CauchoRequest) ((CauchoRequest) getRequest()).setVaryCookie(cookie); } public String getVaryCookie() { // super.setVaryCookie(cookie); if (getRequest() instanceof CauchoRequest) return ((CauchoRequest) getRequest()).getVaryCookie(); else return null; } public boolean getVaryCookies() { // super.setVaryCookie(cookie); if (getRequest() instanceof CauchoRequest) return ((CauchoRequest) getRequest()).getVaryCookies(); else return false; } public void setHasCookie() { // super.setHasCookie(); if (getRequest() instanceof CauchoRequest) ((CauchoRequest) getRequest()).setHasCookie(); } public boolean getHasCookie() { // super.setHasCookie(); if (getRequest() instanceof CauchoRequest) return ((CauchoRequest) getRequest()).getHasCookie(); else return false; } public HttpSession getMemorySession() { return getSession(false); } public HttpSession getSession(boolean create) { SessionManager manager = getSessionManager(); setVaryCookie(getCookieName(manager)); HttpSession session = super.getSession(create); if (session != null) setHasCookie(); return session; } public String getRequestedSessionId() { SessionManager manager = getSessionManager(); setVaryCookie(getCookieName(manager)); String id = super.getRequestedSessionId(); if (id != null) setHasCookie(); return id; } public boolean isRequestedSessionIdValid() { SessionManager manager = getSessionManager(); setVaryCookie(getCookieName(manager)); boolean isValid = super.isRequestedSessionIdValid(); if (isValid) setHasCookie(); return isValid; } public boolean isRequestedSessionIdFromCookie() { SessionManager manager = getSessionManager(); setVaryCookie(getCookieName(manager)); boolean isValid = super.isRequestedSessionIdFromCookie(); if (isValid) setHasCookie(); return isValid; } public boolean isRequestedSessionIdFromURL() { SessionManager manager = getSessionManager(); setVaryCookie(getCookieName(manager)); boolean isValid = super.isRequestedSessionIdFromURL(); if (isValid) setHasCookie(); return isValid; } protected final SessionManager getSessionManager() { WebApp app = getWebApp(); if (app != null) return app.getSessionManager(); else return null; } protected final String getCookieName(SessionManager manager) { if (isSecure()) return manager.getCookieName(); else return manager.getSSLCookieName(); } public Cookie []getCookies() { // page depends on any cookie setVaryCookie(null); Cookie []cookies = super.getCookies(); if (cookies != null && cookies.length > 0) setHasCookie(); return cookies; } public Cookie getCookie(String name) { // page depends on this cookie setVaryCookie(name); if (getRequest() instanceof CauchoRequest) return ((CauchoRequest) getRequest()).getCookie(name); Cookie []cookies = super.getCookies(); for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals(name)) { setHasCookie(); return cookies[i]; } } return null; } public void killKeepalive() { } public boolean allowKeepalive() { return true; } /** * Sets the role map. */ public HashMap<String,String> setRoleMap(HashMap<String,String> map) { HashMap<String,String> oldMap = _roleMap; _roleMap = map; return oldMap; } /** * Checks the isUserInRole. */ public boolean isUserInRole(String role) { if (_roleMap != null) { String newRole = _roleMap.get(role); if (newRole != null) role = newRole; } return super.isUserInRole(role); } public boolean authenticate() throws ServletException, IOException { return true; } /** * Frees the adapter for reuse. */ public static void free(RequestAdapter reqAdapt) { reqAdapt.free(); _freeList.free(reqAdapt); } /** * Clears the adapter. */ protected void free() { super.free(); _webApp = null; _response = null; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?