// Fig. 26.20: SurveyServlet.java // A Web-based survey that uses JDBC from a servlet. package com.deitel.jhtp6.servlets; import java.io.*; import java.text.*; import java.sql.*; import javax.sql.*; import javax.naming.*; import javax.servlet.*; import javax.servlet.http.*; public class SurveyServlet extends HttpServlet { private Connection connection; private Statement statement; // set up database connection and create SQL statement public void init( ServletConfig config ) throws ServletException { // attempt database connection and create Statement try { // System.setProperty( "db2j.system.home", // config.getInitParameter( "databaseLocation" ) ); // Class.forName( config.getInitParameter( "databaseDriver" ) ); // connection = DriverManager.getConnection( // config.getInitParameter( "databaseName" ) ); // create Statement to query database // statement = connection.createStatement(); // Obtain environment naming context InitialContext ic = new InitialContext(); // Look up our data source DataSource ds = ( DataSource ) ic.lookup( "java:comp/env/jdbc/survey" ); // Allocate and use a connection from the pool connection = ds.getConnection(); // create Statement to query database statement = connection.createStatement(); } // end try // for any exception throw an UnavailableException to // indicate that the servlet is not currently available catch ( Exception exception ) { exception.printStackTrace(); throw new UnavailableException( exception.getMessage() ); } } // end of init method // process survey response protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { // set up response to client response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); DecimalFormat twoDigits = new DecimalFormat( "0.00" ); // start XHTML document out.println( "" ); out.println( "" ); out.println( "" ); // head section of document out.println( "
" ); // read current survey response int value = Integer.parseInt( request.getParameter( "animal" ) ); String query; // attempt to process a vote and display current results try { // update total for current survey response query = "UPDATE surveyresults SET votes = votes + 1 " + "WHERE id = " + value; statement.executeUpdate( query ); // get total of all survey responses query = "SELECT sum( votes ) FROM surveyresults"; ResultSet totalRS = statement.executeQuery( query ); totalRS.next(); int total = totalRS.getInt( 1 ); // get results query = "SELECT surveyoption, votes, id FROM surveyresults " + "ORDER BY id"; ResultSet resultsRS = statement.executeQuery( query ); out.println( "Thank you for participating." );
out.println( "
Results:
" );
// process results
int votes;
while ( resultsRS.next() ) {
out.print( resultsRS.getString( 1 ) );
out.print( ": " );
votes = resultsRS.getInt( 2 );
out.print( twoDigits.format(
( double ) votes / total * 100 ) );
out.print( "% responses: " );
out.println( votes );
}
resultsRS.close();
out.print( "Total responses: " );
out.print( total );
// end XHTML document
out.println( "" );
out.close();
} // end try
// if database exception occurs, return error page
catch ( SQLException sqlException ) {
sqlException.printStackTrace();
out.println( "Database error occurred. " ); out.println( "Try again later.