Tomcat5.5でJavaでJDBCでMySQL
Tomcat5.5環境でJavaでJDBCのAPIを使ってMySQL5.0に接続する設定を書いた時のメモ
開発環境はeclipseでJ2SDK1.4.2くらい。
他に何かあった気がしたけど忘れた。
TomcatサーバでJava言語を使ってMySQLのDBを使うには、まずJDBCドライバをインストールする。
jarを置く場所は「%CATALINA_HOME%\common\lib」
eclipseで開発してるので、プロジェクトのWEB-INF/libに入れてビルドパスに追加する。
とりあえずMySQLで適当なテーブルを作成。
作成したのは
Tomcat5 サーブレット/JSP コンテナ
で解説されてたのを参考にして適当に
テスト用ユーザ:javatest
パスワード:javadude
データベース:javatest
テーブル:testdata
を作成した。
次にserver.xmlの設定…はしないで、コンテクスト.xmlを書く。
server.xmlは弄らなくても大丈夫です。
コンテクスト.xmlとは、指定したパスにリクエストを投げるための設定ファイルで、.htaccessに似てる?
%CATALINA_HOME%\conf\[engine name]\[host name]に作成する。
デフォルトではengine nameがCatalina、host nameがlocalhostとなっている
例えば、
http://localhost/test/
とかにリクエストが着たら、ROOTの下にあるtestディレクトリじゃなくて、まったく別のディレクトリに処理を投げるための設定がこれ。
書くのは、主にContextタグとResourceタグで、Contextタグは対象のパスとディレクトリを指定するためのタグで、例えばこんな風に書く。
<Context path="/test" reloadable="true"
docBase="C:\eqlipse\workspace\test"
workDir="C:\eqlipse\workspace\test\work" />
これで、http://localhost/test/にリクエストが来た場合、C:\eqlipse\workspace\testにリクエストを投げる。
このときのxmlのファイル名は、パス名と同じ「test.xml」にする。
次にResourceタグはこのように書く。
<Resource
name="jdbc/test"
type="javax.sql.DataSource"
auth="Container"
username="javauser"
password="javadude"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/javatest?characterEncoding=SJIS"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
/>
それぞれのパラメータの簡単な説明と言うかわかった事。
name:リソースの名前。適当でOK。web.xmlにも書くので覚えておくこと。
type:よくわからないけどリソースのタイプ。javax.sql.DataSourceを指定。これはデータソース形式を使う場合のタイプ。
auth:知らない。Containerを指定。
username:MySQLのユーザ名を指定。さっき作成したユーザ名を指定する。
password:さっき作成したユーザのパスワードを指定。
driverClassName:JDBCドライバのクラス名?MySQLを使う場合はorg.gjt.mm.mysql.Driverを指定。
url:MySQLのURLを指定。今回はlocalhostで動いてるMySQLに接続するので、ホスト名はlocalhost。MySQLに接続するポートの初期設定が3306なので、ポート番号を指定。これはしなくてもいいかも(未確認)。それから/で区切って、さっき作ったDB名を指定する。
?以降は文字コードの設定。これがないとUTF-8でデータのやり取りされるっぽい?(未確認)
factory:よくわからないけどfactoryに該当するクラス名を指定。注意しなきゃいけないのが、context.xmlでJDBCでMySQLみたいな単語で検索すると、
org.apache.tomcat.dbcp.BasicDataSourceFactory
って書いてある事が多い。
Tomcat5.5を使っている場合、これが
org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
となるのでここでハマりまくる人が多いらしい。
ここまでReSourceタグの説明
ちなみに、Tomcat5.5ではReSourceParamsタグが使えないらしいので(未確認)全部ReSourceに書くこと。
次にweb.xmlを書く。
置く場所はC:\eqlipse\workspace\test\WEB-INF
こんな風に書く。
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
キーポイントはres-ref-nameタグにさっきReSourceで指定した名前を書くこと。
typeもauthも同じ?なのかな(未確認)
設定するファイルは以上。
サンプルプログラムはこんな感じ。ちなみにJSP。
01 <%@page contentType="text/html; charset=shift_jis" %>
02 <%@page import="java.util.*"%>
03 <%@page import="java.io.*"%>
04
05 <%@page import="java.sql.*, java.sql.Date"%>
06 <%@page import="javax.sql.*"%>
07 <%@page import="javax.naming.*"%>
08
09 <html>
10 <head><title>db_tesst.jsp</title></head>
11 <body>
12 <ul>
13 <%
14 Context context=new InitialContext();
15
16 DataSource dataSource = null;
17
18 dataSource=(DataSource)context.lookup("java:comp/env/jdbc/test");
19
20 Connection conn=null;
21 conn=dataSource.getConnection();
22 PreparedStatement statement=conn.prepareStatement("select foo from testdata");
23 ResultSet result=statement.executeQuery();
24
25 while(result.next()){
26 out.println("<li>"+result.getString(1)+"</li>");
27 }
28
29 if(conn!=null) conn.close();
30
31 out.println("</ul>\nend db session");
32
33 %>
34
35 </body>
36 </html>
ここまで。
例外処理とかまったく投げてないので実行時は注意すること。
05行目でわざわざjava.sql.Dateをインポートしてるのは、java.io.Dateとクラスがかぶってしまうための処理。
18行目の引数は、java:comp:env/までが固定。それ以降はReSourceで指定したリソースの名前。
23行目でsql文をデータベースに投げている。
と言う話でした。
きっとどっか抜けてるけどまぁいいや。
後は言わなくてもわかって下さい。
某氏が言ってたようにホントに自鯖に立てるWebサーバソフトがTomcatになりそうな予感。
と言うかubuntu server入れたらTomcat勝手に入ったし\(^o^)/
参考URL
オブジェクト指向とデザインパターンブログ
tomcat - pukiwiki(「ネイティブなコネクションを取得」の節)
開発環境はeclipseでJ2SDK1.4.2くらい。
他に何かあった気がしたけど忘れた。
TomcatサーバでJava言語を使ってMySQLのDBを使うには、まずJDBCドライバをインストールする。
jarを置く場所は「%CATALINA_HOME%\common\lib」
eclipseで開発してるので、プロジェクトのWEB-INF/libに入れてビルドパスに追加する。
とりあえずMySQLで適当なテーブルを作成。
作成したのは
Tomcat5 サーブレット/JSP コンテナ
で解説されてたのを参考にして適当に
テスト用ユーザ:javatest
パスワード:javadude
データベース:javatest
テーブル:testdata
を作成した。
次にserver.xmlの設定…はしないで、コンテクスト.xmlを書く。
server.xmlは弄らなくても大丈夫です。
コンテクスト.xmlとは、指定したパスにリクエストを投げるための設定ファイルで、.htaccessに似てる?
%CATALINA_HOME%\conf\[engine name]\[host name]に作成する。
デフォルトではengine nameがCatalina、host nameがlocalhostとなっている
例えば、
http://localhost/test/
とかにリクエストが着たら、ROOTの下にあるtestディレクトリじゃなくて、まったく別のディレクトリに処理を投げるための設定がこれ。
書くのは、主にContextタグとResourceタグで、Contextタグは対象のパスとディレクトリを指定するためのタグで、例えばこんな風に書く。
<Context path="/test" reloadable="true"
docBase="C:\eqlipse\workspace\test"
workDir="C:\eqlipse\workspace\test\work" />
これで、http://localhost/test/にリクエストが来た場合、C:\eqlipse\workspace\testにリクエストを投げる。
このときのxmlのファイル名は、パス名と同じ「test.xml」にする。
次にResourceタグはこのように書く。
<Resource
name="jdbc/test"
type="javax.sql.DataSource"
auth="Container"
username="javauser"
password="javadude"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/javatest?characterEncoding=SJIS"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
/>
それぞれのパラメータの簡単な説明と言うかわかった事。
name:リソースの名前。適当でOK。web.xmlにも書くので覚えておくこと。
type:よくわからないけどリソースのタイプ。javax.sql.DataSourceを指定。これはデータソース形式を使う場合のタイプ。
auth:知らない。Containerを指定。
username:MySQLのユーザ名を指定。さっき作成したユーザ名を指定する。
password:さっき作成したユーザのパスワードを指定。
driverClassName:JDBCドライバのクラス名?MySQLを使う場合はorg.gjt.mm.mysql.Driverを指定。
url:MySQLのURLを指定。今回はlocalhostで動いてるMySQLに接続するので、ホスト名はlocalhost。MySQLに接続するポートの初期設定が3306なので、ポート番号を指定。これはしなくてもいいかも(未確認)。それから/で区切って、さっき作ったDB名を指定する。
?以降は文字コードの設定。これがないとUTF-8でデータのやり取りされるっぽい?(未確認)
factory:よくわからないけどfactoryに該当するクラス名を指定。注意しなきゃいけないのが、context.xmlでJDBCでMySQLみたいな単語で検索すると、
org.apache.tomcat.dbcp.BasicDataSourceFactory
って書いてある事が多い。
Tomcat5.5を使っている場合、これが
org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
となるのでここでハマりまくる人が多いらしい。
ここまでReSourceタグの説明
ちなみに、Tomcat5.5ではReSourceParamsタグが使えないらしいので(未確認)全部ReSourceに書くこと。
次にweb.xmlを書く。
置く場所はC:\eqlipse\workspace\test\WEB-INF
こんな風に書く。
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
キーポイントはres-ref-nameタグにさっきReSourceで指定した名前を書くこと。
typeもauthも同じ?なのかな(未確認)
設定するファイルは以上。
サンプルプログラムはこんな感じ。ちなみにJSP。
01 <%@page contentType="text/html; charset=shift_jis" %>
02 <%@page import="java.util.*"%>
03 <%@page import="java.io.*"%>
04
05 <%@page import="java.sql.*, java.sql.Date"%>
06 <%@page import="javax.sql.*"%>
07 <%@page import="javax.naming.*"%>
08
09 <html>
10 <head><title>db_tesst.jsp</title></head>
11 <body>
12 <ul>
13 <%
14 Context context=new InitialContext();
15
16 DataSource dataSource = null;
17
18 dataSource=(DataSource)context.lookup("java:comp/env/jdbc/test");
19
20 Connection conn=null;
21 conn=dataSource.getConnection();
22 PreparedStatement statement=conn.prepareStatement("select foo from testdata");
23 ResultSet result=statement.executeQuery();
24
25 while(result.next()){
26 out.println("<li>"+result.getString(1)+"</li>");
27 }
28
29 if(conn!=null) conn.close();
30
31 out.println("</ul>\nend db session");
32
33 %>
34
35 </body>
36 </html>
ここまで。
例外処理とかまったく投げてないので実行時は注意すること。
05行目でわざわざjava.sql.Dateをインポートしてるのは、java.io.Dateとクラスがかぶってしまうための処理。
18行目の引数は、java:comp:env/までが固定。それ以降はReSourceで指定したリソースの名前。
23行目でsql文をデータベースに投げている。
と言う話でした。
きっとどっか抜けてるけどまぁいいや。
後は言わなくてもわかって下さい。
某氏が言ってたようにホントに自鯖に立てるWebサーバソフトがTomcatになりそうな予感。
と言うかubuntu server入れたらTomcat勝手に入ったし\(^o^)/
参考URL
オブジェクト指向とデザインパターンブログ
tomcat - pukiwiki(「ネイティブなコネクションを取得」の節)
time stamp:2009/04/10 15:06:23
トラックバック(0)|コメント(0)
トラックバック(0)|コメント(0)
この記事のトラックバックURL:
コメントを書く
何かしら