在 ColdFusion 中处理 500 个 JRun servlet [英] Handling 500 JRun servlet in ColdFusion
问题描述
全部 -
有没有办法在 ColdFusion 中处理 500 JRun servlet 错误?我尝试使用 cferror
以及在 ColdFusion 管理员中使用站点范围的处理程序,但它似乎不起作用.
Is there a way to handle a 500 JRun servlet error in ColdFusion? I tried using cferror
as well as using the site-wide handler in ColdFusion admin, but it does not seem to be working.
这是错误信息
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 错误处理程序可以捕获它之前.您将需要在 JRun 级别创建并分配一个错误处理程序.这可以通过编辑 web.xml 文件来完成.(进行更改后,您需要重新启动 JRun 服务器.)
The error that you are receiving is occurring at the JRun level. This type of error occurs before the ColdFusion error handler can trap it. You will need to create and assign an error handler at the JRun level. This can be accomplished by editing the web.xml file. (After making changes you will need to restart the JRun server.)
详细信息可以在此页面上找到,JRun 4 程序员指南 - Servlet 编程技术- 处理异常.
Details can be found on this page, 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 应用程序定义错误处理.
You can define how a web application handles errors using the
error-page
element in the WEB-INF/web.xml file. You can also define error handling for all web applications on the JRun server by addingerror-page
elements to the SERVER-INF/default-web.xml file.
处理 HTTP 错误代码
web.xml 文件中 error-page
的 error-code
子元素定义了 JRun 如何处理 servlet 处理过程中生成的 HTTP 错误代码.
The error-code
subelement of error-page
in the web.xml file defines how JRun handles HTTP error codes generated during the processing of a servlet.
您为 error-code
元素定义 HTTP 状态代码,然后将该代码映射到 location
元素中的目的地.以下示例将 HTTP 500(内部服务器错误)状态代码映射到 servererror.jsp 页面:
You define an HTTP status code for the error-code
element and then map the code to a destination in the location
element. The following example maps the HTTP 500 (Internal Server Error) status code to the servererror.jsp page:
<error-page>
<error-code>500</error-code>
<location>/error-pages/servererror.jsp</location>
</error-page>
下表列出了常见的与错误相关的 HTTP 状态码:
The following table lists common error-related HTTP status codes:
HTTP error code Description
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
408 Request Time-out
500 Internal Server Error
访问错误属性
HttpServletRequest
和 HttpServletResponse
对象提供对错误信息的访问,以便您可以生成有意义的调试信息或有针对性的异常处理程序.有关更多信息和示例,请参阅我上面包含的链接.
The HttpServletRequest
and HttpServletResponse
objects provide access to error information so that you can generate meaningful debugging information or targeted exception handlers. For more information and examples, see the link that I included above.
当抛出错误时,JRun 会在请求对象上设置几个属性.下面对这些属性进行说明:
JRun sets several attributes on the request object when an error is thrown. The following describes these attributes:
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.
javax.servlet.error.status_code
- Defines the HTTP error code, if applicable, as an int object. If the servlet throws an exception not related to HTTP, the status code is usually set to 500 (Internal Server Error).javax.servlet.error.message
- Returns the exception or error message.javax.servlet.error.exception_type
- Defines the type of exception.javax.servlet.error.exception
- Defines the actual exception thrown. You can use the printStackTrace method to view the stack trace of the exception.javax.servlet.error.request_uri
- Defines the request URI prior to the exception being thrown.
这篇关于在 ColdFusion 中处理 500 个 JRun servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!