2009-07-27 13 views
3

J'ai une application web (spéc. 2.5 servlet) avec un dispatcherservlet à ressort qui gère tout ce qui arrive/error/* et une page d'erreur configurée pour router cela vers/error/ quelque chose comme ceci:gestion des erreurs avec spring + servlet spec

<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> 

et 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> 

Spots je besoin d'aide sur:

  1. Que ce soit la meilleure approche pour lutter contre les erreurs.
  2. Je sais qu'il y a un SimpleMappingExceptionResolver que je peux déclarer dans ma configuration ... mais j'ai lu quelque part que cette classe est bonne avec seulement les exceptions provenant des contrôleurs à ressort et pas d'autres.
+0

Votre approche actuelle fonctionne-t-elle? Voulez-vous le remplacer ou cherchez-vous simplement des idées? Une question plus spécifique serait préférable. – skaffman

+1

Vous avez mal tapé/erorr/* et/erorr/... C'est comme ça dans votre XML? –

+0

@victor pour les besoins de cette question, peu importe. il n'a pas de difficulté à le faire fonctionner, il se demande si c'est une bonne approche. –

Répondre

5
  1. J'utilise cette approche dans une application que je suis en train de travailler, et il semble fonctionner très bien.
  2. C'est vrai, mais ce n'est pas grave. Si c'est une application web, toute exception qui sera levée finira par atteindre le sommet, ce qui devrait être le contrôleur Spring. Il sera ensuite géré à partir de là en fonction de votre configuration, qu'il s'agisse de rediriger vers une autre page ou de laisser exploser votre application.

Ceci est un très bon tutoriel sur les bases; il y a d'autres si vous google pour elle: http://developingdeveloper.wordpress.com/2008/03/09/handling-exceptions-in-spring-mvc-part-2/

EDIT: Au lieu de ne rediriger vers une page d'erreur, vous pouvez aussi mettre ces exceptions dans une base de données, vous avez une liste des plus courants qui se produisent. Joel et Jeff mentionnent qu'ils font cela pour StackOverflow, et cette liste devient une partie de leur liste de bogues à corriger.

+1

Merci Nalandial ... A propos de mettre les exceptions en db ... eh bien ... je crée un fichier journal sur disque ... et un travail par lots balayer et créer un rapport pour le personnel de soutien. la raison en est que je ne veux pas compter sur un système externe (car ils pourraient aussi échouer ... mais encore peut-être que je deviens paranoïaque ... :-)) – user10398

+0

Non, vous avez raison, je voulais juste dire que un exemple simple de ce que vous pourriez faire. Il y a en fait un framework pour .NET qui fait ce truc de fantaisie pour vous, et je pense qu'il y en a un pour Java aussi mais je ne me souviens pas du nom. Il se peut que ce soit dans le wiki des notes de spectacles/transcription pour l'un des précédents podcasts de Joel et Jeff. –

Questions connexes