有沒有方法可以爲Tomcat中的JSP設置默認緩衝區大小?我知道我可以在每一頁上設置它們,但我希望在某個地方有一個全球選項。Tomcat 6默認緩衝區大小
回答
簡短的回答:第
龍答:也許,有一些黑客...
- 你不得不構建Tomcat你自己編輯這個類後:Jasper constants
- ...或者你可以做一個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),向客戶顯示有用的錯誤消息。應用程序應該在其級別上顯示錯誤,而不是在協議級別上。
我記得,在上個世紀,我自己曾經在這樣的應用程序上工作過。我們遇到了一些平臺差異:一個平臺甚至沒有緩衝第一個字節,而是立即將其發回給客戶,因爲200代碼頭已經在途中,所以我們的重定向嘗試(代碼302)無用。唯一有幫助的是確保在處理之前不能發送單個字節。由於我們需要一些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") %>
這可能看起來很醜陋,但極大地減少了服務器沖洗緩衝區的危險 - 不管它有多大。
希望這會有所幫助。
這是什麼意見討論中之前回答/
的Tomcat docs for the http connector有緩衝區大小,socketBuffer和幾個更多的選項NIO安裝 - 對於一些輸入和某些輸出流。 AJP connector似乎不是可配置的(如果您使用Apache/mod_jk,則需要ajp連接器)。
我希望你要找的緩衝區中這些...
編輯:(註釋空間已經太小了,所以我選擇了添加關於你的評論,你使用AJP一些更多的信息這裏:)
有關緩衝區大小的看法似乎在org.apache.catalina.connector.OutputBuffer和org.apache.catalina.connector中實現(從簡短的看tomcat 6.0.18源代碼)。響應。特別感興趣的是這一段代碼(從響應):
/**
* 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補丁上使用過濾器)
我想到的另一個想法是:如果您使用任何模板系統(比如tile,就像您提到jsp,但速度或其他想到的那樣)你不應該有太多的點,你必須從jsps設置緩衝區大小。在我工作的系統中,我可能會猜測大約10個基本佈局模板會受到影響(與項目大小無關)。
我希望這有助於增加...
- 1. FileStream構造函數和默認緩衝區大小
- 2. 更改Windows下的默認套接字緩衝區大小
- 3. 爲什麼BufferedReader 8192的默認字符緩衝區大小?
- 4. 'BufferedInputStream'的默認緩衝區大小(8KB)的含義? (JAVA)
- 5. 如何更改Android中的默認視頻緩衝區大小
- 6. libstdC++中basic_filebuf的默認緩衝區大小
- 7. 爲什麼默認緩衝區大小在Java IO中爲8k?
- 8. Windows中CreateFile的默認緩衝區大小是多少?
- 9. 默認的緩衝區最大尺寸和默認的SSIS
- 10. 緩衝區大小爲GetAdaptersInfo
- 11. 增加緩衝區大小
- 12. 緩衝區大小改變
- 13. execv的緩衝區大小
- 14. 幀緩衝區大小
- 15. Cloudconnect CSV緩衝區大小
- 16. C Windows緩衝區大小
- 17. 獲取緩衝區大小
- 18. QSqlQuery緩衝區大小
- 19. AES緩衝區大小
- 20. FUSE緩衝區大小?
- 21. sprintf緩衝區大小
- 22. zlib和緩衝區大小
- 23. BufferedInputStream的緩衝區大小
- 24. 超過緩衝區大小?
- 25. telnetlib read_until緩衝區大小
- 26. 大緩衝區開關與小緩衝區開關的成本
- 27. 協議緩衝區:無固定大小緩衝區的符號?
- 28. 調整大小從緩衝區JPEG到另一個緩衝區
- 29. 小緩衝區大小的XAudio2延遲
- 30. 在Tomcat/Jetty上設置套接字發送緩衝區大小
我們使用AJP連接器,所以沒有運氣。 – hlavka 2008-12-26 23:26:00
我編輯了我的答案以反映這方面 - 請閱讀。 – 2008-12-27 12:06:36