PECLサーブレット(PHP / PECLバージョン5.2.5)を使用してTomcatserverでPHPをセットアップしています。サーバーは実際のPHPファイルを正常に処理するようになりましたが、存在しないページのリクエストに問題があります。
このようなページ(f.ex:http ://www.mydomain.com/nonexistentfile.php)を要求すると、サーブレットはjava.io.IOExceptionを発生させますが、これはキャッチされません。したがって、Tomcatは終了します。
どうすればこれを修正できますか?サーブレットからの例外をキャッチできますか?既存のファイルのみをサーブレットにマップする方法はありますか?
返信ありがとうございます、それは今働いているようです。提案された再マッピングをweb.xmlで行い、phpファイルを最初の自作サーブレットにマッピングしました。これは基本的にphpservletをラップし、発生した例外を処理します。これは問題を解決する良い方法ですか?
tomcatがそのような例外を単独で処理できないことは私には少し奇妙に思えます。破損した状態での実行からサーバーを保護するためにサーバーを終了することのポイントはわかりますが、カスタムの例外処理を有効にすることは可能であるはずです...
存在しないページでphpservletを直接呼び出した後の私のlocalhost.2009-12-09.logは次のとおりです
(tomcatは、終了する前に、スタックトレースの最初の4行をデフォルトのエラーページに表示します)
09.des.200913:35:50org.apache.catalina.core.ApplicationContextログ 情報:ContextListener:contextInitialized() 09.des.200913:35:50org.apache.catalina.core.ApplicationContextログ 情報:SessionListener:contextInitialized() 09.des.200913:35:50org.apache.catalina.core.ApplicationContextログ 情報:ContextListener:attributeAdded('org.apache.catalina.Registry'、'org.apache.tomcat.util.modeler.Registry@1010058') 09.des.200913:35:50org.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 invoke 重大:サーブレット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(不明なソース)で