SAStruts+S2JDBC 環 境 構 築 手 順 1. eclipseのインストール googleでキーワード "eclipse 日 本 語 化 ダウンロード" で 検 索 sourceforgeのpleiades(=eclipseを 含 むall in one 環 境 )ダウンロードサイトにアクセスする バージョンは 常 に 新 しくなるので 任 意 のものを 選 択 する Pleiadesの 大 きな 利 点 は 最 初 から 複 数 のJRE Tomcatその 他 のプラグインが 入 っており 日 本 語 化 されている 点 大 変 分 かりやすく 使 い 勝 手 がいい 欠 点 は 遅 いこと 性 能 のいいマシンが 必 要 となる ダウンロードが 完 了 したら 任 意 のディレクトリに 解 凍 すればインストールは 完 了 する ただし C:\やD:\といったドライブのルートから 余 りにもディレクトリ 階 層 を 深 くすると 動 かないことがある C:\Pleiadesなどのように なるべくドライブのルートに 近 い 位 置 日 本 語 や 半 角 スペースを 入 れないパスにインストールすること 2. Seasar2プロジェクトからSAStrutsのチュートリアルをダウンロード http://sastruts.seasar.org/download.html チュートリアルがあるのでダウンロードする Seasar2フレームワークそのものはeclipseの 設 定 でダウンロードするため ここではダウンロード 不 要 上 記 URLは 将 来 的 に 変 わりうる その 場 合 はgoogleでキーワード "SAStruts チュートリアル" などで 検 索 すること eclipse(pleiades)の[ファイル]-[インポート]で 既 存 プロジェクトとしてインポートする (チュートリアル 自 体 は 圧 縮 ファイルなので 解 凍 してからインポートする) TOMCAT_HOMEがない というコンパイルエラーが 出 る 場 合 は チュートリアルプロジェクトを 右 クリックし 出 てくるメニューから [ビルドパス]-[ビルドパスの 構 成 ]を 選 択 する 出 てくる 画 面 で[ライブラリー]タグを 選 択 [ 変 数 の 追 加 ]を 押 下 [ 変 数 の 構 成 ]を 押 下 [ 新 規 ]を 押 下 し TOMCAT_HOMEをPleiades に 含 まれるいずれかのTomcatホームディレクトリにする (< 例 >C:\Pleoades\Tomcat5.5) なお Pleiadesには 最 初 からTomcatが 数 バージョン 入 っており デフォルトで 選 択 されているバージョンは eclipseの[ウインドウ]- [ 設 定 ]メニューから 参 照 できる ここで 選 択 されているTomcatを 指 定 しないと 動 作 確 認 がうまくいかないので 注 意 を 要 する 3. SAStruts Pluginのインストール eclipseのメニューから[ヘルプ]-[ソフトウェア 更 新 ]を 選 択 [ 使 用 可 能 なソフトウェア]タグから[サイトの 追 加 ]を 選 ぶ (eclipseのバージョンによって 多 少 インターフェイスが 異 なることあり) http://eclipse.seasar.org/updates/3.3/ と 入 力 し SAStrutsPluginを 選 んで[インストール]をクリックする eclipseの 再 起 動 が 必 要 4. 文 字 化 けの 防 止 Pleiadesで 使 うTomcatの 配 下 confディレクトリ 内 のserver.xmlを 編 集 する (1) Connectorタグ 内 に 次 の 属 性 を 追 加 usebodyencodingforuri="true" URIEncoding="UTF-8" 以 下 設 定 サンプル <Connector port="8080" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" redirectport="8443" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true" usebodyencodingforuri="true" URIEncoding="UTF-8" /> 5. HotDeployの 有 効 化 Pleiadesで 使 うTomcatの 配 下 confディレクトリ 内 のcontext.xmlを 編 集 する 1
SAStruts+S2JDBC 環 境 構 築 手 順 <Manager>タグのコメントを 解 除 して 有 効 化 する server.xmlではないので 注 意! 6. WebアプリケーションをTomcatで 認 識 できるようにする Pleiadesで 使 うTomcatの 配 下 conf\catalina\localhostにsa-struts-tutorial.xmlを 追 加 し 内 容 を 次 のように 記 述 する <Context path="/sa-struts-tutorial" reloadable="true" docbase="[sa-struts-tutorialを 置 いているパス]\sa-struts-tutorial\src\main\webapp" workdir="[sa-struts-tutorialを 置 いているパス]\sa-struts-tutorial\src\main\webapp\work" /> ダウンロードしたサンプルをeclipseでインポートしただけでは Tomcatが 認 識 しない conf/server.xmlか Catalina 配 下 にあるxmlファイルにWebアプリケーションのドキュメントベースを 記 述 しなくてはならない (どっちに 記 述 するかはeclipseのTomcat 設 定 による) ドキュメントベースとは WEB-INFというディレクトリのあるパスのことを 指 す eclipse 上 でTomcatプロジェクトを 作 ってみると conf/server.xmlかcatalina 配 下 のどちらかに 上 記 のようなContext 設 定 が 出 現 する それと 同 じように sa-struts-tutorial 配 下 のWEB-INFの 位 置 を 指 定 する conf/server.xmlならば Context 設 定 を1つ 追 記 することとなる Catalina 配 下 ならば sa-struts-tutorial.xmlという 新 規 ファイルを 作 成 し 内 容 を 上 記 のようにContext 設 定 を1つ 書 くこととなる 7. 動 作 確 認 eclipse 上 からTomcatを 起 動 し ブラウザから 下 記 URLを 入 力 してページが 表 示 されれば 成 功 ここでTomcatのエラーが 出 る 場 合 は 上 記 2.でコンパイルエラーが 起 きているか 上 記 6.で 設 定 ファイルの 記 述 に 失 敗 している http://localhost:8080/sa-struts-tutorial/ 2
1. SAStrutsプロジェクトの 作 成 (1) Eclipseの[ファイル]メニューから[ 新 規 ]-[プロジェクト]を 選 択 する (2) 表 示 されるダイアログから[Dolteng]-[Doltengプロジェクト]を 選 択 し [ 次 へ]をクリックする (3) プロジェクト 名 を 入 力 する ( 通 常 小 文 字 のみで 入 力 する) (4) 上 記 (3)と 同 じ 画 面 で[ルートパッケージ]を 入 力 する ( 分 からなければプロジェクト 名 と 同 じでよい) (5) 上 記 (3)と 同 じ 画 面 で[プレゼンテーション]に[SAStruts]を [ 永 続 化 ]に[S2JDBC]をそれぞれ 選 択 する (6) 完 了 をクリックする 事 前 に SAStruts+S2JDBC 環 境 構 築 手 順 によって 環 境 構 築 していることが 前 提 (Doltengインストール 必 須 ) 2. 画 面 および 画 面 に 対 応 するソースコードの 自 動 生 成 (1) パッケージエクスプローラから[src.main.java.<ルートパッケージ>.action]パッケージを 右 クリックして [ 新 規 ]-[クラス]を 選 択 する (2) クラス 名 に[< 画 面 の 名 前 >Action]と 入 力 し [ 完 了 ]をクリックする 例 えば 画 面 の 名 前 がHelloWorldだったら HelloWorldActionと 入 力 する (3) Eclipseにより 自 動 生 成 されたクラスに 次 のようなindexページ 表 示 メソッドを 記 述 する @Execute(validator = false) public String index() { Executeアノテーションに 対 応 するimportは @Executeと 書 いてCtrl+1を 押 して 出 てくる 候 補 で 解 決 可 能 Seasar2の 場 合 index.jspは 画 面 ごとに1つ 作 成 できるので ここでは 画 面 のJSPをindex.jspとした (4) とある 箇 所 の"index.jsp" 上 にカーソルを 置 いてCtrl+8を 押 下 する (5) 対 応 するJSPファイルを 生 成 しますか? と 表 示 されるので [OK]をクリックする (6) 表 示 される 画 面 で[ 完 了 ]をクリックする (パッケージに 誤 りがないか 確 認 する 必 要 があるが 通 常 は 自 動 生 成 のままで 問 題 ない) (7) 画 面 のコードを 記 述 する ( 以 下 簡 易 動 作 確 認 のためのサンプルHTMLコード) <%@page pageencoding="utf-8"%> <html> <head><title>タイトル</title></head> <body> <h1> 画 面 表 示 確 認 のための 簡 易 HTML<h1/> </body> </html> (8) Tomcatを 起 動 し ブラウザ 上 から"http://localhost:8080/<プロジェクト 名 >/< 画 面 パッケージ 名 >/"と 入 力 して 上 記 (7)の 画 面 が 表 示 されることを 確 認 する (パッケージ 名 配 下 のHTMLの 名 前 を 指 定 しない 場 合 デフォルトでindex.jspが 参 照 される) 3. アクションフォームの 追 加 画 面 でフォームを 使 う 場 合 フォームのデータに 対 応 するクラスを 生 成 する 手 順 は 次 の 通 り (1) src/main/java/<メインパッケージ 名 >.formパッケージを 右 クリックし クラスを 追 加 する (2) クラス 名 を< 画 面 名 >Formとする (3) テキストボックスなどの 画 面 要 素 をpublicフィールドとして 追 加 する
(4) アクションクラス(< 画 面 名 >Action)で 上 記 (3)までに 作 ったアクションフォームクラスをインポートする // アクションフォーム( 画 面 入 力 ) @ActionForm @Resource protected FindWordForm findwordform; (5) アクションクラスに 対 応 するJSPファイルに フォームの 記 述 を 行 う <%@page pageencoding="utf-8"%> <html> <head><title>アクションフォーム 入 り 画 面 </title></head> <body> <h1>アクションフォーム 入 り 画 面 <h1/> <html:errors/> <s:form> <!-- テキストボックス --> <html:text property="textbox" /> <!-- サブミットボタン --> <input type="submit" name="clicksubmitbutton" value="サブミット"><br /> ${f:h(displaystringonsubmit) </s:form> </body> </html> ここではサンプルとして テキストボックスとサブミットボタン1つをフォームに 追 加 している <html:errors/>は SAStrutsによるバリデーションエラーが 起 きた 場 合 のエラー 表 示 を 行 うタグ テキストボックスのpropertyは アクションフォームのプロパティ 名 と 同 じにする サブミットボタンのnameと 同 じメソッドをアクションクラスに 追 加 すると そのボタンが 押 されたときの 動 作 を 記 述 できる (@Execute(input = "<JSP 名 >.jsp")アノテーションを 付 け 戻 り 値 String( 遷 移 先 画 面 名 )のメソッドを 追 加 する) (6) フォームがサブミットされた 場 合 ( 例 えばサブミットボタンが 押 下 された 場 合 )の 処 理 をアクションクラスに 追 加 する ここでは 上 記 (5)のJSPでサブミットボタンが 押 下 された 場 合 の 処 理 をアクションクラスに 追 加 する // サブミット 時 画 面 に 表 示 する 文 字 列 public String displaystringonsubmit; // アクションフォーム( 画 面 入 力 ) @ActionForm @Resource protected FindWordForm findwordform; アノテーション 設 定 を 忘 れずに! @Execute(input = "index.jsp") public String clicksubmitbutton() { // 画 面 に 表 示 する 文 字 列 を 作 成 する displaystringonsubmit = "サブミットボタンが 押 されました ( 入 力 文 字 列 :" + findwordform.textbox + ")"; アクションクラスのプロパティ( 属 性 )にアクションフォームを 追 加 することにより 画 面 入 力 をアクションフォームで 参 照 できるようになる JSPに 記 述 したサブミットボタンのname 属 性 と 同 じ 名 前 のメソッドを 作 ると 同 ボタンが 押 されたときの 動 作 を 記 述 できる (ここでは 画 面 のテキストボックスに 入 力 された 文 字 列 を 表 示 する 文 字 列 を 作 り もう 一 度 index.jspを 表 示 させている) 4. テキストボックスの 追 加
(1) JSPファイルのフォーム 内 にテキストボックスのタグを 追 加 する <html:text property="textbox" /> (2) アクションフォームクラスに 対 応 するプロパティを 追 加 する public String textbox; このとき 入 力 必 須 な 項 目 は@Required 数 字 のみ 許 容 するテキストボックスの 場 合 は@IntegerTypeといったように フレームワークが 用 意 しているアノテーションを 使 うことによって バリデーションの 機 能 を 持 たせることもできる 詳 しくはSAStrutsのサイトを 参 照 のこと 以 下 入 力 必 須 で 数 字 のみ 許 容 するテキストボックスの 記 述 例 @Required @IntegerType public String textbox; 5. サブミットボタンの 追 加 (1) JSPファイルのフォーム 内 にサブミットボタンのタグを 追 加 する <input type="submit" name="clicksubmitbutton" value="サブミット"><br /> (2) アクションクラスにメソッドを 追 加 する @Execute(input = "index.jsp") public String clicksubmitbutton() { // 画 面 に 表 示 する 文 字 列 を 作 成 する displaystringonsubmit = "サブミットボタンが 押 されました ( 入 力 文 字 列 :" + findwordform.textbox + ")"; メソッド 名 はJSP 内 に 記 述 したタグのname 属 性 と 同 じにする @Executeなどの 必 要 なアノテーション 設 定 は 忘 れずに 行 うこと 6. 別 ページへの 遷 移 index.jsp 以 外 のJSPへ 遷 移 する 手 順 は 次 の 通 り (1) アクションクラスの 戻 り 値 ( 遷 移 先 のページ)を index.jsp 以 外 のJSPにする @Execute(input = "index.jsp") public String find() { // 画 面 に 表 示 する 文 字 列 を 作 成 する findresult = " 論 理 名 " + findwordform.logicalname + " に 対 応 する 物 理 名 が 見 つかりません "; return "findresult.jsp"; (2) 上 記 (1)のreturnで 指 定 したJSPファイルの 文 字 列 のどこかにカーソルを 合 わせ Ctrl+8を 押 下 する
(3) 対 応 するJSPファイルを 生 成 しますか? と 表 示 されるので [OK]をクリックする (4) 上 記 (3)で 自 動 生 成 されたJSPファイル 内 にHTMLを 書 き 込 む 7. 他 のサイトへのリダイレクト 外 部 のサイトへリダイレクトにより 遷 移 したい 場 合 は 次 のように 記 述 する @Execute(validator = false, redirect = true) public String gotogoogle() { return "http://www.google.com"; Executeアノテーションのredirectをtrueとすることで 他 のサイトへのリダイレクトとなる デフォルトではリダイレクトではなくフォワードによる 遷 移 となる 8. 繰 り 返 し 項 目 の 表 示 アクションクラス 内 のフィールドに 画 面 表 示 データを 指 定 できるが これをリストとすることで 繰 り 返 し 項 目 を 表 示 させることもできる ( 例 えばアクションクラス 内 にString displaystringというフィールドがあった 場 合 Executeアノテーションのついたメソッドのreturn で 指 定 する 遷 移 先 のJSPで${f:h(displayString)と 記 述 すれば アクションクラスで 設 定 したdisplayStringを 画 面 表 示 できる これを リストとすると 繰 り 返 し 項 目 の 表 示 となる) 手 順 は 次 の 通 り (1) アクションクラス 内 のフィールドに マップのリストを 定 義 し 画 面 表 示 用 データを 設 定 する // 初 期 のindex.jsp 読 み 込 み 時 画 面 に 表 示 する 繰 り 返 しデータ public List<Map<String, Object>> displaylist; @Execute(validator = false) public String index() { // 画 面 表 示 する 繰 り 返 し 項 目 を 作 成 する displaylist = new ArrayList<Map<String, Object>>(); for (int i = 0; i < 10; i++) { Map<String, Object> itemmap = new HashMap<String, Object>(); itemmap.put("id", i); itemmap.put("name", "name" + i); displaylist.add(itemmap); (2) 上 記 (1)でマップのリストに 設 定 した 画 面 表 示 用 のデータを 表 示 するようにJSPを 記 述 する <table border="1"> <c:foreach var="m" varstatus="s" items="${displaylist" > <tr style="background-color:${s.index % 2 == 0? 'pink' : 'yellow'"> <td>${f:h(m.id)</td> <td>${f:h(m.name)</td> <td><s:link href="result/${m.id"> 結 果 ページへ</s:link></td> </tr> </c:foreach> </table> <s:link>タグでhrefに"result/${m.id"という 繰 り 返 し 項 目 の 一 部 を 指 定 することが 可 能 である (m.idは 連 番 が 入 る) このとき 対 応 するJSPでも 可 変 のid 値 を@Executeメソッドで 受 け 取 らなくてはならない 下 記 (3)を 参 照 のこと (3) 上 記 (2)のリンクがクリックされた 場 合 のメソッドをアクションクラスに 追 加 する @Execute(validator = false, urlpattern = "result/{id") public String result() { return "result.jsp";
@Execute(validator = false, urlpattern = "result/{id") public String result() { return "result.jsp"; urlpatternの 箇 所 がJSPの 記 述 と 対 応 する (JSP 上 idの 箇 所 が 可 変 となる 記 述 を 行 っているが それを 受 けるための 記 述 がurlPattern 指 定 このように 書 いておくことで result/0やresult/1といった 可 変 指 定 でこのメソッドが 動 く) (4) 上 記 (3)ではresult.jspというJSPに 遷 移 しているが このとき 遷 移 先 の 画 面 に 表 示 したいデータがある 場 合 はアクションフォーム にフィールドを 追 加 する public String id; この 記 述 をアクションフォームに 追 加 することで 上 記 (3)の@Executeで 受 けているidをアクションフォームに 持 つことができる 遷 移 先 画 面 で${f:h(id)と 記 述 すると 可 変 のid 値 を 遷 移 先 の 画 面 でも 参 照 できる 9. ボタンを 使 った 繰 り 返 し 上 記 8.では<s:link>タグを 使 ったが サブミットボタンを 使 う 場 合 は 次 のような 変 更 となる (1) idをhiddenパラメータとする <td> <s:form> <input type="hidden" name="id" value="${f:h(m.id)" /> <input type="submit" name="result" value=" 結 果 ページへ" /> </s:form> </td> 繰 り 返 し 項 目 (<c:foreach>タグ) 内 のリンクをボタンに 変 えている <hidden>タグに 可 変 のidを 設 定 することにより 繰 り 返 し 項 目 のどのボタンが 押 されたかを 識 別 できるようにしている