Frage

Ich bin ein wenig verwirrt darüber, wie in Struts2 Fehlerbehandlung. Ich möchte einmal zentrale Seite machen, wo die Benutzer gerichtet werden, wenn ein Fehler auftritt. Außerdem, wenn ein Fehler auftritt, wünsche, dass ich es protokollieren, da ich log4j verwende werde ich es als log.error(e.getMessage(), e); werden Anmeldung

Doch meiner Action-Klasse, wenn ich fangen die Fehler (mein Code alle in try / catch setzen), dann die zentrale / common Fehlerseite kommt nicht auf. So entschied ich mich gegen den Fehler zu kontrollieren, wenn ich den Fehler fangen nicht dann zentrale Fehlerseite kommt. Aber jetzt, wie stelle ich die Fehlermeldung / stacktrack in die Protokolle ??

Link Ich habe folgende Möglichkeiten:

   <global-results>
                   <result name="Exception" type="chain">
                      <param name="actionName">ErrorPage</param>
                     <param name="namespace">/error</param>

                   </result>
            </global-results>

            <global-exception-mappings>
                <exception-mapping exception="java.lang.Exception" result="Exception"/>
            </global-exception-mappings>
            <action name="selectionPage" class="reports.ReportSelection">
                <result>/reports/SelectionPage.jsp</result>
            </action>

    </package>
    <package name="secure"  namespace="/error">
        <action name="ErrorPage" class="com.myErrorClass">
            <result>errorpage.jsp</result>
        </action>
    </package>

Nach der obigen Konfiguration, die ursprünglich der Fehler in reports.ReportSelection geworfen wird (aber ich bin fange es dort nicht) so schließlich die Kontrolle kommt zu com.myErrorClass. Ich kann den Fehler in dieser Klasse einzuloggen aber meine Frage ist, ob die Log-Nachricht noch verfügbar sein ... da es ursprünglich in reports.ReportSelection geworfen wurde?

War es hilfreich?

Lösung

Wenn Sie es fangen und sich einzuloggen, werden retrhowing Sie es? Wenn Sie das tun, dann sollte der Rahmen Ausnahmemanagement in Kick Ihres Fehlerbehandlungscode etwas aussehen soll.

catch (Exception e) {
    log.error(e.getMessage(), e);
    throw e;
}

Mit dem im Ort sollten Sie in der Lage sein, Ihren vereinfachten Ansatz der Protokollierung zurück zu gehen und es in der Action-Klasse retrhowing, und eine einzige globale Fehlerseite konfiguriert werden.

Andere Tipps

Hier ist, wie Sie Fehler protokollieren, die Ihre Aktionen werfen. Ich weiß nicht, warum dies nicht eingeschaltet ist standardmäßig aktiviert. Setzen Sie diese in Ihrer struts.xml Datei.

    <interceptors>
        <interceptor-stack name="errorloggingStack">
          <interceptor-ref name="defaultStack">
           <param name="exception.logEnabled">true</param>
           <param name="exception.logLevel">ERROR</param>
         </interceptor-ref>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="errorloggingStack"/>

Sie müssen nicht um jede Aktion Methode Try-Catch-Blöcke haben.

Als Alternative können Sie auch „überschreiben“ die defaultStack Abfangjäger Stapel

<interceptors>
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="defaultStack"/>
        <interceptor-ref name="exception">
            <param name="logEnabled">true</param>
            <param name="logLevel">WARN</param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top