我使用PECL-servlet(PHP/PECL-version 5.2.5)在我的Tomcatserver上設置PHP。服務器現在成功地處理真正的PHP文件,但我對請求不存在的頁面有問題。Tomcat:處理Servlet異常
對這樣一個頁面的請求,f.ex:http://www.mydomain.com/nonexistentfile.php,導致servlet引發java.io.IOException,這是一個永遠不會被捕獲的。 Tomcat因此被終止。
我怎樣才能解決這個問題?我可以從servlet中捕獲異常嗎?有沒有辦法只將現有的文件映射到servlet?
感謝您的回覆,它似乎現在工作。我在web.xml中建立了重定位映射,將php-files映射到我的第一個自制servlet,它基本上圍繞着phpservlet並處理引發的異常。這是解決問題的好方法嗎?
對我來說,看起來有點奇怪,tomcat無法自行處理這些異常。我可以看到終止服務器的目的,以保護它免於在損壞狀態下執行,但應該可以啓用自定義異常處理...
以下是我調用後的localhost.2009-12-09.log直接與不存在的網頁phpservlet:
(Tomcat的顯示棧跟蹤INT其默認的errorPage的4個第一行終止之前)
09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext log INFO: ContextListener: contextInitialized() 09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext log INFO: SessionListener: contextInitialized() 09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext log INFO: ContextListener: attributeAdded('org.apache.catalina.Registry', '[email protected]') 09.des.2009 13:35:50 org.apache.catalina.core.ApplicationContext log INFO: ContextListener: attributeAdded('org.apache.catalina.MBeanServer', '[email protected]') 09.des.2009 13:35:54 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet php threw exception java.io.IOException: at net.php.servlet.send(Native Method) at net.php.servlet.service(servlet.java:190) at net.php.servlet.service(servlet.java:214) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)