我有一個運行在Tomcat中的webapp,它使用Spring進行依賴注入。 (這是一個GWT應用程序,但我不認爲讓多少我正在尋找解決方案的差別。)如何在啓動Tomcat webapp時捕獲Spring錯誤?
我的web.xml文件格式如下:
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Servlets -->
<servlet>
<servlet-name>dispatch</servlet-name>
<servlet-class>com.example.my.gwt.dispatch.DispatchServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>/my_gwt/dispatch</url-pattern>
</servlet-mapping>
... more servlets ...
</web-app>
我的一個Spring配置做的事情是通過Hibernate來連接到DATABSE:
<bean id="datasource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${db.driver}" />
<property name="url"
value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<bean id="databaseSessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="packagesToScan">
<array>
<value>com.example.my.gwt.model</value>
</array>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
如果數據庫是不可用的,這會導致org.h2.jdbc.JdbcSQLException被拋出,因此Spring初始化不繼續,所以webapp的其他部分無法使用。瀏覽到Web應用程序的URL會導致HTTP 503'服務不可用'錯誤。
我想要做的是捕捉這個錯誤,並顯示一個頁面,用戶(當他們第一次瀏覽到應用程序),說明是什麼問題,可能是和建議的修復。我怎樣才能做到這一點?
我已經使用自定義的ContextLoaderListener類試過,委託給一個在上面的XML,但捕獲任何異常。這讓我可以捕捉到異常,但我可以做的事情並不多 - web.xml仍然將用戶的請求指向Spring初始化失敗後未運行的servlet。有什麼方法可以在我捕獲該異常時更改webapp配置,以便它不嘗試從web.xml加載Servlet,並且可能會將歡迎文件更改爲指向有關該錯誤的頁面?或者有沒有其他方法可以讓webapp正常處理這個異常?
感謝