⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coyoterequest.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    }    /**     * Return the path information associated with this Request.     */    public String getPathInfo() {        return (pathInfo);    }    /**     * Return the extra path information for this request, translated     * to a real path.     */    public String getPathTranslated() {        if (context == null)            return (null);        if (pathInfo == null) {            return (null);        } else {            return (context.getServletContext().getRealPath(pathInfo));        }    }    /**     * Return the query string associated with this request.     */    public String getQueryString() {        String queryString = coyoteRequest.queryString().toString();        if (queryString.equals("")) {            return (null);        } else {            return queryString;        }    }    /**     * Return the name of the remote user that has been authenticated     * for this Request.     */    public String getRemoteUser() {        if (userPrincipal != null) {            return (userPrincipal.getName());        } else {            return (null);        }    }    /**     * Return the session identifier included in this request, if any.     */    public String getRequestedSessionId() {        return (requestedSessionId);    }    /**     * Return the request URI for this request.     */    public String getRequestURI() {        return coyoteRequest.requestURI().toString();    }    /**     * Reconstructs the URL the client used to make the request.     * The returned URL contains a protocol, server name, port     * number, and server path, but it does not include query     * string parameters.     * <p>     * Because this method returns a <code>StringBuffer</code>,     * not a <code>String</code>, you can modify the URL easily,     * for example, to append query parameters.     * <p>     * This method is useful for creating redirect messages and     * for reporting errors.     *     * @return A <code>StringBuffer</code> object containing the     *  reconstructed URL     */    public StringBuffer getRequestURL() {        StringBuffer url = new StringBuffer();        String scheme = getScheme();        int port = getServerPort();        if (port < 0)            port = 80; // Work around java.net.URL bug        url.append(scheme);        url.append("://");        url.append(getServerName());        if ((scheme.equals("http") && (port != 80))            || (scheme.equals("https") && (port != 443))) {            url.append(':');            url.append(port);        }        url.append(getRequestURI());        return (url);    }    /**     * Return the portion of the request URI used to select the servlet     * that will process this request.     */    public String getServletPath() {        return (servletPath);    }    /**     * Return the session associated with this Request, creating one     * if necessary.     */    public HttpSession getSession() {        return (getSession(true));    }    /**     * Return the session associated with this Request, creating one     * if necessary and requested.     *     * @param create Create a new session if one does not exist     */    public HttpSession getSession(boolean create) {                return doGetSession(create);    }    /**     * Return <code>true</code> if the session identifier included in this     * request came from a cookie.     */    public boolean isRequestedSessionIdFromCookie() {        if (requestedSessionId != null)            return (requestedSessionCookie);        else            return (false);    }    /**     * Return <code>true</code> if the session identifier included in this     * request came from the request URI.     */    public boolean isRequestedSessionIdFromURL() {        if (requestedSessionId != null)            return (requestedSessionURL);        else            return (false);    }    /**     * Return <code>true</code> if the session identifier included in this     * request came from the request URI.     *     * @deprecated As of Version 2.1 of the Java Servlet API, use     *  <code>isRequestedSessionIdFromURL()</code> instead.     */    public boolean isRequestedSessionIdFromUrl() {        return (isRequestedSessionIdFromURL());    }    /**     * Return <code>true</code> if the session identifier included in this     * request identifies a valid session.     */    public boolean isRequestedSessionIdValid() {        if (requestedSessionId == null)            return (false);        if (context == null)            return (false);        Manager manager = context.getManager();        if (manager == null)            return (false);        Session session = null;        try {            session = manager.findSession(requestedSessionId);        } catch (IOException e) {            session = null;        }        if ((session != null) && session.isValid())            return (true);        else            return (false);    }    /**     * Return <code>true</code> if the authenticated user principal     * possesses the specified role name.     *     * @param role Role name to be validated     */    public boolean isUserInRole(String role) {        // Have we got an authenticated principal at all?        if (userPrincipal == null)            return (false);        // Identify the Realm we will use for checking role assignmenets        if (context == null)            return (false);        Realm realm = context.getRealm();        if (realm == null)            return (false);        // Check for a role alias defined in a <security-role-ref> element        if (wrapper != null) {            String realRole = wrapper.findSecurityReference(role);            if ((realRole != null) &&                realm.hasRole(userPrincipal, realRole))                return (true);        }        // Check for a role defined directly as a <security-role>        return (realm.hasRole(userPrincipal, role));    }    /**     * Return the principal that has been authenticated for this Request.     */    public Principal getUserPrincipal() {        return (userPrincipal);    }    // ------------------------------------------------------ Protected Methods    protected HttpSession doGetSession(boolean create) {        // There cannot be a session if no context has been assigned yet        if (context == null)            return (null);        // Return the current session if it exists and is valid        if ((session != null) && !session.isValid())            session = null;        if (session != null)            return (session.getSession());        // Return the requested session if it exists and is valid        Manager manager = null;        if (context != null)            manager = context.getManager();        if (manager == null)            return (null);      // Sessions are not supported        if (requestedSessionId != null) {            try {                session = manager.findSession(requestedSessionId);            } catch (IOException e) {                session = null;            }            if ((session != null) && !session.isValid())                session = null;            if (session != null) {                return (session.getSession());            }        }        // Create a new session if requested and the response is not committed        if (!create)            return (null);        if ((context != null) && (response != null) &&            context.getCookies() &&            response.getResponse().isCommitted()) {            throw new IllegalStateException              (sm.getString("coyoteRequest.sessionCreateCommitted"));        }        session = manager.createSession();        // Creating a new session cookie based on that session        if ((session != null) && (getContext() != null)            && getContext().getCookies()) {            Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,                                       session.getId());            cookie.setMaxAge(-1);            String contextPath = null;            if (context != null)                contextPath = context.getPath();            if ((contextPath != null) && (contextPath.length() > 0))                cookie.setPath(contextPath);            else                cookie.setPath("/");            if (isSecure())                cookie.setSecure(true);            ((HttpServletResponse) response).addCookie(cookie);        }        if (session != null)            return (session.getSession());        else            return (null);    }    /**     * Parse request parameters.     */    protected void parseRequestParameters() {        requestParametersParsed = true;        Parameters parameters = coyoteRequest.getParameters();        String enc = coyoteRequest.getCharacterEncoding();        if (enc != null) {            parameters.setEncoding(enc);        } else {            parameters.setEncoding                (org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);        }        parameters.handleQueryParameters();        if (usingInputStream || usingReader)            return;        if (!getMethod().equalsIgnoreCase("POST"))            return;        String contentType = getContentType();        if (contentType == null)            contentType = "";        int semicolon = contentType.indexOf(';');        if (semicolon >= 0) {            contentType = contentType.substring(0, semicolon).trim();        } else {            contentType = contentType.trim();        }        if (!("application/x-www-form-urlencoded".equals(contentType)))            return;        int len = getContentLength();        if (len > 0) {            try {                byte[] formData = null;                if (len < CACHED_POST_LEN) {                    if (postData == null)                        postData = new byte[CACHED_POST_LEN];                    formData = postData;                } else {                    formData = new byte[len];                }                readPostBody(formData, len);                parameters.processParameters(formData, 0, len);            } catch (Throwable t) {                ; // Ignore            }        }    }    /**     * Read post body in an array.     */    protected int readPostBody(byte body[], int len)        throws IOException {        int offset = 0;        do {            int inputLen = getStream().read(body, offset, len - offset);            if (inputLen <= 0) {                return offset;            }            offset += inputLen;        } while ((len - offset) > 0);        return len;    }    /**     * Parse request locales.     */    protected void parseLocales() {        localesParsed = true;        Enumeration values = getHeaders("accept-language");        while (values.hasMoreElements()) {            String value = values.nextElement().toString();            parseLocalesHeader(value);        }    }    /**     * Parse accept-language header value.     */    protected void parseLocalesHeader(String value) {        // Store the accumulated languages that have been requested in        // a local collection, sorted by the quality value (so we can        // add Locales in descending order).  The values will be ArrayLists        // containing the corresponding Locales to be added        TreeMap locales = new TreeMap();        // Preprocess the value to remove all whitespace        int white = value.indexOf(' ');        if (white < 0)            white = value.indexOf('\t');        if (white >= 0) {            StringBuffer sb = new StringBuffer();            int len = value.length();            for (int i = 0; i < len; i++) {                char ch = value.charAt(i);                if ((ch != ' ') && (ch != '\t'))                    sb.append(ch);            }            value = sb.toString();        }        // Process each comma-delimited language specification        parser.setString(value);        // ASSERT: parser is available to us        int length = parser.getLength();        while (true) {            // Extract the next comma-delimited entry            int start = parser.getIndex();            if (start >= length)                break;            int end = parser.findChar(',');            String entry = parser.extract(start, end).trim();            parser.advance();   // For the following entry            // Extract the quality factor for this entry            double quality = 1.0;            int semi = entry.indexOf(";q=");            if (semi >= 0) {                try {                    quality = Double.parseDouble(entry.substring(semi + 3));                } catch (NumberFormatException e) {                    quality = 0.0;                }                entry = entry.substring(0, semi);            }            // Skip entries we are not going to keep track of            if (quality < 0.00005)                continue;       // Zero (or effectively zero) quality factors            if ("*".equals(entry))                continue;       // FIXME - "*" entries are not handled            // Extract the language and country for this entry            String language = null;            String country = null;            String variant = null;            int dash = entry.indexOf('-');            if (dash < 0) {                language = entry;                country = "";                variant = "";            } else {                language = entry.substring(0, dash);                country = entry.substring(dash + 1);                int vDash = country.indexOf('-');                if (vDash > 0) {                    String cTemp = country.substring(0, vDash);                    variant = country.substring(vDash + 1);                    country = cTemp;                } else {                    variant = "";                }            }            // Add a new Locale to the list of Locales for this quality level            Locale locale = new Locale(language, country, variant);            Double key = new Double(-quality);  // Reverse the order            ArrayList values = (ArrayList) locales.get(key);            if (values == null) {                values = new ArrayList();                locales.put(key, values);            }            values.add(locale);        }        // Process the quality values in highest->lowest order (due to        // negating the Double value when creating the key)        Iterator keys = locales.keySet().iterator();        while (keys.hasNext()) {            Double key = (Double) keys.next();            ArrayList list = (ArrayList) locales.get(key);            Iterator values = list.iterator();            while (values.hasNext()) {                Locale locale = (Locale) values.next();                addLocale(locale);            }        }    }    /**     * Log a message on the Logger associated with our Container (if any).     *     * @param message Message to be logged     */    private void log(String message) {        Logger logger = connector.getContainer().getLogger();        String localName = "CoyoteRequest";        if (logger != null)            logger.log(localName + " " + message);        else            System.out.println(localName + " " + message);    }    /**     * Log a message on the Logger associated with our Container (if any).     *     * @param message Message to be logged     * @param throwable Associated exception     */    private void log(String message, Throwable throwable) {        Logger logger = connector.getContainer().getLogger();        String localName = "CoyoteRequest";        if (logger != null)            logger.log(localName + " " + message, throwable);        else {            System.out.println(localName + " " + message);            throwable.printStackTrace(System.out);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -