// ========================================================================
// $Id: SessionDump.java,v 1.15 2005/08/13 00:01:28 gregwilkins Exp $
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.openqa.jetty.servlet;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.openqa.jetty.log.LogFactory;
import org.openqa.jetty.html.Page;
import org.openqa.jetty.html.TableForm;
import org.openqa.jetty.util.LogSupport;
/* ------------------------------------------------------------ */
/** Test Servlet Sessions.
*
* @version $Revision: 1.15 $
* @author Greg Wilkins (gregw)
*/
public class SessionDump extends HttpServlet
{
private static Log log = LogFactory.getLog(SessionDump.class);
int redirectCount=0;
/* ------------------------------------------------------------ */
String pageType;
/* ------------------------------------------------------------ */
public void init(ServletConfig config)
throws ServletException
{
super.init(config);
}
/* ------------------------------------------------------------ */
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession(false);
String action = request.getParameter("Action");
String name = request.getParameter("Name");
String value = request.getParameter("Value");
String age = request.getParameter("MaxAge");
String nextUrl = getURI(request)+"?R="+redirectCount++;
if (action.equals("New Session"))
{
session = request.getSession(true);
}
else
if (session!=null)
{
if (action.equals("Invalidate"))
session.invalidate();
else if (action.equals("Set"))
{
session.setAttribute(name,value);
try
{
int m = Integer.parseInt(age);
session.setMaxInactiveInterval(m);
}
catch(Exception e)
{
LogSupport.ignore(log,e);
}
}
else if (action.equals("Remove"))
session.removeAttribute(name);
}
String encodedUrl=response.encodeRedirectURL(nextUrl);
response.sendRedirect(encodedUrl);
}
/* ------------------------------------------------------------ */
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
Page page= new Page();
HttpSession session = request.getSession(getURI(request).indexOf("new")>0);
page.title("Session Dump Servlet: ");
TableForm tf = new TableForm(response.encodeURL(getURI(request)));
tf.method("POST");
if (session==null)
{
page.add("<H1>No Session</H1>");
tf.addButton("Action","New Session");
}
else
{
try
{
tf.addText("ID",session.getId());
tf.addText("State",session.isNew()?"NEW":"Valid");
tf.addText("Creation",
new Date(session.getCreationTime()).toString());
tf.addText("Last Access",
new Date(session.getLastAccessedTime()).toString());
tf.addText("Max Inactive",
""+session.getMaxInactiveInterval());
tf.addText("Context",""+session.getServletContext());
Enumeration keys=session.getAttributeNames();
while(keys.hasMoreElements())
{
String name=(String)keys.nextElement();
String value=session.getAttribute(name).toString();
tf.addText(name,value);
}
tf.addTextField("Name","Property Name",20,"name");
tf.addTextField("Value","Property Value",20,"value");
tf.addTextField("MaxAge","MaxAge(s)",5,"");
tf.addButtonArea();
tf.addButton("Action","Set");
tf.addButton("Action","Remove");
tf.addButton("Action","Invalidate");
page.add(tf);
tf=null;
if (request.isRequestedSessionIdFromCookie())
page.add("<P>Turn off cookies in your browser to try url encoding<BR>");
if (request.isRequestedSessionIdFromURL())
page.add("<P>Turn on cookies in your browser to try cookie encoding<BR>");
}
catch (IllegalStateException e)
{
log.debug(LogSupport.EXCEPTION,e);
page.add("<H1>INVALID Session</H1>");
tf=new TableForm(getURI(request));
tf.addButton("Action","New Session");
}
}
if (tf!=null)
page.add(tf);
Writer writer=response.getWriter();
page.write(writer);
writer.flush();
}
/* ------------------------------------------------------------ */
public String getServletInfo() {
return "Session Dump Servlet";
}
/* ------------------------------------------------------------ */
private String getURI(HttpServletRequest request)
{
String uri=(String)request.getAttribute("javax.servlet.forward.request_uri");
if (uri==null)
uri=request.getRequestURI();
return uri;
}
}