サーブレットでリクエストを受け取って、テーブルのデータ一覧を表示する
サーブレットでリクエストを受け取って、DBにSELECT文を投げ、受け取ったデータの一覧をJSPで表示してみます。
updateやcreateは次の記事で試してみます。
サーブレットからDBへの接続は、別の記事を参考にしてください。
(JSP/サーブレットタグのどこかにあるはず)
ディレクトリ構成はこんな感じ。
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&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>
リクエストを飛ばすと、以下のように表示されます。