我在实际应用中要在一个体积较大的jsp中处理一个很耗时的SQL语句,结果SQL运行时间较长后,不等运行完页面就显示出来了,但只显示上面一半代码,下面都是空白的。
然后我测试了半天,发现只要是在较大的JSP文件中有一句耗时的语句(31秒以上),整个页面最后就无响应了。
我用的XP,IE6.0,tomcat6.0,JDK5.0。在IE7还有linux上测也是如此。
不知这种JSP超时错误是什么原因。(和session的timeout问题不是一码事)。
为了测试,我做了一个最简单的JSP,里面写了一些废话用来增加JSP体积,放一个new Thread().sleep(31000)来模拟耗时的SQL语句。我最后测的是30秒可以显示出来,31秒就显示不出页面。
请大家看看这是怎么回事?!
<html>
<head>
<title></title>
<script>
// 只是为了增加jsp文件大小的js语句,应用中一般是很大的HTML或JS代码
function size_consuming(str) {
document.write(str);
}function size_consuming(str) {
document.write(str);
}function size_consuming(str) {
document.write(str);
}
..........放300个这个方法来加大体积,一共1000行以上
</script>
<script>
document.write("1111111111111111111111<br/>2222222222222222222222<br/>3333333333333333333333<br/>4444444444444444444444<br/>");
</script>
<%
// 只是为了增加jsp文件打开时间的js语句,应用中一般是复杂耗时的SQL语句
        try {
            new Thread().sleep(31000);
            System.out.println("sleeeeeeeeeeeeeeeep");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
%>
</head>
<body><br/>
5555555555555555555555<br/>
6666666666666666666666<br/>
7777777777777777777777<br/>
8888888888888888888888<br/>
</body>
</html>

解决方案 »

  1.   

    这个JSP和数据库没关系,也报错。也许是tomcat有设置,但是我从来没听说过单个JSP有这个设置,网上也没找到。
      

  2.   

    这么费时间的查询操作 应该封装进一个线程去执行
    该线程加入用户的SESSION中
    前台页面 在间隔时间中提交后台要求查询运行结果
    后台检查session中的 查询操作的状态 
    然后引导用户是继续到一个等待查询的页面中 
    或者是一个返回查询结果的页面 
      

  3.   

    写线程是个好方法!
    不过我这个应用一般情况下查询不会超过10秒的,我只是在测试数据库量最大时的问题,所以做线程是不必要的。
    还有什么好办法么?
    这个显示不出页面是JSP的问题?
    得给SUN发信啊?