现象:
1,内容区显示空白或部分页面;
2,“查看源文件”,里面代码不完整;
解决方式:
1,在jsp第一行添加 "<%@ page buffer="108kb" autoFlush="true" %>",如果还是不行,增加108kb这个数值,一直到页面出现jsp抛错的堆栈信息。
2,根据堆栈信息解决此问题。
个人认为很多jsp页面问题都可以通过此方法寻求解决方案。
原因以及本质:
服务端的输出缓冲区
缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:
1)该jsp网页已完成信息的输出
2)输出缓冲区已满
3)jsp中调用了out.flush()或response.flushbuffer()
输出缓冲区的大小可以用: 或response.setbuffersize()设置,如下:
1)设置输出缓冲区的大小为1kb。 或response.setbuffersize(1);
2)设置输出缓冲区的大小为0,即不缓冲。 或response.setbuffersize(0);
用response.getbuffersize()或out.getbuffersize()可取的输出缓冲区的大小,单位为字节. 用response.iscommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是true则已将数据输出到客户端,是false则还没有.
1,jsp代码有bug[或者缺少相关配置文件,相关依赖类];
2,当页面buffer用得差不多的时候,这时候如果有运行时异常,tomcat处理不了时就会将运行时异常信息输出到jsp页面的buffer区,导致有部分内容还停留在buffer,而此时页面在还未完成网页输出,缓冲区未满,也未调用flush的情况下不会继续处理后面的网页信息输出,tomcat将此时已经处理的部分代码返回给浏览器去解析,由于内容不完整,导致了出现 空页面或部分页面。
3,可以调用 <%=out.getRemaining() %> 方法查看jsp的buffer剩余量。