サーブレットでリクエストを受け取って、テーブルのデータ一覧を表示する


スポンサーリンク

サーブレットでリクエストを受け取って、DBにSELECT文を投げ、受け取ったデータの一覧をJSPで表示してみます。
updateやcreateは次の記事で試してみます。

サーブレットからDBへの接続は、別の記事を参考にしてください。
(JSP/サーブレットタグのどこかにあるはず)

ディレクトリ構成はこんな感じ。
f:id:sho322:20150102120853j: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>list</servlet-name>
    <servlet-class>controller.ListServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>list</servlet-name>
    <url-pattern>/member/list</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>

ListServlet.java

package controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import bean.Member;

public class ListServlet  extends HttpServlet {
	@Resource(name = "jdbc/test")
	private DataSource ds;

	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {
		Connection con = null;

		try {
			con = ds.getConnection();
			List<Member> list = new ArrayList<Member>();
			Statement stmt = con.createStatement();

			String sql = "SELECT * from member";
			ResultSet rs = stmt.executeQuery(sql);
			while (rs.next()) {
				String id = rs.getString("id");
				String name = rs.getString("name");
				String age = rs.getString("age");
				list.add(new Member(id,name,age));
			}
			req.setAttribute("members", list);
			getServletContext().getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req, res);
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (con != null) {
					con.close();
				}
			} catch (SQLException e) {
				throw new ServletException();
			}
		}
	}
}


Member.java

package bean;

public class Member {
	private String id;
	private String name;
	private String age;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}

	public Member(String id, String name, String age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

}


list.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>list</head>

<body>
<table>
  <tr>
    <th>id</th>
    <th>name</th>
    <th>age</th>
  </tr>
<c:forEach var="member" items="${members}">
  <tr>
    <td>${member.id }</td>
    <td>${member.name}</td>
    <td>${member.age }</td>
  </tr>
</c:forEach>

</table>
<br/>



</body>
</html>

リクエストを飛ばすと、以下のように表示されます。
f:id:sho322:20150102120905j:plain