Code Log

プログラミングの勉強メモを残していきます。

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

ディレクトリ構成はこんな感じ。
f:id:sho322:20150102101607j:plain

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&amp;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>

結果は以下のように表示されます。

f:id:sho322:20150102101614j:plain

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のプラグインが自動で生成するものなのか、プロジェクト生成時に勝手に作られているので、一回削除したらうまくいきました。
一回削除すると、もう一度勝手に作ってくれるみたいなので。


スッキリわかるサーブレット&JSP入門

スッキリわかるサーブレット&JSP入門