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

📄 url.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if (file == null)            return ("");        return (this.file);    }    /**     * Return the host name part of the URL.     */    public String getHost() {        return (this.host);    }    /**     * Return the path part of the URL.     */    public String getPath() {        if (this.path == null)            return ("");        return (this.path);    }    /**     * Return the port number part of the URL.     */    public int getPort() {        return (this.port);    }    /**     * Return the protocol name part of the URL.     */    public String getProtocol() {        return (this.protocol);    }    /**     * Return the query part of the URL.     */    public String getQuery() {        return (this.query);    }    /**     * Return the reference part of the URL.     */    public String getRef() {        return (this.ref);    }    /**     * Return the user info part of the URL.     */    public String getUserInfo() {        return (this.userInfo);    }    /**     * Normalize the <code>path</code> (and therefore <code>file</code>)     * portions of this URL.     * <p>     * <strong>NOTE</strong> - This method is not part of the public API     * of <code>java.net.URL</code>, but is provided as a value added     * service of this implementation.     *     * @exception MalformedURLException if a normalization error occurs,     *  such as trying to move about the hierarchical root     */    public void normalize() throws MalformedURLException {        // Special case for null path        if (path == null) {            if (query != null)                file = "?" + query;            else                file = "";            return;        }        // Create a place for the normalized path        String normalized = path;        if (normalized.equals("/.")) {            path = "/";            if (query != null)                file = path + "?" + query;            else                file = path;            return;        }        // Normalize the slashes and add leading slash if necessary        if (normalized.indexOf('\\') >= 0)            normalized = normalized.replace('\\', '/');        if (!normalized.startsWith("/"))            normalized = "/" + normalized;        // Resolve occurrences of "//" in the normalized path        while (true) {            int index = normalized.indexOf("//");            if (index < 0)                break;            normalized = normalized.substring(0, index) +                normalized.substring(index + 1);        }        // Resolve occurrences of "/./" in the normalized path        while (true) {            int index = normalized.indexOf("/./");            if (index < 0)                break;            normalized = normalized.substring(0, index) +                normalized.substring(index + 2);        }        // Resolve occurrences of "/../" in the normalized path        while (true) {            int index = normalized.indexOf("/../");            if (index < 0)                break;            if (index == 0)                throw new MalformedURLException                    ("Invalid relative URL reference");            int index2 = normalized.lastIndexOf('/', index - 1);            normalized = normalized.substring(0, index2) +                normalized.substring(index + 3);        }        // Resolve occurrences of "/." at the end of the normalized path        if (normalized.endsWith("/."))            normalized = normalized.substring(0, normalized.length() - 1);        // Resolve occurrences of "/.." at the end of the normalized path        if (normalized.endsWith("/..")) {            int index = normalized.length() - 3;            int index2 = normalized.lastIndexOf('/', index - 1);            if (index2 < 0)                throw new MalformedURLException                    ("Invalid relative URL reference");            normalized = normalized.substring(0, index2 + 1);        }        // Return the normalized path that we have completed        path = normalized;        if (query != null)            file = path + "?" + query;        else            file = path;    }    /**     * Compare two URLs, excluding the "ref" fields.  Returns <code>true</code>     * if this <code>URL</code> and the <code>other</code> argument both refer     * to the same resource.  The two <code>URLs</code> might not both contain     * the same anchor.     */    public boolean sameFile(URL other) {        if (!compare(protocol, other.getProtocol()))            return (false);        if (!compare(host, other.getHost()))            return (false);        if (port != other.getPort())            return (false);        if (!compare(file, other.getFile()))            return (false);        return (true);    }    /**     * Return a string representation of this URL.  This follow the rules in     * RFC 2396, Section 5.2, Step 7.     */    public String toExternalForm() {        StringBuffer sb = new StringBuffer();        if (protocol != null) {            sb.append(protocol);            sb.append(":");        }        if (authority != null) {            sb.append("//");            sb.append(authority);        }        if (path != null)            sb.append(path);        if (query != null) {            sb.append('?');            sb.append(query);        }        if (ref != null) {            sb.append('#');            sb.append(ref);        }        return (sb.toString());    }    /**     * Return a string representation of this object.     */    public String toString() {        StringBuffer sb = new StringBuffer("URL[");        sb.append("authority=");        sb.append(authority);        sb.append(", file=");        sb.append(file);        sb.append(", host=");        sb.append(host);        sb.append(", port=");        sb.append(port);        sb.append(", protocol=");        sb.append(protocol);        sb.append(", query=");        sb.append(query);        sb.append(", ref=");        sb.append(ref);        sb.append(", userInfo=");        sb.append(userInfo);        sb.append("]");        return (sb.toString());        //        return (toExternalForm());    }    // -------------------------------------------------------- Private Methods    /**     * Compare to String values for equality, taking appropriate care if one     * or both of the values are <code>null</code>.     *     * @param first First string     * @param second Second string     */    private boolean compare(String first, String second) {        if (first == null) {            if (second == null)                return (true);            else                return (false);        } else {            if (second == null)                return (false);            else                return (first.equals(second));        }    }    /**     * Parse the specified portion of the string representation of a URL,     * assuming that it has a format similar to that for <code>http</code>.     *     * <p><strong>FIXME</strong> - This algorithm can undoubtedly be optimized     * for performance.  However, that needs to wait until after sufficient     * unit tests are implemented to guarantee correct behavior with no     * regressions.</p>     *     * @param spec String representation being parsed     * @param start Starting offset, which will be just after the ':' (if     *  there is one) that determined the protocol name     * @param limit Ending position, which will be the position of the '#'     *  (if there is one) that delimited the anchor     *     * @exception MalformedURLException if a parsing error occurs     */    private void parse(String spec, int start, int limit)        throws MalformedURLException {        // Trim the query string (if any) off the tail end        int question = spec.lastIndexOf('?', limit - 1);        if ((question >= 0) && (question < limit)) {            query = spec.substring(question + 1, limit);            limit = question;        } else {            query = null;        }        // Parse the authority section        if (spec.indexOf("//", start) == start) {            int pathStart = spec.indexOf("/", start + 2);            if ((pathStart >= 0) && (pathStart < limit)) {                authority = spec.substring(start + 2, pathStart);                start = pathStart;            } else {                authority = spec.substring(start + 2, limit);                start = limit;            }            if (authority.length() > 0) {                int at = authority.indexOf('@');                if( at >= 0 ) {                    userInfo = authority.substring(0,at);                }                int colon = authority.indexOf(':', at+1);                if (colon >= 0) {                    try {                        port =                            Integer.parseInt(authority.substring(colon + 1));                    } catch (NumberFormatException e) {                        throw new MalformedURLException(e.toString());                    }                    host = authority.substring(at+1, colon);                } else {                    host = authority.substring(at+1);                    port = -1;                }            }        }        // Parse the path section        if (spec.indexOf("/", start) == start) {     // Absolute path            path = spec.substring(start, limit);            if (query != null)                file = path + "?" + query;            else                file = path;            return;        }        // Resolve relative path against our context's file        if (path == null) {            if (query != null)                file = "?" + query;            else                file = null;            return;        }        if (!path.startsWith("/"))            throw new MalformedURLException                ("Base path does not start with '/'");        if (!path.endsWith("/"))            path += "/../";        path += spec.substring(start, limit);        if (query != null)            file = path + "?" + query;        else            file = path;        return;    }}

⌨️ 快捷键说明

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