import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; class SessionInfo { int pageCount; long startTime; } public class SessionPageCount2 extends HttpServlet { static final boolean debug = false; // Store session info (page count) by username in hashtable. Hashtable sessionTable = new Hashtable (); public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Set the content type of the response etc .. resp.setContentType ("text/html"); PrintWriter out = resp.getWriter (); out.println (" Visit Count"); // During debugging, it helps to print out the parameters in the response. if (debug) { printParams (out, req); } // Write out the action. // CHANGE TO YOUR PORT NUMBER: out.println ("
"); // out.println (""); // Get the page info from hidden fields: String whichPage = req.getParameter ("page"); String userName = req.getParameter ("username"); // First extract session info. SessionInfo session = (SessionInfo) sessionTable.get (userName); // Check if inactive session. if (session != null) { long minutesSince = (System.currentTimeMillis() - session.startTime) / (1000*60); if (minutesSince >= 1) { out.println ("Session timed out. Please login again."); out.println ("
"); out.flush (); return; } } else { // Make session. session = new SessionInfo (); session.pageCount = 0; session.startTime = System.currentTimeMillis (); } // Active session. Continue ... // Determine action based on which page fired the request. if (whichPage.equalsIgnoreCase ("loginpage")) { handleLoginPage (out, userName); } else if (whichPage.equalsIgnoreCase ("menupage")) { handleMenuPage (out, userName, req); } else if (whichPage.equalsIgnoreCase ("featurepage")) { // Back button on Time or Fortune page handleLoginPage (out, userName); } else { handleError (out); } // Page count. session.pageCount ++; // Put updated page count back in table, and write out to page: sessionTable.put (userName, session); out.println ("
You have made " + session.pageCount + " page requests"); // We don't really need this, but we'll use it for confirmation: out.println (""); // Last part. out.println (""); out.flush (); } public void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // We need to implement POST because the forms are written as such. doGet (req, resp); } void handleLoginPage (PrintWriter out, String userName) { out.println ("Hello " + userName + "! Choose from these options: "); // The two buttons. out.println (""); out.println (""); // Write out the extracted username: out.println (""); out.println (""); } void handleMenuPage (PrintWriter out, String userName, HttpServletRequest req) { // Check which button was pressed: String timeButtonPressed = req.getParameter ("Time"); out.println (userName + ", "); if (timeButtonPressed != null) { // Time event. Date d = new Date (); out.println ("the date/time is: " + d + "."); } else { // Fortune event. String fortune = ""; if ( (int)userName.charAt(0) % 2 == 0) { fortune = "go out, meet people. Tomorrow is going to be great for you."; } else { fortune = "stay at home. Tomorrow is going to be a lousy day for you."; } out.println (fortune); } // A "Back" button: out.println ("
"); // Need to write the hidden fields: out.println (""); out.println (""); } void handleError (PrintWriter out) { out.println ("Enter username: "); out.println (""); out.println (""); } // For debugging: void printParams (PrintWriter out, HttpServletRequest req) { out.println ("


Request parameters:


"); } }