3

Struts 2、Hibernate、MySQL で Web サイトを開発し、Hibernate をtry/catch介したデータベース呼び出しを囲むいくつかのブロックをここに追加したとします。

私の質問は:

  1. catch ブロック内で、適切なメッセージをロガーに送信しています。ここではSystem.out.printlnWeb ページとして使用できません。例外についてユーザーに警告するために他に何ができますか?

  2. テストの一環としてhibernate.cfg.xml、データベース クラッシュ シナリオをシミュレートするために、間違ったデータベース パスワードを変更して入力しました。

私が期待したように、エラーがスローされました:

    javax.servlet.ServletException: Filter execution threw an exception

    java.lang.NoClassDefFoundError: com_cenqua_clover/CoverageRecorder
    my.com.employee.<init>(employee.java:29)
    com.action.employeeAction.<init>(employeeAction.java:23)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    java.lang.Class.newInstance0(Class.java:355)
    java.lang.Class.newInstance(Class.java:308)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:119)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:150)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
    com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
    com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:288)
    com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388)
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187)
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.20 logs. 

ユーザーの観点からは、これは望ましくない権利なので、そのような問題にどのように取り組むか。Eclipse Juno、Windows XP、MySQL 5.5 を使用しています。

4

2 に答える 2

2

例外は、プログラムまたは開発者が異常な動作を伴う状況に対処できない結果です。この場合、開発者は例外がスローされたことを認識し、ケースの解決に向けて何らかのアクションを実行できます。

通常のユーザーは例外について知る必要はありませんが、システム管理者は実際に知っています。したがって、例外をログに記録することは、問題をさらに解決する可能性を高めるのに役立ちます。

これは、開発者がスタックトレースを出力して例外を再スローして問題をデバッグする必要がある開発段階でも役立ちます。この状況では、例外をキャッチして無視することはめったにありません。

通常の状況では、例外をキャッチしてログに記録し、再スローする必要があります。しかし、Struts2 では、デフォルトのアプリケーション インターセプター スタックを作成することで、キャッチされなかった例外を処理できました。

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

このアプリケーションによって捕捉されなかった例外はログに記録され、グローバル例外マッピングによって処理されます

<global-exception-mappings>
  <exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>

<global-results>
  <result name="error">/error_page.jsp</result>
</global-results>
于 2013-02-13T17:48:19.937 に答える