解答例 - 実習課題1 - 7.リスナー
(実習課題1)
以下のWebアプリケーションを作成しなさい。
- DBに保存されているリンク集(タイトル・URL)を表示する。
- リンク集はアプリケーションの起動時に、DBから読み込み、ServletContextに登録すること。
解答例
/* * InitializationListener.java TECHSCORE Java Servlet7章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.servlet.chapter7.exercise1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class InitializationListener implements ServletContextListener { public static final String URL_KEY = "urlKey"; private Connection getConnection(ServletContext context) throws SQLException { String url = context.getInitParameter("url"); String username = context.getInitParameter("username"); String password = context.getInitParameter("password"); String driverClassName = context.getInitParameter("driverClassName"); Connection conn = null; if (url != null && username != null && password != null && driverClassName != null) { try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { context.log(e.getMessage()); } } return conn; } public void contextInitialized(ServletContextEvent event) { ServletContext context = event.getServletContext(); Connection conn = null; Map map = new HashMap(); try { conn = this.getConnection(context); String sql = "SELECT name, url FROM link"; Statement statement = conn.createStatement(); ResultSet result = statement.executeQuery(sql); while (result.next()) { map.put(result.getString(1), result.getString(2)); } context.setAttribute(InitializationListener.URL_KEY, map); result.close(); statement.close(); } catch (SQLException exception) { context.log("", exception); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException exception) { } } } public void contextDestroyed(ServletContextEvent event) { ServletContext context = event.getServletContext(); context.removeAttribute(InitializationListener.URL_KEY); } }
/* * ListenerServlet.java TECHSCORE Java Servlet7章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.servlet.chapter7.exercise1; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.Map; 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 ListenerServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); StringBuffer buffer = new StringBuffer(); buffer.append("<html><head><title>Servlet 7章実習課題 1"); buffer.append("</title></head><body>"); Map map = (Map)context.getAttribute(InitializationListener.URL_KEY); Iterator iterator = map.keySet().iterator(); while(iterator.hasNext()){ String name = (String)iterator.next(); String url = (String)map.get(name); if (url.startsWith("http://")) { buffer.append("<a href=\"").append(url).append("\">"); buffer.append(name).append("</a><br>"); } } buffer.append("</body></html>"); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter writer = response.getWriter(); writer.println(buffer.toString()); } }