ServletのMYSQL接続
(1) ディレクトリ構成
$ tree test04 test04 ├── META-INF │ └── context.xml └── WEB-INF └── classes ├── test04.class └── test04.java 3 directories, 3 files s(2) テーブルとデータ
$ mysql -unaoki -p sampledb Enter password: mysql> create table foods( -> code varchar(8) PRIMARY KEY, -> name varchar(100), -> price integer, -> index(price) -> ) engine=InnoDB; Query OK, 0 rows affected (0.12 sec) mysql> insert into foods values('000001','りんご',398); Query OK, 1 row affected (0.03 sec) mysql> insert into foods values('000002','みかん',480); Query OK, 1 row affected (0.04 sec) mysql> insert into foods values('000003','柿' ,450); Query OK, 1 row affected (0.04 sec) mysql> select * from foods; +--------+-----------+-------+ | code | name | price | +--------+-----------+-------+ | 000001 | りんご | 398 | | 000002 | みかん | 480 | | 000003 | 柿 | 450 | +--------+-----------+-------+ 3 rows in set (0.00 sec)(3) コンテキストファイル
コネクションプールはDBCPとJDBCという2つの仕組みが提供されているらしい。TOCAT7ではデフォルトはDBCPらいしいが、切り替えるには、factory で指定できるらしい。jndi の定義は、本来は tomcat7/conf 配下の context.xml で設定するべきだと思うのだが、アプリケーション単位に設定できる。全く同じ jndi名で片方のアプリケーションがコネクションプールを使いきっても、もう一方のアプリケーションが独自に context.xml を使っていれば影響はなかった。サーバー管理としては、一箇所で管理したいところだとは思うが、個別にアプリをテストする時には便利な仕様である。
$ cat test02/META-INF/context.xml <Context> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="naoki" password="password" driverClassName="com.mysql.jdbc.Driver" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" url="jdbc:mysql://localhost:3306/sampledb"/> <!-- factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" --> </Context>(4) SERVLEAT(JAVA)ファイル
$ cat test04/WEB-INF/classes/test04.javaimport java.io.*; import java.sql.*; import javax.sql.*; import javax.naming.*; import javax.servlet.*; import javax.servlet.annotation.*; import javax.servlet.http.*; @WebServlet(name="test04", urlPatterns={"/test04"}) public class test04 extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException { InitialContext initctx = null; Connection con = null; try { initctx = new InitialContext(); DataSource ds = (DataSource)initctx.lookup("java:comp/env/jdbc/TestDB"); con = ds.getConnection(); res.setContentType("text/html; charset=UTF-8"); PrintWriter out = res.getWriter(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from foods;"); out.println("<html>"); out.println("<head>"); out.println("<title> SERVLET-TEST </title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>果物一覧</h3>"); out.println("<table>"); out.println("<tr>"); out.println("<th>CODE</th>"); out.println("<th>名前</th>"); out.println("<th>値段</th>"); out.println("</tr>"); while(rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getString("code") + "</td>" ); out.println("<td>" + rs.getString("name") + "</td>" ); out.println("<td>" + rs.getString("price") + "</td>" ); out.println("</tr>"); } out.println("</body>"); out.println("</html>"); con.close(); initctx.close(); } catch(NamingException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } } }
(5)コンパイル
javac -cp ~/tomcat7/lib/servlet-api.jar test04/WEB-INF/classes/test04.java
(5)TOMCATへ配備
$ cp -rp test4 ~/tomcat7/webapps(4)実行結果
0 件のコメント:
コメントを投稿