package edu.pdx.cs410J.servlets; import javax.servlet.http.*; import javax.servlet.ServletException; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.Enumeration; /** * A servlet that uses a session to maintain information about a user */ public class SessionServlet extends HttpServlet { private static final String VISIT_COUNT = "VISIT_COUNT"; /** * Generates HTML that summarizes the session */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); if (session == null) { session = request.getSession(true); session.setAttribute(VISIT_COUNT, 0); } int visits = (Integer) session.getAttribute(VISIT_COUNT); visits++; session.setAttribute(VISIT_COUNT, visits); response.setContentType("text/html"); PrintWriter out = response.getWriter(); dumpHeader(out); out.println("<h1>You have visited this page " + visits + " times</h1>"); dumpSession(session, out); dumpCoookies(request.getCookies(), out); out.println("<h2>End the session</h2>"); out.println("<form action='session' method='post'>"); out.println("<input type='submit' value='End Session'/>"); out.println("</form>"); dumpFooter(out); } private void dumpFooter(PrintWriter out) { out.println("</body>"); out.println("</html>"); } private void dumpHeader(PrintWriter out) { out.println("<html>"); out.println("<head><title>Session Demo</title></head>"); out.println("<body>"); } /** * Ends the session */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } response.setContentType("text/html"); PrintWriter out = response.getWriter(); dumpHeader(out); out.println("<h1>Your session has ended</h1>"); dumpCoookies(request.getCookies(), out); out.println("<h2>Return to Session</h2>"); out.println("<form action='session' method='get'>"); out.println("<input type='submit' value='Go Back'/>"); out.println("</form>"); dumpFooter(out); } private void dumpCoookies(Cookie[] cookies, PrintWriter out) { out.println("<h2>Your cookies:</h2>"); for (Cookie cookie : cookies) { dumpKeyValue("Name", cookie.getName(), out); dumpKeyValue("Domain", cookie.getDomain(), out); dumpKeyValue("Path", cookie.getPath(), out); dumpKeyValue("Value", cookie.getValue(), out); dumpKeyValue("Comment", cookie.getComment(), out); dumpKeyValue("Version", cookie.getVersion(), out); dumpKeyValue("Max Age", cookie.getMaxAge(), out); dumpKeyValue("Secure", cookie.getSecure(), out); } } private void dumpSession(HttpSession session, PrintWriter out) { out.println("<h2>Your session:</h2>"); dumpKeyValue("Id", session.getId(), out); dumpKeyValue("Creation Time" , new Date(session.getCreationTime()), out); dumpKeyValue("Last Accessed Time", new Date(session.getLastAccessedTime()), out); dumpKeyValue("Max inactive interval", session.getMaxInactiveInterval(), out); for (Enumeration e = session.getAttributeNames(); e.hasMoreElements(); ) { String name = (String) e.nextElement(); dumpKeyValue("Attribute \"" + name + "\"", session.getAttribute(name), out); } } private void dumpKeyValue(String name, Object value, PrintWriter out) { out.println("<p><b>" + name + "</b>: " + value + "</p>"); } }