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

📄 internaloutputbuffer.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        // Determine the header buffer used for next request        buf = headerBuffer;        // Recycle filters        for (int i = 0; i <= lastActiveFilter; i++) {            activeFilters[i].recycle();        }        // Reset pointers        pos = 0;        lastActiveFilter = -1;        committed = false;        finished = false;    }    /**     * End request.     *      * @throws IOException an undelying I/O error occured     */    public void endRequest()        throws IOException {        if (!committed) {            // Send the connector a request for commit. The connector should            // then validate the headers, send them (using sendHeader) and             // set the filters accordingly.            response.action(ActionCode.ACTION_COMMIT, null);        }        if (finished)            return;        if (lastActiveFilter != -1)            activeFilters[lastActiveFilter].end();        finished = true;    }    // ------------------------------------------------ HTTP/1.1 Output Methods    /**     * Send an acknoledgement.     */    public void sendAck()        throws IOException {        if (!committed)            outputStream.write(Constants.ACK);    }    /**     * Send the response status line.     */    public void sendStatus() {        // Write protocol name        write("HTTP/1.1 ");        // Write status code        int status = response.getStatus();	switch (status) {	case 200:            write("200");	    break;	case 400:            write("400");	    break;	case 404:            write("404");	    break;        default:	    write(status);	}        write(" ");        // Write message        if (response.getMessage() == null) {            write(HttpMessages.getMessage(status));        } else {            write(response.getMessage());        }        // End the response status line        write(Constants.CRLF_BYTES);    }    /**     * Send a header.     *      * @param name Header name     * @param value Header value     */    public void sendHeader(MessageBytes name, MessageBytes value) {        write(name);        write(": ");        write(value);        write(Constants.CRLF_BYTES);    }    /**     * Send a header.     *      * @param name Header name     * @param value Header value     */    public void sendHeader(ByteChunk name, ByteChunk value) {        write(name);        write(": ");        write(value);        write(Constants.CRLF_BYTES);    }    /**     * Send a header.     *      * @param name Header name     * @param value Header value     */    public void sendHeader(String name, String value) {        write(name);        write(": ");        write(value);        write(Constants.CRLF_BYTES);    }    /**     * End the header block.     */    public void endHeaders() {        write(Constants.CRLF);    }    // --------------------------------------------------- OutputBuffer Methods    /**     * Write the contents of a byte chunk.     *      * @param chunk byte chunk     * @return number of bytes written     * @throws IOException an undelying I/O error occured     */    public int doWrite(ByteChunk chunk, Response res)         throws IOException {        if (!committed) {            // Send the connector a request for commit. The connector should            // then validate the headers, send them (using sendHeaders) and             // set the filters accordingly.            response.action(ActionCode.ACTION_COMMIT, null);        }        if (lastActiveFilter == -1)            return outputStreamOutputBuffer.doWrite(chunk, res);        else            return activeFilters[lastActiveFilter].doWrite(chunk, res);    }    // ------------------------------------------------------ Protected Methods    /**     * Commit the response.     *      * @throws IOException an undelying I/O error occured     */    protected void commit()        throws IOException {        // The response is now committed        committed = true;        response.setCommitted(true);        if (pos > 0) {            // Sending the response header buffer            outputStream.write(buf, 0, pos);            outputStream.flush(); // Is it really necessary ?        }    }    /**     * This method will write the contents of the specyfied message bytes      * buffer to the output stream, without filtering. This method is meant to     * be used to write the response header.     *      * @param mb data to be written     */    protected void write(MessageBytes mb) {        mb.toBytes();        if (mb.getType() == MessageBytes.T_BYTES) {            ByteChunk bc = mb.getByteChunk();            write(bc);        } else {            write(mb.toString());        }    }    /**     * This method will write the contents of the specyfied message bytes      * buffer to the output stream, without filtering. This method is meant to     * be used to write the response header.     *      * @param bc data to be written     */    protected void write(ByteChunk bc) {        // Writing the byte chunk to the output buffer        System.arraycopy(bc.getBytes(), bc.getStart(), buf, pos,                         bc.getLength());        pos = pos + bc.getLength();    }    /**     * This method will write the contents of the specyfied byte      * buffer to the output stream, without filtering. This method is meant to     * be used to write the response header.     *      * @param b data to be written     */    protected void write(byte[] b) {        // Writing the byte chunk to the output buffer        System.arraycopy(b, 0, buf, pos, b.length);        pos = pos + b.length;    }    /**     * This method will write the contents of the specyfied String to the      * output stream, without filtering. This method is meant to be used to      * write the response header.     *      * @param s data to be written     */    protected void write(String s) {        if (s == null)            return;        // From the Tomcat 3.3 HTTP/1.0 connector        int len = s.length();        for (int i = 0; i < len; i++) {            char c = s.charAt (i);            // Note:  This is clearly incorrect for many strings,            // but is the only consistent approach within the current            // servlet framework.  It must suffice until servlet output            // streams properly encode their output.            if ((c & 0xff00) != 0) {                // High order byte must be zero                //log("Header character is not iso8859_1, " +                //"not supported yet: " + c, Log.ERROR ) ;            }            buf[pos++] = (byte) c;        }    }    /**     * This method will print the specified integer to the output stream,      * without filtering. This method is meant to be used to write the      * response header.     *      * @param i data to be written     */    protected void write(int i) {        write(String.valueOf(i));    }    // ----------------------------------- OutputStreamOutputBuffer Inner Class    /**     * This class is an output buffer which will write data to an output     * stream.     */    protected class OutputStreamOutputBuffer         implements OutputBuffer {        /**         * Write chunk.         */        public int doWrite(ByteChunk chunk, Response res)             throws IOException {            outputStream.write(chunk.getBuffer(), chunk.getStart(),                                chunk.getLength());            return chunk.getLength();        }    }}

⌨️ 快捷键说明

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