JSP/JSTLだけでDBの値を読み込んでみる
Tomcat単体ではJSTLを使うことができないので、JSTLライブラリを用意する必要があります。
最低限必要なのは以下の3つです。
■jstl.jar
http://repo2.maven.org/maven2/javax/servlet/jstl/
■standard.jar
http://repo2.maven.org/maven2/taglibs/standard/
■mysql-connector-java
http://dev.mysql.com/downloads/file.php?id=13598
ディレクトリ構成はこんな感じ。
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>sample</servlet-name> <servlet-class>sample.SampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sample</servlet-name> <url-pattern>/sample/*</url-pattern> </servlet-mapping> <resource-ref> <res-ref-name>jdbc/test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
context.xml
<Context reloadable="true"> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" username="sample" password="1234" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8" validationQuery="Select 1"/> </Context>
sql.jsp
<%@ page contentType="text/html; charset=utf-8" %> <%@ page session="false" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <sql:query var="rs" dataSource="jdbc/test"> SELECT name, age FROM member </sql:query> <html> <head> <title>SQL JSP</title> </head> <body> <table> <tr> <th>name</th> <th>age</th> </tr> <c:forEach var="member" items="${rs.rows}"> <tr> <td>${member.name}</td> <td>${member.age}</td> </tr> </c:forEach> </table> </body> </html>
結果は以下のように表示されます。
Eclipseで開発していて、context.xmlやweb.xmlを正しく記述しているのにもかかわらず、以下のようなエラーが出るとき。
javax.servlet.jsp.JspException: DataSource が無効であるため、Connection を取得できません: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'" org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:276)
とか、
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: DataSource が無効であるため、Connection を取得できません: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
ね。
そのときは、Eclipseのtomcatの設定ファイルを一回確認してみましょう。
C:\Program Files\eclipse\pleiades\tomcat\6\conf\Catalina\localhost
みたいなEclipseのインストールディレクトリの下のほうに、「love-report.xml」のような、コンテキストルート名.xmlがある。
そいつはEclipseのtomcatのプラグインが自動で生成するものなのか、プロジェクト生成時に勝手に作られているので、一回削除したらうまくいきました。
一回削除すると、もう一度勝手に作ってくれるみたいなので。
- 作者: 国本大悟
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/05/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る