【问题标题】:Handling 500 JRun servlet in ColdFusion在 ColdFusion 中处理 500 个 JRun servlet
【发布时间】:2013-03-08 14:20:54
【问题描述】:

全部 -

有没有办法在 ColdFusion 中处理 500 JRun servlet 错误?我尝试使用 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)

【问题讨论】:

  • 如果它是一个 JRun 错误,那么它很可能在任何 ColdFusion 处理程序捕获它之前发生。你能发布实际的错误信息吗?
  • Miguel-F - 我用错误消息编辑了我的问题。
  • 你知道是什么导致了这个错误并且只想知道是否有办法捕捉它吗?还是您想找出导致此错误的原因?
  • 阅读此页面,看看它是否适合您,JRun 4 Programmers Guide - Servlet Programming Techniques - Handling exceptions。我自己没有这样做,但也许其他人会加入。
  • (编辑修复错别字)@Miguel-F 是正确的。该错误发生在 CF 进入应用程序文件之前,因此cferror 不会捕获它。在 web.xml 文件中指定错误页面并重新启动。那应该这样做。即<error-page><error-code>500</error-code><location>/someErrorPage.htm</location>‌​</error-page>。有关详细信息,请参阅他的链接。

标签: coldfusion coldfusion-8 jrun


【解决方案1】:

您收到的错误发生在 JRun 级别。这种类型的错误发生在 ColdFusion 错误处理程序可以捕获它之前。您将需要在 JRun 级别创建并分配一个错误处理程序。这可以通过编辑 web.xml 文件来完成。 (进行更改后,您需要重新启动 JRun 服务器。)

详情可以在此页面上找到,JRun 4 Programmers Guide - Servlet Programming Techniques - Handling exceptions

您可以使用 WEB-INF/web.xml 文件中的 error-page 元素定义 Web 应用程序如何处理错误。您还可以通过将error-page 元素添加到 SERVER-INF/default-web.xml 文件来为 JRun 服务器上的所有 Web 应用程序定义错误处理。

处理 HTTP 错误代码

web.xml 文件中error-pageerror-code 子元素定义了JRun 如何处理servlet 处理过程中生成的HTTP 错误代码。

您为 error-code 元素定义 HTTP 状态代码,然后将该代码映射到 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

访问错误属性

HttpServletRequestHttpServletResponse 对象提供对错误信息的访问,以便您可以生成有意义的调试信息或有针对性的异常处理程序。有关更多信息和示例,请参阅我上面包含的链接。

当抛出错误时,JRun 会在请求对象上设置几个属性。下面对这些属性进行说明:

  • javax.servlet.error.status_code - 将 HTTP 错误代码(如果适用)定义为 int 对象。如果 servlet 抛出与 HTTP 无关的异常,则状态码通常设置为 500(内部服务器错误)。
  • javax.servlet.error.message - 返回异常或错误消息。
  • javax.servlet.error.exception_type - 定义异常类型。
  • javax.servlet.error.exception - 定义实际抛出的异常。您可以使用 printStackTrace 方法查看异常的堆栈跟踪。
  • javax.servlet.error.request_uri - 在抛出异常之前定义请求 URI。

【讨论】:

  • 谢谢米格尔。我在本地实例上复制了错误,并通过更新 default-web.xml 文件使自定义错误页面正常工作。我不确定我们将如何在 prod 版本上处理这个问题(因为我无权访问这些文件)。但我至少知道发生了什么。
  • 请求服务器管理员以同样的方式添加自定义jrun错误页面。
  • 有人知道503错误Jrun Servlet Error吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2010-11-06
  • 2010-12-03
  • 1970-01-01
  • 2023-03-28
  • 2014-09-18
  • 2011-01-20
相关资源
最近更新 更多