【问题标题】:Tomcat: Handle Servlet ExceptionTomcat:处理 Servlet 异常
【发布时间】:2010-12-24 04:29:39
【问题描述】:
我正在使用 PECL-servlet(PHP/PECL-version 5.2.5)在我的 Tomcat 服务器上设置 PHP。服务器现在成功处理了真正的 PHP 文件,但是我遇到了请求不存在页面的问题。
对此类页面的请求 f.ex:http://www.mydomain.com/nonexistentfile.php 会导致 servlet 引发 java.io.IOException,该异常从未被捕获。因此 Tomcat 被终止。
我该如何解决这个问题?我可以从 servlet 中捕获异常吗?有没有办法只将现有文件映射到 servlet?
感谢您的回复,它现在似乎正在工作。我在 web.xml 中做了你建议的重新映射,将 php 文件映射到我的第一个自制 servlet,它基本上包裹了 phpservlet 并处理引发的异常。这是解决问题的好方法吗?
对我来说,tomcat 无法自行处理此类异常似乎有点奇怪。我可以看到终止服务器以防止其在损坏状态下执行的意义,但应该可以启用自定义异常处理......
这是我的 localhost.2009-12-09.log 在直接使用不存在的页面调用 phpservlet 后:
(tomcat 在终止前将堆栈跟踪的前 4 行显示为其默认错误页)
09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext 日志
信息:上下文侦听器:上下文初始化()
09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext 日志
信息:SessionListener:contextInitialized()
09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext 日志
信息:ContextListener:attributeAdded('org.apache.catalina.Registry','org.apache.tomcat.util.modeler.Registry@1010058')
09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext 日志
信息:ContextListener:attributeAdded('org.apache.catalina.MBeanServer','com.sun.jmx.mbeanserver.JmxMBeanServer@bdab91')
09.des.2009 13:35:54 org.apache.catalina.core.StandardWrapperValve 调用
严重:servlet php 的 Servlet.service() 抛出异常
java.io.IOException:
在 net.php.servlet.send(本机方法)
在 net.php.servlet.service(servlet.java:190)
在 net.php.servlet.service(servlet.java:214)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
在 java.lang.Thread.run(未知来源)
【问题讨论】:
标签:
php
exception
tomcat
servletconfig