有没有方法可以为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