2011-10-10 80 views
4

我有一個運行在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正常處理這個異常?

感謝

回答

0

基本上你問如果Web應用程序無法啓動後,你可以有一個正常的Web應用程序。

你可以嘗試配置一個503頁的處理程序和/或有一個歡迎頁面,不依賴於Spring,它檢查在應用程序上下文東西是隻設置一個良好的旋轉起來。如果它沒有旋轉起來,那麼你已經捕獲的異常可以放到應用上下文中。

不知道是否什麼在應用程序,即使是web.xml的資源,如果Spring不旋轉起來,但。

0

你可以一個Servlet過濾器添加到您的Web應用程序,將攔截所有的請求到春天的servlet,如果春節初始化失敗轉發給您的自定義錯誤頁。