/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
希望对您有所帮助
编辑:为了把评论讨论提升到这个答案——这可能是你要找的
当你被困在一个没有处理(控制器)和视图(jsp)分离的遗留应用程序中时,你应该将处理限制在jsp的最初指令上,例如位于顶部。在那里,你甚至可以自由重定向(例如发送回响应代码302),更不用说用正确的错误代码来发出错误信号。话虽如此,你应该尽量避免向客户呈现500风格的错误。相反,应用程序应在其级别上显示其错误,而不是在协议级别上。
我记得,在上个世纪,我曾经亲自处理过这样一个应用程序。我们曾经遇到过一些平台差异:一个平台甚至没有缓冲第一个字节,而是立即将其发送回给客户端,使我们的重定向尝试(代码302)变得无效,因为200代码头已经在路上了。唯一有用的办法是确保在处理之前没有发送任何一个字节。由于我们需要一些标签库,我们必须消除标签库指令之间的换行符。有两种方法可以做到这一点:
不要用
<%@ 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") %>
<%@ 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的http连接器文档具有bufferSize、socketBuffer和其它几个选项供nio安装使用-一些用于输入流,一些用于输出流。 AJP连接器似乎不太可配置(如果使用Apache/mod_jk,则需要ajp连接器)。
我希望你要找的缓冲区在其中之一…
编辑:(评论空间太小,所以我选择添加有关您在此处使用AJP的更多信息:)
智慧关于缓冲区大小的问题似乎已经实现(从快速查看tomcat 6.0.18源代码中),在org.apache.catalina.connector.OutputBuffer和org.apache.catalina.connector.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);
}