Struts/例外ハンドラ(ExceptionHandler)を用いた宣言的な例外処理
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
Strutsの例外処理についてまとめます。Strutsの例外処理はい...
全てのアクション、もしくは特定のアクションで××Exceptionが...
**やってみる [#lc37ab60]
サンプルで見てみます。アクションクラスで特定の例外(Normal...
***流れ [#ff613522]
normalEx -> エラー発生 -> error.jsp
という流れのサンプルです。
***ソース [#f26192bf]
-struts-config.xml
<global-exceptions>
<exception key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions....
path="/WEB-INF/jsp/error.jsp"/>
<!-- このkey値でActionMessageを生成してスコープにセッ...
メッセージのvalueは、propertiesから取得している。
-->
</global-exceptions>
NormalExceptionをスローしたらerror.jspに遷移しなさい、ま...
-アクションクラス(NormalExceptionAction)
public ActionForward execute(ActionMapping mapping, Acti...
HttpServletRequest request, HttpServletResponse ...
throws Exception {
throw new NormalException("普通のハンドリングをする...
}
-MessageResources.properties
error.NormalException=NormalException!! [{0}]
例外がスローされると、org.apache.struts.action.ExceptionH...
ActionMessage error = new ActionMessage(ae.getKey(), ex....
ae.getKey() はstruts-config.xmlのキー値(error.NormalExce...
ex.getMessage() は例外のgetMessage()
という処理があります。つまり error.NormalException という...
-error.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http:...
<%@ page language="java" contentType="text/html; charset...
<%@ taglib uri="http://struts.apache.org/tags-bean" pref...
<%@ taglib uri="http://struts.apache.org/tags-html" pref...
<%@ taglib uri="http://struts.apache.org/tags-logic" pre...
<%@page import="org.apache.struts.Globals"%>
<html:html xhtml="true" lang="true">
<head>
<title>エラーハンドラのサンプル</title>
<meta http-equiv="Content-Type" content="application/xht...
<html:base />
</head>
<body>
<ul>
<html:messages id="message">
<li><bean:write name="message" /></li>
</html:messages>
</ul>
<hr />
<html:errors />
<hr />
</body>
</html:html>
あとは普通のActionMessageの処理と同じですね。
**実行結果 [#z939794d]
<ul>
<li>NormalException!! [普通のハンドリングをする例外!]...
</ul>
<hr />
<ul><li>NormalException!! [普通のハンドリングをする例外...
<hr />
といったhtmlが出力されました。
**アクションクラスで作成したActionMessagesがでないような...
ここではアクションクラスでは例外をスローしただけでしたが...
**org.apache.struts.action.ExceptionHandlerを変更して独自...
-struts-config.xml
<global-exceptions>
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Nor...
handler="nu.mine.kino.strutsexamples.exceptions....
path="/WEB-INF/jsp/error.jsp"/>
</global-exceptions>
に変更するだけですね。デフォルトのExceptionHandlerではな...
-例外ハンドラクラス(CustomizeExceptionHandler)
public ActionForward execute(Exception exception, Except...
ActionMapping mapping, ActionForm form, HttpServletR...
HttpServletResponse response) throws ServletExceptio...
NormalException normalException = (NormalException) ex...
// エラーコード見るとか、なんか処理。
ActionForward forward = super.execute(exception, confi...
request, response);
return forward;
}
ここではなんにもしてませんが、実際はNormalExceptionを見て...
**遷移先もstruts-config.xmlからでなく、ハンドラ内で制御す...
デフォルトのExceptionHandlerは基本的に
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Normal...
handler="nu.mine.kino.strutsexamples.exceptions.Cus...
path="/WEB-INF/jsp/error.jsp"/>
と遷移先が固定でしたが、実はこの値はオプショナルで、実際...
if (ae.getPath() != null) {
forward = new ActionForward(ae.getPath());
} else {
forward = mapping.getInputForward();
}
というように、exceptionタグのpathから遷移先を取り出す、も...
-struts-config.xml
<global-exceptions>
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Nor...
handler="nu.mine.kino.strutsexamples.exceptions....
</global-exceptions>
-例外ハンドラクラス(CustomizeExceptionHandler)
public ActionForward execute(Exception exception, Except...
ActionMapping mapping, ActionForm form, HttpServle...
HttpServletResponse response) throws ServletExcept...
NormalException normalException = (NormalException) e...
// エラーコード見るとか、なんか処理。
// 一応、親クラスの処理を呼ぶけど、遷移先は自分で指定...
ActionForward forward = super.execute(exception, conf...
request, response);
return mapping.findForward("success"); <-自分で指定
}
このように自分でやることもできますね。
**サンプル。 [#b8c2c51b]
-[[サンプルプログラム(ViewVC)>http://www.masatom.in/cgi-b...
-[[サンプルプログラム(Subversion)>https://www.masatom.in/...
**TIPS [#l4248dab]
***スローされた例外にアクセスする [#t3a733b1]
スローされたExceptionは
Globals.EXCEPTION_KEY
というキー値((実際の値は"org.apache.struts.action.EXCEPTI...
<logic:present name="<%=Globals.EXCEPTION_KEY %>" >
<bean:write name="<%=Globals.EXCEPTION_KEY %>"/>
</logic:present>
でアクセス可能です。
**関連リンク [#scf0c3f3]
-[[Strutsで掲示板! 例外ハンドラを使おう>http://yamarou.a...
この記事は
#vote(おもしろかった[40],そうでもない[4])
- 勉強になります。ありがとうございます -- &new{2011-12-1...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
Strutsの例外処理についてまとめます。Strutsの例外処理はい...
全てのアクション、もしくは特定のアクションで××Exceptionが...
**やってみる [#lc37ab60]
サンプルで見てみます。アクションクラスで特定の例外(Normal...
***流れ [#ff613522]
normalEx -> エラー発生 -> error.jsp
という流れのサンプルです。
***ソース [#f26192bf]
-struts-config.xml
<global-exceptions>
<exception key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions....
path="/WEB-INF/jsp/error.jsp"/>
<!-- このkey値でActionMessageを生成してスコープにセッ...
メッセージのvalueは、propertiesから取得している。
-->
</global-exceptions>
NormalExceptionをスローしたらerror.jspに遷移しなさい、ま...
-アクションクラス(NormalExceptionAction)
public ActionForward execute(ActionMapping mapping, Acti...
HttpServletRequest request, HttpServletResponse ...
throws Exception {
throw new NormalException("普通のハンドリングをする...
}
-MessageResources.properties
error.NormalException=NormalException!! [{0}]
例外がスローされると、org.apache.struts.action.ExceptionH...
ActionMessage error = new ActionMessage(ae.getKey(), ex....
ae.getKey() はstruts-config.xmlのキー値(error.NormalExce...
ex.getMessage() は例外のgetMessage()
という処理があります。つまり error.NormalException という...
-error.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http:...
<%@ page language="java" contentType="text/html; charset...
<%@ taglib uri="http://struts.apache.org/tags-bean" pref...
<%@ taglib uri="http://struts.apache.org/tags-html" pref...
<%@ taglib uri="http://struts.apache.org/tags-logic" pre...
<%@page import="org.apache.struts.Globals"%>
<html:html xhtml="true" lang="true">
<head>
<title>エラーハンドラのサンプル</title>
<meta http-equiv="Content-Type" content="application/xht...
<html:base />
</head>
<body>
<ul>
<html:messages id="message">
<li><bean:write name="message" /></li>
</html:messages>
</ul>
<hr />
<html:errors />
<hr />
</body>
</html:html>
あとは普通のActionMessageの処理と同じですね。
**実行結果 [#z939794d]
<ul>
<li>NormalException!! [普通のハンドリングをする例外!]...
</ul>
<hr />
<ul><li>NormalException!! [普通のハンドリングをする例外...
<hr />
といったhtmlが出力されました。
**アクションクラスで作成したActionMessagesがでないような...
ここではアクションクラスでは例外をスローしただけでしたが...
**org.apache.struts.action.ExceptionHandlerを変更して独自...
-struts-config.xml
<global-exceptions>
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Nor...
handler="nu.mine.kino.strutsexamples.exceptions....
path="/WEB-INF/jsp/error.jsp"/>
</global-exceptions>
に変更するだけですね。デフォルトのExceptionHandlerではな...
-例外ハンドラクラス(CustomizeExceptionHandler)
public ActionForward execute(Exception exception, Except...
ActionMapping mapping, ActionForm form, HttpServletR...
HttpServletResponse response) throws ServletExceptio...
NormalException normalException = (NormalException) ex...
// エラーコード見るとか、なんか処理。
ActionForward forward = super.execute(exception, confi...
request, response);
return forward;
}
ここではなんにもしてませんが、実際はNormalExceptionを見て...
**遷移先もstruts-config.xmlからでなく、ハンドラ内で制御す...
デフォルトのExceptionHandlerは基本的に
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Normal...
handler="nu.mine.kino.strutsexamples.exceptions.Cus...
path="/WEB-INF/jsp/error.jsp"/>
と遷移先が固定でしたが、実はこの値はオプショナルで、実際...
if (ae.getPath() != null) {
forward = new ActionForward(ae.getPath());
} else {
forward = mapping.getInputForward();
}
というように、exceptionタグのpathから遷移先を取り出す、も...
-struts-config.xml
<global-exceptions>
<exception
key="error.NormalException"
type="nu.mine.kino.strutsexamples.exceptions.Nor...
handler="nu.mine.kino.strutsexamples.exceptions....
</global-exceptions>
-例外ハンドラクラス(CustomizeExceptionHandler)
public ActionForward execute(Exception exception, Except...
ActionMapping mapping, ActionForm form, HttpServle...
HttpServletResponse response) throws ServletExcept...
NormalException normalException = (NormalException) e...
// エラーコード見るとか、なんか処理。
// 一応、親クラスの処理を呼ぶけど、遷移先は自分で指定...
ActionForward forward = super.execute(exception, conf...
request, response);
return mapping.findForward("success"); <-自分で指定
}
このように自分でやることもできますね。
**サンプル。 [#b8c2c51b]
-[[サンプルプログラム(ViewVC)>http://www.masatom.in/cgi-b...
-[[サンプルプログラム(Subversion)>https://www.masatom.in/...
**TIPS [#l4248dab]
***スローされた例外にアクセスする [#t3a733b1]
スローされたExceptionは
Globals.EXCEPTION_KEY
というキー値((実際の値は"org.apache.struts.action.EXCEPTI...
<logic:present name="<%=Globals.EXCEPTION_KEY %>" >
<bean:write name="<%=Globals.EXCEPTION_KEY %>"/>
</logic:present>
でアクセス可能です。
**関連リンク [#scf0c3f3]
-[[Strutsで掲示板! 例外ハンドラを使おう>http://yamarou.a...
この記事は
#vote(おもしろかった[40],そうでもない[4])
- 勉強になります。ありがとうございます -- &new{2011-12-1...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: