/*
 * @(#)SessionServlet.java	1.21 97/05/22
 * 
 * Copyright (c) 1996, 2004, Oracle. All rights reserved.  
 * 
 * This software is the confidential and proprietary information of Sun
 * Microsystems, Inc. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Sun.
 * 
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 * THIS SOFTWARE OR ITS DERIVATIVES.
 * 
 * CopyrightVersion 1.0
 */

import java.io.*;
import java.util.Enumeration;

import javax.servlet.*;
import javax.servlet.http.*;


/**
 * This is a simple example of an HTTP Servlet that uses the HttpSession
 * class
 * <p/>
 * Note that in order to gaurentee that session response headers are
 * set correctly, the session must be retrieved before any output is
 * sent to the client.
 */
public class SessionServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        //Get the session object
        HttpSession session = req.getSession(true);

        // set content type and other response header fields first
        res.setContentType("text/html");

        // then write the data of the response
        PrintWriter out = res.getWriter();

        out.println("<HEAD><TITLE> " + "SessionServlet Output " +
                    "</TITLE></HEAD><BODY>");
        out.println("<h1> SessionServlet Output </h1>");

        Integer ival = (Integer) session.getAttribute("sessiontest.counter");
        if (ival == null) {
            ival = new Integer(1);
        } else {
            ival = new Integer(ival.intValue() + 1);
        }
        session.setAttribute("sessiontest.counter", ival);
        out.println("You have hit this page <b>" + ival + "</b> times.<p>");
        out.println("Click <a href=" + res.encodeURL(req.getRequestURL().toString()) +
                    ">here</a>");
        out.println(" to ensure that session tracking is working even " +
                    "if cookies aren't supported.<br>");
        out.println("Note that by default URL rewriting is not enabled" +
                    "due to it's expensive overhead");
        out.println("<p>");

        out.println("<h3>Request and Session Data:</h3>");
        out.println("Session ID in Request: " +
                    req.getRequestedSessionId());
        out.println("<br>Session ID in Request from Cookie: " +
                    req.isRequestedSessionIdFromCookie());
        out.println("<br>Session ID in Request from URL: " +
                    req.isRequestedSessionIdFromURL());
        out.println("<br>Valid Session ID: " +
                    req.isRequestedSessionIdValid());
        out.println("<h3>Session Data:</h3>");
        out.println("New Session: " + session.isNew());
        out.println("<br>Session ID: " + session.getId());
        out.println("<br>Creation Time: " + session.getCreationTime());
        out.println("<br>Last Accessed Time: " +
                    session.getLastAccessedTime());
        out.println("<h3>Servlet Context Data:</h3>");
        ServletContext context = session.getServletContext();

        for (Enumeration e = context.getAttributeNames(); e.hasMoreElements();) {
            out.println("Context Attribute: " +
                        (String) e.nextElement() + "<br>");
        }

        out.println("</BODY>");
        out.close();
    }


    public String getServletInfo() {
        return "A simple servlet";
    }
}
