解答例 - 実習課題2 - 3.サーブレットの基本2
(実習課題2)
実習課題1を改良しなさい。
- それぞれのメソッドの先頭で、必ずログに出力を行うこと。
- 例外が発生したときにも、ログに出力を行なうようにする事。
- わざと例外が発生する状況にし、例外がどのようにログに出力されるか確認すること。
解答例
/*
* DisplayDbTableServlet.java TECHSCORE Java Servlet3章 実習課題2
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.servlet.chapter3.exercise2;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DisplayDbTableServlet extends HttpServlet {
private static final String[] PARAMS = { "sql1", "sql2", "sql3" };
private String[] sqls = new String[PARAMS.length];
private String url = null;
private String username = null;
private String password = null;
private String driverClassName = null;
private boolean isEmptySqls() {
for (int i = 0; i < sqls.length; i++) {
if (sqls[i] == null) {
return true;
}
}
return false;
}
private Connection getConnection() throws SQLException {
this.log("getConnection() run");
Connection conn = null;
try {
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
this.log("getConnection()", e);
}
return conn;
}
private String getHtmlTable(HttpServletRequest request,
HttpServletResponse response, Connection conn, String sql)
throws SQLException {
this.log("readDb() run");
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery(sql);
StringBuffer buffer = new StringBuffer();
buffer.append("<table border=\"1\">");
while (result.next()) {
buffer.append("<tr><td>").append(result.getInt(1)).append("</td>");
buffer.append("<td>").append(result.getString(2)).append("</td>");
buffer.append("<td>").append(result.getString(3)).append("</td>");
buffer.append("<td>").append(result.getInt(4)).append("</td></tr>");
}
buffer.append("</table>");
result.close();
statement.close();
return buffer.toString();
}
private String getSuitableSql(String param) {
String sql = null;
for (int i = 0; i < sqls.length; i++) {
if (param.equals(PARAMS[i])) {
sql = sqls[i];
}
}
return sql;
}
public void init() throws ServletException {
this.log("init() run");
ServletContext context = this.getServletContext();
url = context.getInitParameter("url");
username = context.getInitParameter("username");
password = context.getInitParameter("password");
driverClassName = context.getInitParameter("driverClassName");
for (int i = 0; i < PARAMS.length; i++) {
sqls[i] = context.getInitParameter(PARAMS[i]);
}
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.log("doGet() run");
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter writer = response.getWriter();
writer.println("<html><head><title>"
+ "Servlet3章Exercise2</title></head><body>");
if (!this.isEmptySqls()) {
StringBuffer buffer = new StringBuffer();
buffer.append("<form action=\"\" method=\"post\">");
for (int i = 0; i < PARAMS.length; i++) {
buffer.append("<input type=\"radio\" name=\"sql\" value=\"");
buffer.append(PARAMS[i]).append("\">");
buffer.append(PARAMS[i].toUpperCase()).append("<br>");
}
buffer.append("<input type=\"submit\" value=\"送信\">");
buffer.append("</form>");
writer.println(buffer.toString());
}
writer.println("</body></html>");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.log("doPost() run");
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter writer = response.getWriter();
writer.println("<html><head><title>"
+ "Servlet3章Exercise2</title></head><body>");
String param = request.getParameter("sql");
if (param != null) {
String sql = getSuitableSql(param);
Connection conn = null;
try {
conn = this.getConnection();
writer.println(getHtmlTable(request, response, conn, sql));
} catch (SQLException e) {
this.log("doPost()", e);
} finally {
try {
conn.close();
} catch (SQLException e) {
}
}
} else {
writer.println("SQL文を選択してください。<br>");
}
writer.println("<a href=\"servlet3-2\">戻る</a></body></html>");
}
}

