2009-07-27 14 views
3

Ich habe eine Web-App (2.5 Servlet-Spezifikation) mit einem Feder-Dispatcherservlet, die alles annimmt/error/* und eine Fehlerseite konfiguriert, um diese an/error/ so etwas weiterzuleiten:Fehlerbehandlung mit 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> 

und die 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 ich brauche Hilfe auf:

  1. Ob dies der beste Ansatz ist, um Fehler zu beheben.
  2. Ich weiß, dass es einen SimpleMappingExceptionResolver gibt, den ich in meiner Konfiguration erklären kann ... aber ich lese irgendwo, dass diese Klasse gut ist mit nur den Ausnahmen, die von den Frühlingsreglern und nicht anderen kommen.
+0

Funktioniert Ihr aktueller Ansatz? Möchten Sie es ersetzen, oder suchen Sie nur Ideen? Eine spezifischere Frage wäre besser. – skaffman

+1

Sie haben sich vertippt/erorr/* und/erorr/... Es ist so in Ihrem XML? –

+0

@victor für die Zwecke dieser Frage ist es egal. Er hat keine Probleme, es zum Laufen zu bringen, er fragt sich, ob es ein guter Ansatz ist. –

Antwort

5
  1. Ich benutze diesen Ansatz in einer Anwendung, die ich gerade arbeite, und es scheint gut zu funktionieren.
  2. Das stimmt, aber das macht nichts. Wenn es sich um eine Webanwendung handelt, wird jede ausgelöste Ausnahme schließlich an die Spitze springen, was der Spring-Controller sein sollte. Es wird dann von dort aus basierend auf Ihrer Konfiguration behandelt, ob es auf eine andere Seite weiterleitet oder Ihre Anwendung explodieren lässt.

Dies ist ein ziemlich gutes Tutorial zu den Grundlagen; wenn Sie es gibt andere, für Google es: http://developingdeveloper.wordpress.com/2008/03/09/handling-exceptions-in-spring-mvc-part-2/

EDIT: Statt nur auf eine Fehlerseite umleiten, können Sie auch diese Ausnahmen in einer Datenbank setzen, so haben Sie eine Liste der häufigsten diejenigen, die auftreten. Joel und Jeff erwähnen, dass sie dies für StackOverflow tun, und diese Liste wird Teil ihrer Bug-to-Fix-Liste.

+1

Danke Nalandial ... Über die Ausnahmen in DB setzen ... nun ... Ich erstelle eine Protokolldatei auf Disk ... und lassen Sie sich von einem Batch-Job fegen und erstellen Sie einen Bericht für das Support-Team. Der Grund ist, dass ich mich nicht auf ein externes System verlassen möchte (da sie auch scheitern könnten ... aber wieder kann ich paranoid werden ... :-)) – user10398

+0

Nein, du hast recht, ich meinte es nur so ein einfaches Beispiel für das, was Sie tun könnten. Es gibt tatsächlich einen Rahmen für .NET, der diese fancy Sachen für Sie erledigt, und ich denke, dass es einen für Java auch gibt, aber ich erinnere mich nicht an den Namen. Es kann in der Show Notes/Transkript-Wiki für einen von Joel und Jeff früheren Podcasts sein. –

Verwandte Themen