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: コンテキスト設定例

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

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

<resource-ref>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

リスト7: memberlist.jsp

<%@ page contentType="text/html; charset=Shift-JIS"
pageEncoding="Shift-JIS"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
<%@page
import="java.sql.*,
         javax.sql.*,
         javax.naming.InitialContext,
         javax.naming.Context"%>
<title>memberlist.jsp実行結果</title>
</head>

<body>
<%
  //TomcatからInitialContextを取得します。
  InitialContext initctx = new InitialContext();
  //JNDIルックアップを行いデータソースを取得します。
  //TomcatのJNDIソースはすべてjava:comp/env/への相対パスとなります。
  DataSource ds = (DataSource)initctx.lookup("java:comp/env/jdbc/TestDB");
  //データソースからコネクションを取得します。
  Connection con = ds.getConnection();

  Statement stmt = con.createStatement();
  //SQLの結果セットをResultSetオブジェクトに格納します。
  ResultSet rs = stmt.executeQuery("select * from membership_list;");
%>
<h1>メンバーリスト</h1>
<table>
<tr>
   <th>ID</th>
   <th>名前</th>
   <th>年齢</th>
   <th>電話</th>
</tr>
<% while(rs.next()) { %>
<tr>
   <td>
   <%= rs.getString("id") %>
   </td>
   <td>
   <%= rs.getString("name") %>
   </td>
   <td>
   <%= rs.getString("age") %>
   </td>
   <td>
   <%= rs.getString("tel") %>
   </td>
</tr>
<%
  }
  con.close();
  initctx.close();
%>
</table>
</body>
</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/)のドキュメントが助けとなることでしょう。

株式会社ビーブレイクシステムズ

千葉大学法経学部卒業。大学時代よりオープンソースに興味を持ち、オープンソース専業ベンダーのビーブレイク システムズに入社。現在に至る。また、現在は社内技術サークルの中心メンバーとして日々提案・啓蒙活動を行う。座右の銘は「自らが求めてつくらなければ、 自身が求めるものはできない」

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています