Джава. Получение IOException после попытки печати на странице JSP с использованием простого планировщика (Timer, TimerTask). Нужна помощь

я пытаюсь сделать простой планировщик, используя классы Timer и TimerTask, см. код ниже, внутри задачи я просто хочу напечатать «Hello, World!» на странице, но выдает исключение IOException: поток закрыт. Пожалуйста помоги!

Код 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)

person Sergey Belinskiy    schedule 09.09.2011    source источник


Ответы (1)


Код Java для JSP запускается до того, как пользователь вообще увидит вашу страницу. К моменту срабатывания Timer JSP уже отправлен в браузер и отрендерен; поток действительно закрыт, потому что он больше не нужен. Это просто невозможно сделать.

Если вы хотите, чтобы на вашей странице в браузере пользователя происходили действия, зависящие от времени, вам нужно сделать это в Javascript, Flash или Java-апплете; все они работают на рабочем столе, в отличие от вашего JSP, который работает на сервере.

person Ernest Friedman-Hill    schedule 09.09.2011