// DetailQueryServlet.java // This servlet receives an addressee identifier as a request argument, // and makes the required query/(queries) to retrieve the addressee's // detail info. This info is loaded into a DataBean that is then stored // in the session environment. The servlet then redirects to the correct // JSP for display. package com.bullseyecomputing.servlets; import java.io.*; import java.util.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import com.bullseyecomputing.beans.AddressDataBean; public class DetailQueryServlet extends HttpServlet { ServletContext context; public void init(ServletConfig config) throws ServletException { super.init(config); // Grab a handle to the local context context = getServletContext(); // Get the name of the jdbc driver from an init param String jdbcDriver = getInitParameter("jdbcDriver"); // Now try to load the driver try { Class.forName(jdbcDriver); } catch(ClassNotFoundException e) { context.log("jdbcDriver: ", e); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); ConnectionListener dbListener; Statement transaction; ResultSet results; RequestDispatcher dispatcher; // Bail if we're not part of a session if(session == null) { dispatcher = context.getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response); } // Look for an existing db connection in the session environment dbListener = (ConnectionListener) session.getAttribute("dbConnection"); // Create one if it's not there if(dbListener == null) { // Load the params from init String jdbcURL = getInitParameter("jdbcURL"); String jdbcUser = getInitParameter("jdbcUser"); String jdbcPassword = getInitParameter("jdbcPassword"); // Attempt to make the connection try { Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword); dbListener = new ConnectionListener(conn); // Push the new connection into the session environment session.setAttribute("dbConnection", dbListener); } catch(SQLException e) { context.log("dbConnection", e); } } // Grab a local handle to the session's db connection Connection db = dbListener.getConnection(); // Build the query based on init and request parameters String selected = getInitParameter("selected"); String table = getInitParameter("table"); String id = request.getParameter("id"); StringBuffer query = new StringBuffer(); query.append("select ").append(selected); query.append(" from ").append(table); query.append(" where id = ").append(id); // context.log(query.toString()); // // Execute the query try { transaction = db.createStatement(); results = transaction.executeQuery(query.toString()); // move to the first (and only) record results.next(); // Create a DataBean to store the results AddressDataBean address = new AddressDataBean(); // Push the data into the DataBean address.setIdNumber(Integer.toString(results.getInt(1))); address.setName(results.getString(2)); address.setStreet(results.getString(3)); address.setCity(results.getString(4)); address.setState(results.getString(5)); address.setZipcode(results.getString(6)); address.setPlus4(results.getString(7)); address.setAreacode(results.getString(8)); address.setPhone(results.getString(9)); // Push the AddressBean into the session environment session.setAttribute("address.data", address); // Close the database transaction results.close(); transaction.close(); } catch(SQLException e) { context.log("DetailQueryServlet: Error during SQL transaction", e); } // Forward to the corresponding JSP dispatcher = request.getRequestDispatcher("addressData.jsp"); dispatcher.forward(request, response); } }