2011-10-10 84 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,如果春节初始化失败转发给您的自定义错误页。