4月 7th, 2008at 13:57

Tags: ,

Struts1.3.5の例外ハンドリング手法

このエントリーをはてなブックマークに追加

Strutsのドキュメント(4.4.1 Action Class Design Guidelines)を読んでいて発見したのだけれど、

Don’t throw it, catch it!

らしい。Actionクラスでは例外を投げず、全てキャッチしろ!ってことだと思う。Runtimeを拾うかどうかは好みなのかもしれないが、拾っておいたほうがいいかもね。

ExceptionHandler

struts-config.xmlのglobal-exceptionsを使えば、例外のハンドリングが可能。web.xmlのerror-pageでも可能だが、こちらは「エラーが発生してからの処理」をHandlerクラスで行うことができる。ログ出力とかをまとめることができるね。

参考:

ExceptionHandler

public class AppExceptionHandler extends ExceptionHandler {

   @Override   public ActionForward execute(           Exception e, ExceptionConfig conf, ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws ServletException {

       //ログ出力のかわりにprintStackTrace       System.out.println("AppExceptionHandlerで制御");       e.printStackTrace();

       return super.execute(e, conf, map, form, req, res);   }}

struts-config.xml

 <global-exceptions>   <exception key="errors.9999"              type="java.lang.Exception"              path="/error50X.jsp"              handler="com.daipresents.struts135.action.AppExceptionHandler" /> </global-exceptions>

handler属性で
ちなみに、web.xmlとstruts-config.xmlで同じ例外を指定していた場合は、struts-config.xmlが勝つらしい。

注意点

さらに、global-exceptionsはJSP上のエラーは無視する(なぜじゃ)。なので、保険のために、web.xmlの上でもerror-pageを指定しておくほうがいい。JSPでのエラーをひろって、ログに出力できるのであればこれ使うけどねー。

web.xml

 <error-page>   <exception-type>java.lang.Exception</exception-type>   <location>/error50X.jsp</location> </error-page>
このエントリーをはてなブックマークに追加