2012-03-01 3 views
0

У меня есть страница jsp, которая используется для генерации многочастных данных (xls). Я не получаю никаких данных на этой странице jsp, но когда я попытался распечатать данные в журнале, я вижу, что все записи извлечены.Тайм-аут запроса, ошибка связи была сброшена при рендеринге страницы jsp

Как обрабатывается запрос.

Request ---(goes to)---> Webservlet ---(delegate to handler)---> Java Class(ReportHandler.java)

Теперь мы называем метод ReportHandler.runReport(), который отвечает, чтобы получить данные из базы данных. Этот метод занимает много времени (почти 12 минут) для получения записей. Как только мы получим данные в наборе результатов, мы передаем его на страницу jsp и используя результирующий набор для генерации отчета.

1> while(rs.next()) {system.out.println("<tr><td>"+partnerId+"</td></tr>")}

Я могу видеть PARTNERID - это получение печатается на консоли. Но jsp не передает данные в браузере. Через 12-14 минут браузер отображает сообщение об ошибке (без кода состояния), время запроса и соединение сбрасываются.

Теперь мой вопрос в том, что соединение было тайм-аутом на сервере, тогда данные не будут печататься на консоли, и если соединение заканчивается на конце клиента, то как это исправить, я попытался исправить тайм-аут на конец клиента, установив значение network.http.connection.timeout в длинное, но без эффекта.

2> I am using out.print(<table><tr><td>"+rs.getInt(partnerId)+"</td></tr></table>")

для генерации отчета, но это не создает каких-либо данных на JSP, хотя data(out.flush()) является силой очищено. Я уверен, что мы получаем данные на странице jsp, но это не рендеринг, потому что System.out.println() выше - это запись записей во время цикла.

Пожалуйста, помогите, поскольку я давно искал решение, но не мог понять, как это решить.

ответ

0

Если вы не можете уменьшить время доступа к чему-то разумному (менее 5-10 секунд, это зависит от типа аудитории), вам лучше изменить свой шаблон. Если это имеет смысл, вы можете запланировать создание документа в указанное время (например, с помощью Quartz). В противном случае вам потребуется какое-то уведомление о сервере. Поскольку длительный опрос является пустой тратой ресурсов, и выделенный кометный сервер не имеет смысла только для этой цели, я предлагаю старый опрос Javascript. В основном у вас есть сценарий, который каждые X секунд проверяет, готов ли документ. Вы измените скрипт на стороне сервера, чтобы следовать этому шаблону, реализовав два разных сценария. Один выполняет фактическую работу, в то время как другой управляет таблицей фоновых процессов и их состояний и уведомляется другим скриптом. Это реализация в псевдокоде

//~client 
every 30 seconds check /document?id=12345 { 
    if (ready) { 
    display URL for download 
    break 
    } else { 
    display loading.gif 
    } 
} 

//~server (worker) not reachable by public URL, it's a background thread 
notify: processing document with id #1234 
.... do processing .... 
notify: finished document with id #1234 

//~server (notifier) has a URL like /document?id=1234 
if (#1234 isReady) 
    output #1234.URL 
else 
    output "processing..." 
Смежные вопросы