簡體   English   中英

Tomcat 6默認緩沖區大小

[英]Tomcat 6 Default Buffer Size

有沒有辦法在Tomcat中為JSP設置默認緩沖區大小? 我知道我可以在每一頁上設置它們,但我希望在某個地方有一個全局選項。

簡答:不。

答案很長:或許,有些黑客攻擊......

  • 編輯此類后,您必須自己構建Tomcat: Jasper常量
  • ...或者你可以做一個Perl派,並一次編輯所有的JSP。 首先備份,因為這是在線編輯:

對於沒有緩沖區集的指令:

/usr/bin/perl -pi -e 's|<%@ page|<%@ page buffer="new" |g' `find . -type f -name '*.jsp'`

對於已設置的緩沖區:

/usr/bin/perl -pi -e 's|buffer="old"|buffer="new"|g' `find . -type f -name '*.jsp'`

(如果您的指令與上述指令不一致,例如更多/更少的空格,請使用更多正則表達式魔法使其工作)

您在網絡上的其他問題: http//www.theserverside.com/discussions/thread.tss?thread_id = 24768

HTH

編輯:將評論討論提升到這個答案 - 這可能是你所追求的

當您使用遺留應用程序時,即使沒有處理(控制器)和視圖(jsp)的分離,您應該將處理限制為jsp上的第一個指令,例如在頂部。 在那里你甚至可以自由地重定向(例如發送回響應代碼302),更不用說用正確的錯誤代碼發出錯誤信號。 也就是說,無論如何,您應該避免向客戶提供500種樣式錯誤。 而是提供漂亮的html頁面(200),向客戶顯示有用的錯誤消息。 應用程序應在其級別上顯示其錯誤,而不是在協議級別上。

我記得,在上個世紀,我自己也在研究過這樣的應用程序。 我們遇到了一些平台差異:一個平台甚至沒有緩沖第一個字節,但立即將其發送回客戶,使我們的重定向嘗試(代碼302)無用,因為200代碼標頭已經在它的路上了。 唯一有幫助的是確保在處理之前不能發送單個字節。 由於我們需要一些taglib,我們必須消除taglib指令之間的換行符。 有兩種方法可以做到這一點:

代替

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<% /* your processing instructions here */ 
   response.sendRedirect("somewhere.jsp") %>

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" 
%><%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"
 %><% /* your processing instructions here */ 
   response.sendRedirect("somewhere.jsp") %>

或使用jsp注釋消除換行符:

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%-- 
--%><%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%><%--
--%><% /* your processing instructions here */ 
   response.sendRedirect("somewhere.jsp") %>

這可能看起來很丑,但大大降低了服務器刷新緩沖區的危險 - 無論它有多大。

希望這可以幫助。


這是在評論討論之前/期間回答的內容

http連接器Tomcat文檔具有bufferSize,socketBuffer和nio安裝的其他幾個選項 - 一些用於輸入,一些用於輸出流。 AJP連接器似乎不是可配置的(如果使用Apache / mod_jk,則需要ajp連接器)。

我希望你正在尋找的緩沖區是......

編輯:(評論空間太小,所以我選擇添加一些關於你在這里使用AJP的評論的更多信息:)

關於緩沖區大小的智慧似乎是在org.apache.catalina.connector.OutputBuffer和org.apache.catalina.connector.Response中實現的(簡要介紹一下tomcat 6.0.18源代碼)。 特別感興趣的是這段代碼(來自Response):

/**
 * Set the Connector through which this Request was received.
 *
 * @param connector The new connector
 */
public void setConnector(Connector connector) {
    this.connector = connector;
    if("AJP/1.3".equals(connector.getProtocol())) {
        // default size to size of one ajp-packet
        outputBuffer = new OutputBuffer(8184);
    } else {
        outputBuffer = new OutputBuffer();
    }
    outputStream = new CoyoteOutputStream(outputBuffer);
    writer = new CoyoteWriter(outputBuffer);
}

根據我對這段代碼的判斷,似乎增加緩沖區大小可能並沒有真正幫助你解決問題。 不是我想說它沒有幫助......當你從jsps增加緩沖區大小時,你是否測量了實際性能? 這樣做有幫助嗎?

有了這個聯系點的知識,您可以通過修補tomcat源或向Web應用程序添加過濾器或根據您的需要調整緩沖區大小的tomcat容器配置來滿足要求。 (我更喜歡任何時候過tomcat補丁的過濾器)

我想到的另一個想法是:如果你使用任何模板系統(比如瓷磚,你提到jsp,但速度或其他的想法),你不應該有太多的點,你必須設置緩沖區大小來自jsps。 在我研究過的系統中,我可能會猜到大約10個基本布局模板會受到影響(與項目大小無關)。

我希望這個添加有助於......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM