BlogもどきのWeblog

備忘録と日々の呟きとメモとCGIの実験場とされる何か。
プロフィール

GLANSHE
絵描き担当らしい

Total: 31163
Today: 37
Yesterday: 99
最新の記事

コンテンツ

最新のコメント

最新のトラックバック

カテゴリー

リンク

ニコ動MyListLink

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(「ネイティブなコネクションを取得」の節)


time stamp:2009/04/10 15:06:23
トラックバック(0)|コメント(0)
この記事のトラックバックURL:

コメントを書く
名前:
タイトル:
MAIL:
URL:
コメント:
PASS:
何かしら