【问题标题】:error handling with spring + servlet specspring + servlet 规范的错误处理
【发布时间】:2010-11-14 06:39:16
【问题描述】:

我有一个 web 应用程序(2.5 servlet 规范),带有一个 spring dispatcherservlet 处理 /error/* 上的任何内容,以及一个配置为将其路由到 /error/ 的错误页面 像这样:

<servlet>
    <servlet-name>errorServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>errorServlet</servlet-name>
    <url-pattern>/erorr/*</url-pattern>
</servlet-mapping>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/erorr/</location>
</error-page>

还有errorServlet-servelt.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
    <context:component-scan base-package="some.base.package"/>
    <bean id="simpleUrlController" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/*">errorController</prop>
            </props>
        </property>
    </bean>
    <bean id="errorController" class="ErrorController">
        <property name="formView" value="formView"/>
        <property name="commandClass" value="Error"/>
        <property name="commandName" value="errorNAMe"/>
    </bean>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

我需要帮助的地方:

  1. 这是否是解决错误的最佳方法。
  2. 我知道有一个 SimpleMappingExceptionResolver,我可以在我的配置中声明它......但我在某处读到这个类很好,只有异常来自 spring 控制器而不是其他。

【问题讨论】:

  • 您当前的方法有效吗?您想更换它,还是只是在寻找想法?一个更具体的问题会更好。
  • 你打错了 /erorr/* 和 /erorr/... 就像你的 XML 中的那样?
  • @victor 对于这个问题来说没关系。他没有遇到任何问题,他想知道这是否是一个好方法。
  • @victor 是的,我想这是一个错字..但是应用程序在上述配置下运行良好。 @skaffman 是的,它工作得很好:我正在寻找让它恰到好处(没有更多没有更少的工程)

标签: spring error-handling spring-mvc error-reporting


【解决方案1】:
  1. 我在我目前正在开发的应用程序中使用了这种方法,它似乎运行良好。
  2. 确实如此,但没关系。如果它是一个 web 应用程序,任何被抛出的异常最终都会冒泡到顶部,这应该是 Spring 控制器。然后它将根据您的配置从那里得到处理,无论是转发到另一个页面还是让您的应用程序爆炸。

这是一个很好的基础教程;如果你用谷歌搜索,还有其他人:http://developingdeveloper.wordpress.com/2008/03/09/handling-exceptions-in-spring-mvc-part-2/

编辑: 除了重定向到错误页面之外,您还可以将这些异常放入数据库中,这样您就有了最常见的异常列表。 Joel 和 Jeff 提到他们为 StackOverflow 执行此操作,并且该列表成为他们要修复的错误列表的一部分。

【讨论】:

  • 感谢 Nalandial...关于将异常放入 db...嗯...我正在磁盘上创建一个日志文件...并有一个批处理作业扫描它并为技术支持人员。原因是我不想依赖任何外部系统(因为它们也可能会失败......但我又可能变得偏执......:-))
  • 不,你是对的,我只是把它作为一个简单的例子来说明你可以做什么。实际上有一个 .NET 框架可以为您做这些花哨的东西,我认为 Java 也有一个框架,但我不记得名字了。它可能在 Joel 和 Jeff 以前的播客之一的节目说明/成绩单 wiki 中。
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 2014-05-11
  • 2011-03-21
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
相关资源
最近更新 更多