Java的。尝试使用简单的调度程序(Timer,TimerTask)在JSP页面上打印后获取IOException。需要帮忙

时间:2011-09-09 04:08:47

标签: java jsp ioexception timertask

我正在尝试使用Timer和TimerTask类创建简单的调度程序,请参阅下面的代码,我只想打印“Hello,World!”的任务内部。在页面上,但它抛出IOException:Stream关闭。请帮忙!

JSP页面代码:

<% Test t = new Test(out);%>

测试类代码:

public class Test {
    public Test(JspWriter out){
        Timer timer = new Timer();
        LpdbTask lTask = new LpdbTask();
        lTask.out = out;
        timer.scheduleAtFixedRate(lTask, 1000*5, 1000*60);
    }
}

LpdbTask代码:

public class LpdbTask extends TimerTask{
    public JspWriter out;
    public void run(){
        try {
            out.println("Hello, World!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

错误:

java.io.IOException: Stream closed
    at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:312)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342)
    at org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java:468)
    at org.apache.jasper.runtime.JspWriterImpl.println(JspWriterImpl.java:576)
    at scheduler.LpdbTask.run(LpdbTask.java:14)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)

1 个答案:

答案 0 :(得分:3)

JSP的Java代码全部在用户完全看到您的页面之前运行。当Timer触发时,JSP已经被发送到浏览器并呈现;流确实已关闭,因为它不再需要。这不是可能的事情。

如果您希望在用户的浏览器中在页面上发生与时间相关的事情,那么您必须在Javascript,Flash或Java Applet中执行此操作;所有这些都在桌面上运行,而不是在服务器上运行的JSP。