JBoss5+Struts1 Ajax响应数据超8k被截断 配置求助
针对你遇到的问题,调整maxHttpHeaderSize无效是因为这个参数仅控制请求头的大小,而响应截断的根源在其他配置或代码环节,以下是需要检查和调整的关键点:
调整Struts2 JSON Result的缓冲区大小
Struts2的JSON Result默认输出缓冲区可能为8k,超过阈值就会触发截断。在struts.xml的JSON Result配置中增加bufferSize参数,设置为更大的值(比如64k):<action name="yourTargetAction" class="com.yourpackage.YourActionClass"> <result type="json"> <param name="bufferSize">65536</param> <!-- 按需调整为合适的缓冲区大小 --> </result> </action>修改JBoss(Tomcat) Connector的响应缓冲区配置
JBoss5底层基于Tomcat,需调整Connector的socketBufferSize参数(控制响应输出的缓冲区大小),同时保留已调整的maxHttpHeaderSize设置。在JBoss的server/default/deploy/jbossweb.sar/server.xml中修改Connector节点:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxHttpHeaderSize="16384" <!-- 保持已配置的请求头大小 --> socketBufferSize="65536" /> <!-- 增大响应输出缓冲区 -->排查Action代码中的硬编码限制
检查你的Action类是否手动设置了Content-Length响应头,如果代码中硬编码了固定值(比如8192),会强制截断响应。确保移除这类手动设置,让容器自动计算并设置正确的响应长度:// 错误示例:请勿手动设置固定长度 // response.setContentLength(8192);确认Stream Result的配置(若自定义输出)
如果你的Action通过Stream Result输出JSON,需调整Stream Result的bufferSize参数,且避免手动设置contentLength(让容器自动处理长度计算):<result type="stream"> <param name="contentType">application/json</param> <param name="bufferSize">65536</param> <!-- 不要设置固定的contentLength参数 --> </result>
调整完成后重启JBoss,测试大体积JSON响应是否正常输出。
内容的提问来源于stack exchange,提问作者Sérgio Abreu

