最終更新日:181120原本2008-01-10 

Tomcatと外部のプログラムを連携させよう!

2008年1月10日(木)
羽倉 敬

2.コンテキストにJDBC JDNIリソースを設定する

Webアプリケーションのコンテキストに要素を追加します(リスト5)。今回はホスト上のすべてのWebアプリケーションがデータソースにアクセスできるようにWebアプリケーションのコンテキスト定義を行います。

docbase属性にはWebアプリケーションのディレクトリを指定します。usernameとpassword属性にはデータベースに接続可能なユーザの情報を指定します。driverClassName属性は最初に用意したMySQL用のJDBCドライバクラス名です。url属性にはデータベー スのURLを指定します。ポート番号にはMySQLデフォルトの3306を使っています。もし、ホスト上のすべてのアプリケーションから同じデータベース を利用したい場合は、これらをで宣言します。


3.web.xmlにJNDIリソースを参照する要素を追加する 

次に、web.xmlのの間にコンテキストで定義したJNDIリソースを参照する要素を追加します(リスト6)。このときコンテキストののname属性の値 と、web.xmlの要素の値が一致するようにしてください。

4.プログラム中でルックアップを行いデータソースを取得する

ようやく、プログラムからデータベースを使う準備ができました。リスト7のJSPソースはJNDIを使ってmembership_listテーブルのレコードを一覧表示するものです。

リスト5: コンテキスト設定例

1<Context path="/JDBCSample" reloadable="true" docBase="C:\JDBCSample" workDir="C:\JDBCSample\work">
2  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
3            maxActive="100" maxIdle="30" maxWait="10000"
4            username="user" password="pass" driverClassName="com.mysql.jdbc.Driver"
5            url="jdbc:mysql://localhost:3306/test_db"/>
6</Context>

リスト6: web.xml<resource-ref>設定例

1<resource-ref>
2  <res-ref-name>jdbc/TestDB</res-ref-name>
3  <res-type>javax.sql.DataSource</res-type>
4  <res-auth>Container</res-auth>
5</resource-ref>

リスト7: memberlist.jsp

01<%@ page contentType="text/html; charset=Shift-JIS"
02pageEncoding="Shift-JIS"%>
03<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
05<html>
06<head>
07<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
08<%@page
09import="java.sql.*,
10         javax.sql.*,
11         javax.naming.InitialContext,
12         javax.naming.Context"%>
13<title>memberlist.jsp実行結果</title>
14</head>
15 
16<body>
17<%
18  //TomcatからInitialContextを取得します。
19  InitialContext initctx = new InitialContext();
20  //JNDIルックアップを行いデータソースを取得します。
21  //TomcatのJNDIソースはすべてjava:comp/env/への相対パスとなります。
22  DataSource ds = (DataSource)initctx.lookup("java:comp/env/jdbc/TestDB");
23  //データソースからコネクションを取得します。
24  Connection con = ds.getConnection();
25 
26  Statement stmt = con.createStatement();
27  //SQLの結果セットをResultSetオブジェクトに格納します。
28  ResultSet rs = stmt.executeQuery("select * from membership_list;");
29%>
30<h1>メンバーリスト</h1>
31<table>
32<tr>
33   <th>ID</th>
34   <th>名前</th>
35   <th>年齢</th>
36   <th>電話</th>
37</tr>
38<% while(rs.next()) { %>
39<tr>
40   <td>
41   <%= rs.getString("id") %>
42   </td>
43   <td>
44   <%= rs.getString("name") %>
45   </td>
46   <td>
47   <%= rs.getString("age") %>
48   </td>
49   <td>
50   <%= rs.getString("tel") %>
51   </td>
52</tr>
53<%
54  }
55  con.close();
56  initctx.close();
57%>
58</table>
59</body>
60</html>

Webブラウザで表示を確認

Tomcatを起動し、「http://localhost:8080/JDBCSample/memberlist.jsp」にアクセスすると、データベースのmembership_listテーブルの内容がWebブラウザに出力されます。

以上がTomcatからデータソースを扱う基本的な手順になります。今回は簡単なSELECT文を実行しましたが、JDBCを利用してINSERT・UPDATE・DELETEなどさまざまなSQLが実行可能です。

まとめ

今回はTomcatをWebサーバApacheと連携させる方法、およびTomcatからデータベースに接続する方法を解説しました。

Tomcatは最古のアプリケーションサーバであり、さまざまなアプリケーションサーバが登場している現在もその人気は衰えていません。原稿執筆時点(2007年12月)では、最新バージョン6.0.14が公開されており、Tomcat 5.5にはなかったアノテーションやコメットといった新機能も追加されています。

これらの新機能や今回解説しきれなかった機能についてさらに理解を深めたい場合はApache Tomcatのページ(http://tomcat.apache.org/)のドキュメントが助けとなることでしょう。