View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package com.acme;
20  
21  import java.io.IOException;
22  import java.io.PrintWriter;
23  import java.util.Date;
24  import java.util.Enumeration;
25  
26  import javax.servlet.ServletConfig;
27  import javax.servlet.ServletException;
28  import javax.servlet.http.HttpServlet;
29  import javax.servlet.http.HttpServletRequest;
30  import javax.servlet.http.HttpServletResponse;
31  import javax.servlet.http.HttpSession;
32  
33  /** 
34   * Test Servlet Sessions.
35   */
36  @SuppressWarnings("serial")
37  public class SessionDump extends HttpServlet
38  {
39      /** 
40        * Simple object attribute to test serialization
41        */
42      public class ObjectAttributeValue implements java.io.Serializable
43      {
44          long l;
45          
46          public ObjectAttributeValue(long l)
47          {
48              this.l = l;
49          }
50  
51          public long getValue()
52          {
53              return l;
54          }
55      }
56  
57      int redirectCount=0;
58      /* ------------------------------------------------------------ */
59      String pageType;
60  
61      /* ------------------------------------------------------------ */
62      @Override
63      public void init(ServletConfig config)
64           throws ServletException
65      {
66          super.init(config);
67      }
68  
69      /* ------------------------------------------------------------ */
70      protected void handleForm(HttpServletRequest request,
71                            HttpServletResponse response)
72      {
73          HttpSession session = request.getSession(false);
74          String action = request.getParameter("Action");
75          String name =  request.getParameter("Name");
76          String value =  request.getParameter("Value");
77  
78          if (action!=null)
79          {
80              if(action.equals("New Session"))
81              {
82                  session = request.getSession(true);
83                  session.setAttribute("test","value");
84                  session.setAttribute("obj", new ObjectAttributeValue(System.currentTimeMillis()));
85              }
86              else if (session!=null)
87              {
88                  if (action.equals("Invalidate"))
89                      session.invalidate();
90                  else if (action.equals("Set") && name!=null && name.length()>0)
91                      session.setAttribute(name,value);
92                  else if (action.equals("Remove"))
93                      session.removeAttribute(name);
94              }
95          }
96      }
97  
98      /* ------------------------------------------------------------ */
99      @Override
100     public void doPost(HttpServletRequest request,
101                        HttpServletResponse response)
102         throws ServletException, IOException
103     {
104         handleForm(request,response);
105         String nextUrl = getURI(request)+"?R="+redirectCount++;
106         String encodedUrl=response.encodeRedirectURL(nextUrl);
107         response.sendRedirect(encodedUrl);
108     }
109 
110     /* ------------------------------------------------------------ */
111     @Override
112     public void doGet(HttpServletRequest request,
113                       HttpServletResponse response)
114         throws ServletException, IOException
115     {
116         handleForm(request,response);
117 
118         response.setContentType("text/html");
119 
120         HttpSession session = request.getSession(getURI(request).indexOf("new")>0);
121         try
122         {
123             if (session!=null)
124                 session.isNew();
125         }
126         catch(IllegalStateException e)
127         {
128             session=null;
129         }
130 
131         PrintWriter out = response.getWriter();
132         out.println("<h1>Session Dump Servlet:</h1>");
133         out.println("<form action=\""+response.encodeURL(getURI(request))+"\" method=\"post\">");
134 
135         if (session==null)
136         {
137             out.println("<H3>No Session</H3>");
138             out.println("<input type=\"submit\" name=\"Action\" value=\"New Session\"/>");
139         }
140         else
141         {
142             try
143             {
144                 out.println("<b>ID:</b> "+session.getId()+"<br/>");
145                 out.println("<b>New:</b> "+session.isNew()+"<br/>");
146                 out.println("<b>Created:</b> "+new Date(session.getCreationTime())+"<br/>");
147                 out.println("<b>Last:</b> "+new Date(session.getLastAccessedTime())+"<br/>");
148                 out.println("<b>Max Inactive:</b> "+session.getMaxInactiveInterval()+"<br/>");
149                 out.println("<b>Context:</b> "+session.getServletContext()+"<br/>");
150 
151 
152                 Enumeration<String> keys=session.getAttributeNames();
153                 while(keys.hasMoreElements())
154                 {
155                     String name=(String)keys.nextElement();
156                     String value=""+session.getAttribute(name);
157 
158                     out.println("<b>"+name+":</b> "+value+"<br/>");
159                 }
160 
161                 out.println("<b>Name:</b><input type=\"text\" name=\"Name\" /><br/>");
162                 out.println("<b>Value:</b><input type=\"text\" name=\"Value\" /><br/>");
163 
164                 out.println("<input type=\"submit\" name=\"Action\" value=\"Set\"/>");
165                 out.println("<input type=\"submit\" name=\"Action\" value=\"Remove\"/>");
166                 out.println("<input type=\"submit\" name=\"Action\" value=\"Refresh\"/>");
167                 out.println("<input type=\"submit\" name=\"Action\" value=\"Invalidate\"/><br/>");
168 
169                 out.println("</form><br/>");
170 
171                 if (request.isRequestedSessionIdFromCookie())
172                     out.println("<P>Turn off cookies in your browser to try url encoding<BR>");
173 
174                 if (request.isRequestedSessionIdFromURL())
175                     out.println("<P>Turn on cookies in your browser to try cookie encoding<BR>");
176                 out.println("<a href=\""+response.encodeURL(request.getRequestURI()+"?q=0")+"\">Encoded Link</a><BR>");
177 
178             }
179             catch (IllegalStateException e)
180             {
181                 e.printStackTrace();
182             }
183         }
184 
185     }
186 
187     /* ------------------------------------------------------------ */
188     @Override
189     public String getServletInfo() {
190         return "Session Dump Servlet";
191     }
192 
193     /* ------------------------------------------------------------ */
194     private String getURI(HttpServletRequest request)
195     {
196         String uri=(String)request.getAttribute("javax.servlet.forward.request_uri");
197         if (uri==null)
198             uri=request.getRequestURI();
199         return uri;
200     }
201 
202 }