/* * Copyright (c) 2001, Xiaoping Jia. * All Rights Reserved. */ package db; import java.io.*; import java.util.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; /** * A servlet that counts the votes for the Best Pictures of the 2001 Acadamy Awards, and * for the favorate pictures. * This version uses JDBC 2.0 features, which requres a JDBC 2.0 compliant driver. * Another version of the program, db.Oscar, uses only JDBC 1.0 features. * * The votes are stored in a database, which is created by a separate application * OscarDB. The database must be created before the Oscar2 servlet is started * for the first time. * * @version 1.1 2001/04/29 * @since 1.0 * @author Xiaoping Jia * @see db.OscarDB * @see db.Oscar */ public class Oscar2 extends HttpServlet { public void init() { ServletContext ctx = getServletContext(); DBConnector.setDBPropertiesFileName(ctx.getRealPath("WEB-INF/classes/db.properties")); DBConnector db = DBConnector.getInstance(); try { db.startup(OscarDB.dbName); conn = db.getConnection(); // set the attributes needed to use JDBC 2.0 result set update features stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { } catch (SQLException e) { conn = null; stmt = null; } } public void destroy() { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) {} DBConnector db = DBConnector.getInstance(); db.shutdown(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String oscar = request.getParameter("oscar"); String title1 = request.getParameter("first"); String title2 = request.getParameter("second"); String title3 = request.getParameter("third"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(" Oscar: Best Picture"); out.println(""); out.println("

Your vote among the nominated pictures

"); if (oscar != null) { if ("Brockovich".equals(oscar)) { out.println("Erin Brockovich"); } else if ("Dragon".equals(oscar)) { out.println("Crouching Tiger, Hidden Dragon"); } else { out.println(oscar); } } else { out.println("None."); } out.println("

Top 3 picks of your favorate pictures of the year

"); out.println(""); out.println(""); out.println(""); out.println(""); out.println("
First:" + title1 + "
Second:" + title2 + "
Third:" + title3 + "
"); out.println("
"); out.println("

Voting results

"); if (conn != null && stmt != null) { try { synchronized (stmt) { String queryString; out.println("

Best picture

"); out.println(""); queryString = "SELECT * FROM " + OscarDB.bestPictureTableName; ResultSet rset = stmt.executeQuery(queryString); while (rset.next()) { String id = rset.getString("id"); String title = rset.getString("title"); int count = rset.getInt("count1"); if (oscar != null && oscar.equals(id)) { // JDBC 2.0 feature rset.updateInt("count", ++count); rset.updateRow(); } out.println(""); } rset.close(); out.println("
" + title + "" + count + "
"); String id1 = normalize(title1); String id2 = normalize(title2); String id3 = normalize(title3); if (id1 != null) { queryString = "SELECT * FROM " + OscarDB.favoratePictureTableName + " WHERE id = '" + id1 + "'"; rset = stmt.executeQuery(queryString); if (rset.next()) { // JDBC 2.0 feature int count1 = rset.getInt("count1st"); rset.updateInt("count1st", ++count1); rset.updateRow(); } else { // JDBC 2.0 feature rset.moveToInsertRow(); rset.updateString("id", id1); rset.updateString("title", title1); rset.updateInt("count1st", 1); rset.updateInt("count2nd", 0); rset.updateInt("count3rd", 0); rset.insertRow(); } rset.close(); } if (id2 != null) { queryString = "SELECT * FROM " + OscarDB.favoratePictureTableName + " WHERE id = '" + id2 + "'"; rset = stmt.executeQuery(queryString); if (rset.next()) { // JDBC 2.0 feature int count2 = rset.getInt("count2st"); rset.updateInt("count2st", ++count2); rset.updateRow(); } else { // JDBC 2.0 feature rset.moveToInsertRow(); rset.updateString("id", id2); rset.updateString("title", title2); rset.updateInt("count1st", 0); rset.updateInt("count2nd", 1); rset.updateInt("count3rd", 0); rset.insertRow(); } rset.close(); } if (id3 != null) { queryString = "SELECT * FROM " + OscarDB.favoratePictureTableName + " WHERE id = '" + id3 + "'"; rset = stmt.executeQuery(queryString); if (rset.next()) { // JDBC 2.0 feature int count3 = rset.getInt("count3rd"); rset.updateInt("count3rd", ++count3); rset.updateRow(); } else { // JDBC 2.0 feature rset.moveToInsertRow(); rset.updateString("id", id3); rset.updateString("title", title3); rset.updateInt("count1st", 0); rset.updateInt("count2nd", 0); rset.updateInt("count3rd", 1); rset.insertRow(); } rset.close(); } out.println("

Favorite pictures

"); out.println(""); out.println(""); queryString = "SELECT * FROM " + OscarDB.favoratePictureTableName + " ORDER BY count1st, count2nd, count3rd"; rset = stmt.executeQuery(queryString); while (rset.next()) { String id = rset.getString("id"); String title = rset.getString("title"); int count1 = rset.getInt("count1st"); int count2 = rset.getInt("count2nd"); int count3 = rset.getInt("count3rd"); out.println(""); } rset.close(); out.println("
Title>FirstSecondThird
" + title + "" + count1 + "" + "" + count2 + "" + "" + count3 + "
"); } } catch (SQLException se) { se.printStackTrace(); } } out.println(""); out.println(""); } protected Connection conn; protected Statement stmt; protected Set stopWords; // initialization block { stopWords = new HashSet(); stopWords.add("a"); stopWords.add("an"); stopWords.add("and"); stopWords.add("for"); stopWords.add("of"); stopWords.add("the"); stopWords.add("with"); } protected String normalize(String title) { if (title != null) { StringTokenizer st = new StringTokenizer(title); StringBuffer sb = new StringBuffer(); boolean first = true; while (st.hasMoreTokens()) { String word = st.nextToken(); word = word.trim().toLowerCase(); if (!stopWords.contains(word)) { if (!first) { sb.append(' '); } else { first = false; } sb.append(word); } } return sb.toString(); } return null; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }