Обработка 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 запроса до выдачи исключения.