[[FrontPage]] #contents 2008/01/11からのアクセス回数 &counter; * Mavenを使ったSpring-MVC開発 [#f2651843] ** Spring-MVC用プラグインのインストール [#j25f2480] 今回独自にSpring-MVC用のプラグインを開発しました。 - Spring-MVC用のmavenのarcheTypeプラグイン #ref(spring-mvc-archetype-1.0-SNAPSHOT.jar) - spring-mvc-archetypeのpomファイル #ref(spring-mvc-archetype-1.0-SNAPSHOT.pom) - domainのモデルクラスの定義から、Spring-MVCに必要なファイルを自動生成するプラグイン #ref(maven-GenMVC-plugin-1.0-SNAPSHOT.jar) - maven-GenMVC-pluginのpomファイル #ref(maven-GenMVC-plugin-1.0-SNAPSHOT.pom) 上記の添付ファイルをダウンロードしてください。 この他にSunが提供するjta用のライブラリが必要です。 - http://java.sun.com/products/jta/ からjta_1_0_1B-class.zipファイルをダウンロードしてください。 #ref(jta-1_0_1B-classes.zip) - 次に以下のコマンドを実行してください。 #pre{{ mvn install:install-file \ -Dfile=./spring-mvc-archetype-1.0-SNAPSHOT.jar \ -DgroupId=jp.co.pwv.spring-mvc-archetype \ -DartifactId=spring-mvc-archetype \ -Dversion=1.0-SNAPSHOT \ -DpomFile=./spring-mvc-archetype-1.0-SNAPSHOT.pom \ -Dpackaging=jar mvn install:install-file \ -Dfile=./maven-GenMVC-plugin-1.0-SNAPSHOT.jar \ -DgroupId=org.apache.maven.plugins \ -DartifactId=maven-GenMVC-plugin \ -Dversion=1.0-SNAPSHOT \ -DpomFile=./maven-GenMVC-plugin-1.0-SNAPSHOT.pom \ -Dpackaging=jar mvn install:install-file \ -Dfile=./jta-1_0_1B-classes.zip \ -DgroupId=javax.transaction \ -DartifactId=jta \ -Dversion=1.0.1B \ -Dpackaging=jar }} ** 最初の一歩(Spring-MVCのひな形をつくる) [#db1983de] 準備が整ったので、Spring-MVCを試すためにspring-mvc-archetypeを使ってひな形を作成します。 spring-mvc-archetypeは、以下の形式で使います。 #pre{{ mvn archetype:create \ -DgroupId=パッケージ名 \ -DartifactId=サーブレット名 \ -DarchetypeArtifactId=spring-mvc-archetype \ -DarchetypeGroupId=jp.co.pwv.spring-mvc-archetype \ -DarchetypeVersion=1.0-SNAPSHOT }} 例題では、 #pre{{ mvn archetype:create \ -DgroupId=example.test \ -DartifactId=test \ -DarchetypeArtifactId=spring-mvc-archetype \ -DarchetypeGroupId=jp.co.pwv.spring-mvc-archetype \ -DarchetypeVersion=1.0-SNAPSHOT }} とします。 途中、以下のようにWARINGが出力されます。 #pre{{ [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Default Project [INFO] task-segment: [archetype:create] (aggregator-style) [INFO] ------------------------------------------------------------------------ ..... [WARNING] org.apache.velocity ... /db-def.xml [line 18,column 32] : ${db.driver} is not a valid reference. [WARNING] org.apache.velocity ... /db-def.xml [line 21,column 32] : ${db.url} is not a valid reference. ..... [INFO] Archetype created in dir: /Users/take/tmp/test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3 seconds [INFO] Finished at: Sat Jan 12 14:40:50 JST 2008 [INFO] Final Memory: 5M/9M [INFO] ------------------------------------------------------------------------ }} これは、ひな形にVelocityの変数参照のような形式が埋め込まれているためで、ひな形生成には影響ありません。 生成されたファイルを見てみましょう。 #pre{{ cd test ls -R }} とするとどのようなファイルが生成されたか分かります。 またeclipseでこのプロジェクトが管理できるようにeclipseプラグインを起動します。 #pre{{ mvn eclipse:eclipse }} eclipseで生成されたファイルをみると次のようになります。 &ref(生成されたファイル.jpg); このプログラムでは、hsqldbのデータベースを使用するため設定内容を変更する必要があります。 src/main/webapp/WEB-INF/jdbc.propertiesの以下の部分を変更してください。 #pre{{ # サーバとして使用する場合 #db.url=jdbc:hsqldb:hsql://localhost # スタンドアローンで使用する場合 db.url=jdbc:hsqldb:/tomcatのフルパス/webapps/test/WEB-INF/hsqlDb/test }} ''Windowsの場合には、エディタでjdbc.propertiesの改行コードを修正してください。'' hsqldbをサーバとして使用する場合には、db.url=jdbc:hsqldb:hsql://localhostを使用してください。 ** 実行 [#m9310134] 作成したtestサーブレットを実行するためには、mavenのpackageコマンドでwarファイルを生成します。 #pre{{ maven package }} warファイルは、target/test.warに生成されます。 これをtomcatのwebappsにコピーします。 ブラウザーでhttp://localhost:8080/test/ と入力すると、以下のページが表示されます。 #ref(test.jpg); - [edit]リンクを押すと編集画面が表示されます - [delete]リンクを押すとデータが削除されます - addリンクを押すと新規データ編集画面が表示されます 編集画面は、以下のようなページです。 #ref(edit.jpg); ** モデルからひな形を生成する [#k5a24bd8] 最近の自動生成ツールがデータベースのテーブルからMVCのプログラムを生成する のが多いのですが、ここではモデルからMVCのプログラムのひな形、データベースのテーブルを 生成する方法を示します。 GenMVCプラグインは、pring-mvc-archetypeで生成されたプロジェクトを前提としていますので、 それ以外のプロジェクトでは正常に動作しませんので、ご注意ください。 *** モデルファイルの作成 [#s0477b10] eclipseでexample.test.domainパッケージにScheduleクラスを生成します。 ''クラスには、必ずInteger id;のフィールドを追加してください。'' #pre{{ import java.util.Calendar; import java.util.Date; public class Schedule { private Integer id; private Date datetime = Calendar.getInstance().getTime(); private String title; private String text; } }} と入力して、右クリックでsource->Generate Getter And Setter...を選択して すべてのGetter, Setterを生成します。 完成したScheduleクラスは次のようになります。 #pre{{ package example.test.domain; import java.util.Calendar; import java.util.Date; public class Schedule { private Integer id; private Date datetime = Calendar.getInstance().getTime(); private String title; private String text; public Date getDatetime() { return datetime; } public void setDatetime(Date datetime) { this.datetime = datetime; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }} *** ひな形の生成 [#w3bd5233] GenMVCプラグインを使ってScheduleクラスをモデルとしたコントローラ、ビュー、データベースのテーブルを生成します。GenMVCを使用する前に、Scheduleのコンパイルが必要ですので、mvn packageを実行するのを忘れないようにしてください。 #pre{{ mvn package mvn GenMVC:scaffold }} 新しく生成されたファイルは、 - java/example/test/service/ISchedule.java - java/example/test/service/ScheduleManager.java - java/example/test/service/stub/ScheduleDao.java - java/example/test/service/web/EditScheduleController.java - java/example/test/service/web/ScheduleOpsController.java - webapp/WEB-INF/hbm-dir/Member.hbm.xml - webapp/WEB-INF/velocity/scheduleops/list_stub.vm - webapp/WEB-INF/velocity/scheduleops/list.vm - webapp/WEB-INF/velocity/editSchedule_stub.vm - webapp/WEB-INF/velocity/editSchedule.vm 変更のあったファイルは、 - webapp/WEB-INF/sql/createTable.sql - webapp/WEB-INF/applicationContext.xml - webapp/WEB-INF/servlet-stub.xml です。 最初の実行と同様にwarファイルを生成します。 #pre{{ mvn package }} test.warファイルをtomcat/webappsにコピーします。 ブラウザーでhttp://localhost:8080/test/scheduleops/list.htmを指定すると、 addリンクだけのページ表示されますので、addリンクをクリックします。 #ref(editschedule.jpg); データを入力してSave Changesボタンを押すと #ref(listschedule.jpg); が表示され、データが正しく入力されていることが確認できます。 ** コメント [#x4a60c7b] この記事は、 #vote(おもしろかった[0],そうでもない[1],わかりずらい[0]) #vote(おもしろかった[1],そうでもない[1],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha