Обработка 500 JRun сервлетов в ColdFusion

Все -

Есть ли способ обработки ошибки сервлета 500 JRun в ColdFusion? Я пытался с помощью cferror а также использование обработчика всего сайта в администраторе ColdFusion, но, похоже, он не работает.

Вот сообщение об ошибке

500

ROOT CAUSE:  java.lang.IllegalArgumentException     at
coldfusion.filter.FormScope.parseName(FormScope.java:408)   at
coldfusion.filter.FormScope.parseQueryString(FormScope.java:360)    at
coldfusion.filter.FormScope.parsePostData(FormScope.java:328)   at
coldfusion.filter.FormScope.fillForm(FormScope.java:278)    at
coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:438)   at 
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33)   at
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at
coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)  at 
coldfusion.CfmServlet.service(CfmServlet.java:200)  at
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at 
jrun.servlet.FilterChain.doFilter(FilterChain.java:86)  at
coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)  at
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)  at 
jrun.servlet.FilterChain.doFilter(FilterChain.java:94)  at
jrun.servlet.FilterChain.service(FilterChain.java:101)  at
jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)     at
jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)  at
jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)   at
jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)   at
jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)    at
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)   at 
jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)


javax.servlet.ServletException: ROOT CAUSE: 
java.lang.IllegalArgumentException  at
coldfusion.filter.FormScope.parseName(FormScope.java:408)   at
coldfusion.filter.FormScope.parseQueryString(FormScope.java:360)    at
coldfusion.filter.FormScope.parsePostData(FormScope.java:328)   at
coldfusion.filter.FormScope.fillForm(FormScope.java:278)    at
coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:438)   at 
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33)   at
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at
coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)  at 
coldfusion.CfmServlet.service(CfmServlet.java:200)  at
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at 
jrun.servlet.FilterChain.doFilter(FilterChain.java:86)  at
coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)  at
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)  at 
jrun.servlet.FilterChain.doFilter(FilterChain.java:94)  at
jrun.servlet.FilterChain.service(FilterChain.java:101)  at
jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)     at
jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)  at
jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)   at
jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)   at
jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)    at
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)   at 
jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)  at
coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:70)  at
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)  at 
jrun.servlet.FilterChain.doFilter(FilterChain.java:94)  at
jrun.servlet.FilterChain.service(FilterChain.java:101)  at
jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)     at
jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)  at
jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)   at
jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)   at
jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)    at
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)   at 
jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

1 ответ

Решение

Ошибка, которую вы получаете, происходит на уровне JRun. Этот тип ошибки происходит до того, как обработчик ошибок ColdFusion сможет ее перехватить. Вам нужно будет создать и назначить обработчик ошибок на уровне JRun. Это может быть достигнуто путем редактирования файла web.xml. (После внесения изменений вам нужно будет перезапустить сервер JRun.)

Подробности можно найти на этой странице, Руководство по программированию JRun 4 - Методы программирования сервлетов - Обработка исключений.

Вы можете определить, как веб-приложение обрабатывает ошибки, используя error-page элемент в файле WEB-INF/web.xml. Вы также можете определить обработку ошибок для всех веб-приложений на сервере JRun, добавив error-page элементы файла SERVER-INF/default-web.xml.

Обработка кодов ошибок HTTP

error-code подэлемент error-page в файле web.xml определяет, как JRun обрабатывает коды ошибок HTTP, сгенерированные во время обработки сервлета.

Вы определяете код состояния HTTP для error-code элемент, а затем сопоставить код с пунктом назначения в location элемент. В следующем примере сопоставляется код состояния HTTP 500 (внутренняя ошибка сервера) со страницей servererror.jsp:

<error-page>
    <error-code>500</error-code>
    <location>/error-pages/servererror.jsp</location>
</error-page>

В следующей таблице перечислены распространенные коды ошибок HTTP, связанные с ошибками:

HTTP error code    Description
  400              Bad Request
  401              Unauthorized
  403              Forbidden
  404              Not Found
  408              Request Time-out
  500              Internal Server Error

Доступ к атрибутам ошибок

HttpServletRequest а также HttpServletResponse объекты предоставляют доступ к информации об ошибках, так что вы можете генерировать значимую информацию отладки или целевые обработчики исключений. Для получения дополнительной информации и примеров, смотрите ссылку, которую я включил выше.

JRun устанавливает несколько атрибутов объекта запроса при возникновении ошибки. Ниже описаны эти атрибуты:

  • javax.servlet.error.status_code - Определяет код ошибки HTTP, если это применимо, как объект int. Если сервлет генерирует исключение, не связанное с HTTP, код состояния обычно устанавливается равным 500 (Внутренняя ошибка сервера).
  • javax.servlet.error.message - Возвращает исключение или сообщение об ошибке.
  • javax.servlet.error.exception_type - Определяет тип исключения.
  • javax.servlet.error.exception - Определяет фактическое сгенерированное исключение. Вы можете использовать метод printStackTrace для просмотра трассировки стека исключения.
  • javax.servlet.error.request_uri - Определяет URI запроса до выдачи исключения.
Другие вопросы по тегам