eclipse(lomboz+easyStruts)でTomcat Webアプリ開発

作成者 城風敏彦 2005/05/02

まえがき

この文章では、J2EEアプリ開発支援プラグインlombozと、Strutsアプリ開発支援プラグインeasyStrutsを使ったTomcatアプリ 作成方法について説明する。
ただし、Tomcatはクラスのキャッシュが残って思わぬ動作をすることがあるので、JBOSSを用いることを推奨する。 CPU500M以下、メモリ256M以下などの非常にきびしい環境でないかぎりJBOSSでも開発が進められると思うからである。

Lombozプラグインの設定

Lombozプラグインで、JSPなどの文法チェックや、Webサーバーへのデプロイ(配置、インストール)ができる。
C:\java\jakarta-tomcat-5.0.28以下にbinがあるようにインストールしてあるとする。
インストールはここをが参考になる。

備考)
デフォルトのポート番号は8080だが、Oracleサーバーを入れるとぶつかる。
Oracleサーバーを自分のマシンに入れる人は、C:\java\jakarta-tomcat-5.0.28\conf\server.xml で、
Connector port="8080"
を、
Connector port="8081"
として、http://localhost:8081 とアクセスした方が安全である。

デフォルトのままではTomcatを起動できないので。インストールしたままの
C:\eclipse2.1.2\eclipse-SDK-2.1.2-win32\eclipse\plugins\com.objectlearn.jdt.j2ee\eclitomcat50x.servers
のstartVMParametersとstopVMParametersの-Djava.endorsed.dirs の中から${serverRootDirectory}/bin;を削除する。

eclipseを起動(再起動)。


ウインドウ>設定>Lomboz
JDK Tool jarで、C:\jdk1.5.0_03\lib\tools.jar など、JDKのtools.jarを指定。 下の図では1.4.0_02になっているが、自分のPCのJDKを指定する。




ServerDefinitionで以下のように設定してOKを押す。C:/jakarta-tomcat-5.0.28など自分のPCのTomcatのパスを2回指定することになる。




ここでTomcat5.0.xを設定しても、デフォルトはJboss2.4.4のままである。プロジェクトごとにサーバーを選べるので これで良い。

OK を押す。

EasyStrusプラグインの設定

http://www.apache.org/dist/jakarta/struts/binaries/
からjakarta-struts-1.1.zipを落として、適当なフォルダに展開しておく。ここでは、C:\java\jakarta-struts-1.1フォルダとした。
ウインドウ>設定>EasyStruts Struts1.1 で以下のように、
Add JARS で、C:\java\jakarta-struts-1.1\lib の全てのjarを一つずつ追加する。
Add TLDS で、C:\java\jakarta-struts-1.1\lib の全てのtldを一つずつ追加する。
以下のようになる。




OK

プロジェクト作成

ファイル>新規>プロジェクト




次へ




プロジェクト名をtomcatにして、次へ





フォルダーの追加




srcを入れてOK




はい




次へ




Add…




tomcatWebと入力してOKを押す。




Targeted Serversタブを押す。




Apache Tomcat5.0.xを選択して、Add を押し、終了を押す。




tomcatプロジェクトを右クリック>設定>EasyStruts を選択。




Add Struts support to Project をクリック。




Webapp folder を、プロジェクトのWebモジュールと同じ tomcatWeb と入力して、「終了」。
Base package for generation は、開発のパッケージが決まっていればそれを指定する。今回はこのまま。




「OK]




eclipseのパッケージエクスプローラのtomcatプロジェクトのtomcatWebを右クリックし、
Lomboz J2EE > Deploy Module を選択。




コンソールにメッセージが表示される。
eclipseのパッケージエクスプローラのtomcatプロジェクトのtomcatWebを右クリックし、
Lomboz J2EE > Run Server を選択。





コンソールにメッセージが表示される。
http://localhost:8081/tomcatWeb/




struts-config.xml を選択すると以下のように見える。




Action,ActionFormとActionForwardの追加で開発を進めることになる。

DBのコネクションプーリング

実現するデータソースの設定をする。
LAN環境にOracleとPostgresのサーバーが動いている前提。
F:\開発ツールに、oracle9i, postgres8があるので、どこにも無ければインストールする。
Webではこちらから
http://otn.oracle.co.jp/software/products/oracle9i/index.html
http://www.postgresql.org/ftp/binary/v8.0/win32/
ここではPostgres8がlocalhostで動いていて、DB名はtemplate1、ユーザ名postgres、パスワードpasswordとする。
Oracleについては、localhost、DB名orcl,ユーザscott,パスワードpasswordとする。

OracleとPostgresのJDBCドライバーを取得する。F:\開発tool\libにも置いてある。

Oracle9,10であればclasses12.jar(Oracle9iの場合 C:\oracle\ora92\jdbc\lib 、
Oracle10の場合 C:\oracle\product\10.1.0\Db_1\jdbc\lib  などにある)
をsample/sampleWeb/WEB-INF/lib にコピーする。

Postgres8であればpostgresql-8.0.309.jdbc3.jar (C:\PostgreSQL8.0\jdbcなどにある)
をsample/sampleWeb/WEB-INF/lib にコピーする。

tomcatWebを右クリックし、Lomboz J2EEで Add WEB-INF/lib jars to classpath を選択する。

またTomcatサーバーでの実行のために、上の2つのjarを、
C:\java\jakarta-tomcat-5.0.28\common\lib
にコピーする。


C:\java\jakarta-tomcat-5.0.28\conf\Catalina\localhost に以下のような内容のtomcatWeb.xml を作成する。

http://www5.plala.or.jp/shirokaze/java/tomcatWeb.xml

tomcatWebを右クリックし、新規>その他




Lomboz JSP Wizard を選んで、次へ




jndi.jsp と入力し「終了」を押する。




jndi.jsp を以下の内容にする。
http://www5.plala.or.jp/shirokaze/java/jndi.tom.txt

tomcatプロジェクトをデプロイして、サーバーを再起動(StopしてRun)してブラウザで見ると以下のように出る。
jndi.jspが無いといわれたら、Tomcatのデプロイフォルダのキャッシュが残って 新しいモジュールがインストールできていない ことがある。
この場合、C:\java\jakarta-tomcat-5.0.28\webapps\tomcatWeb フォルダを手動で消去してデプロイ、サーバー起動 とやってみるとうまくいく。



データソースが取得できれば、Jakarta-dbUtilsが使うこともできるし、自分でJDBCを駆使してDBアクセスもできる。

またTomcatなどのコンテナがない環境で、DBアクセスするプログラムの開発をするために、 コンテナが無いとプロパティファイルから接続情報を取得してJNDIを経由しないでデータソースを 作成するクラスも作成済みで 、

OracleDataSourceManager
PostgresDataSourcemanager
という名前です。以下のソースにあるように、catalina_baseシステムプロパティからコンテナを判別する。


    /* コンテナの判別 */

    static {

        String catalina_base = System.getProperty("catalina.base");

        if(catalina_base != null && !catalina_base.equals("")) {

            String base = catalina_base.toLowerCase();

            if(base.indexOf("tomcat") != -1) {

                container_flag = 1;

            } else if(base.indexOf("jboss") != -1) {

                container_flag = 2;

            }

        }

    }

http://ueno.cool.ne.jp/shirokaze185/java/sample.jar からダウンロードできる。
tomcatプロジェクトにsample.jar中のソースをインポートする。

tomcatプロジェクトのsrcを右クリックして、インポートを選ぶ。




Zipファイル を選択して、次へ



sample.jar を選択して、「開く」。次のページで「終了」



sample.util.db パッケージができて、ソースとプロパティが見える。

DBアクセス本体については、
jakarta-commons-dbutil(http://jakarta.apache.org/commons/dbutils/)はDAO(DataAccessObject)の代替となる。
commons-dbutils-1.1-dev.jarをF:開発ツール\libか、上のページから取得(最新のNightliy Buildをダウンロード)して、 WEB-INF/libに入れて、Add WEB-INF/lib jars to classpathを行う。
C:\java\jakarta-tomcat-5.0.28\common\lib にもコピーする。
以下の内容のsql.jsp をjndi.jspと同様の手順でjbossWebに作成する。
http://www5.plala.or.jp/shirokaze/java/sql.jsp.txt

以下の内容の style.css もjspと同様に作成する。

TABLE {border:solid 0.5px gray;
border-collapse:collapse;
background:black;
}
TH { border: solid 1px darkblue;
background:yellow}
TD {border: solid 1px darkred;
background:white; }

デプロイと再起動して実行すると以下のようになる。



これをStrutsのActionで作ってみる。入力JSPと結果JSPをつなぐのがActionというわけである。 tomcatプロジェクトで、新規>その他



East Struts> Easy Action associed with a form を選択して「次へ」



Use case にsql と入力、 Form properties 右のAdd…を押す。



Nameにsqlを入力して、「OK]



「終了」。他にあれば入力し最後に「終了」を押す。



「次へ」



「次へ」



「終了」



「終了」



com.youcompany.struts.action.SqlAction.java
com.youcompany.struts.action.SqlForm.java
tomcatWeb.form/sql.java
ができており、config.xmlが変更されている。

SqlForm.java のvalidateメソッドがUnsupportedException を投げて実装していないことを表しているので、

public ActionErrors validate(

ActionMapping mapping,

HttpServletRequest request) {

// Perform validator framework validations

ActionErrors errors = super.validate(mapping, request);



return errors;

}

と何もチェックしないように修整する。

SqlAction.java のexecuteメソッドを以下のように実装する。Inport文は、前記のsql.jspを参考にされたい。

public ActionForward execute(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {



SqlForm sqlForm = (SqlForm) form;

String sql = sqlForm.getSql();

    if(sql == null || sql.equals(""))  { 

    sql = "select * from pg_tables"; 

    }

DataSource ds = PostgresDataSourceManager.getDataSource();

QueryRunner qr = new QueryRunner(ds);

ResultSetHandler rsh = new MapListHandler();

List list = (List)qr.query(sql, rsh);

request.setAttribute("result", list);



return mapping.findForward("success");

}

requestにlistをセットして、次のページsqlresult.jspでゲットして使うようにしている。
この例はサンプルであり、Formのチェックがない、requestにセットするキーをMappingから取って いない、例外処理を記述していない。
実際の業務で複数人で開発をする場合は、チェックは行い、キーは設定ファイルや定数で共有し、 適切な例外処理を書くことになる。

結果表示のJSPをtomcatWeb直下にsqlresult.jsp という名前で、以下のように作成する。
DataSourceやDbUtilsのクラスが消えて、Listの表示だけに特化している。
http://www5.plala.or.jp/shirokaze/java/sqlresult.jsp.txt

http://localhost:8081/tomcatWeb/form/sql.jsp

なにも入れないでSubmitすると、select * from pg_tables が実行され、 URLが http://localhost:8081/tomcatWeb/sql.do に変わって、 以下のように、JSPだけで記述したのと同じ結果になる。




Oracleの場合は、Action中のPostgresDataSourceManagerをOracleDataSourceManagerに、 pg_tablesをcatに変更すれば良い。

<参考URL>

http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html
http://nemuneko.com/jboss/eclipse.html
http://www.system-act.com/eclipse/lomboz.html
http://www.eclipsewiki.net/eclipse/?Struts%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3
http://www-6.ibm.com/jp/developerworks/opensource/040723/j_os-ecstruts.html


著者:城風敏彦

Java道場に戻る。