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.RequestDispatcher;
27  import javax.servlet.ServletConfig;
28  import javax.servlet.ServletException;
29  import javax.servlet.http.HttpServlet;
30  import javax.servlet.http.HttpServletRequest;
31  import javax.servlet.http.HttpServletResponse;
32  import javax.servlet.http.HttpSession;
33  
34  /** 
35   * Test Servlet Sessions.
36   */
37  @SuppressWarnings("serial")
38  public class SessionDump extends HttpServlet
39  {
40      /** 
41        * Simple object attribute to test serialization
42        */
43      public class ObjectAttributeValue implements java.io.Serializable
44      {
45          long l;
46          
47          public ObjectAttributeValue(long l)
48          {
49              this.l = l;
50          }
51  
52          public long getValue()
53          {
54              return l;
55          }
56      }
57  
58      int redirectCount=0;
59      /* ------------------------------------------------------------ */
60      String pageType;
61  
62      /* ------------------------------------------------------------ */
63      @Override
64      public void init(ServletConfig config)
65           throws ServletException
66      {
67          super.init(config);
68      }
69  
70      /* ------------------------------------------------------------ */
71      protected void handleForm(HttpServletRequest request,
72                            HttpServletResponse response)
73      {
74          HttpSession session = request.getSession(false);
75          String action = request.getParameter("Action");
76          String name =  request.getParameter("Name");
77          String value =  request.getParameter("Value");
78  
79          if (action!=null)
80          {
81              if(action.equals("New Session"))
82              {
83                  session = request.getSession(true);
84                  session.setAttribute("test","value");
85                  session.setAttribute("obj", new ObjectAttributeValue(System.currentTimeMillis()));
86              }
87              else if (session!=null)
88              {
89                  if (action.equals("Invalidate"))
90                      session.invalidate();
91                  else if (action.equals("Set") && name!=null && name.length()>0)
92                      session.setAttribute(name,value);
93                  else if (action.equals("Remove"))
94                      session.removeAttribute(name);
95              }
96          }
97      }
98  
99      /* ------------------------------------------------------------ */
100     @Override
101     public void doPost(HttpServletRequest request,
102                        HttpServletResponse response)
103         throws ServletException, IOException
104     {
105         handleForm(request,response);
106         String nextUrl = getURI(request)+"?R="+redirectCount++;
107         String encodedUrl=response.encodeRedirectURL(nextUrl);
108         response.sendRedirect(encodedUrl);
109     }
110 
111     /* ------------------------------------------------------------ */
112     @Override
113     public void doGet(HttpServletRequest request,
114                       HttpServletResponse response)
115         throws ServletException, IOException
116     {
117         handleForm(request,response);
118 
119         response.setContentType("text/html");
120 
121         HttpSession session = request.getSession(getURI(request).indexOf("new")>0);
122         try
123         {
124             if (session!=null)
125                 session.isNew();
126         }
127         catch(IllegalStateException e)
128         {
129             session=null;
130         }
131 
132         PrintWriter out = response.getWriter();
133         out.println("<h1>Session Dump Servlet:</h1>");
134         out.println("<form action=\""+response.encodeURL(getURI(request))+"\" method=\"post\">");
135 
136         if (session==null)
137         {
138             out.println("<H3>No Session</H3>");
139             out.println("<input type=\"submit\" name=\"Action\" value=\"New Session\"/>");
140         }
141         else
142         {
143             try
144             {
145                 out.println("<b>ID:</b> "+session.getId()+"<br/>");
146                 out.println("<b>New:</b> "+session.isNew()+"<br/>");
147                 out.println("<b>Created:</b> "+new Date(session.getCreationTime())+"<br/>");
148                 out.println("<b>Last:</b> "+new Date(session.getLastAccessedTime())+"<br/>");
149                 out.println("<b>Max Inactive:</b> "+session.getMaxInactiveInterval()+"<br/>");
150                 out.println("<b>Context:</b> "+session.getServletContext()+"<br/>");
151 
152 
153                 Enumeration<String> keys=session.getAttributeNames();
154                 while(keys.hasMoreElements())
155                 {
156                     String name=(String)keys.nextElement();
157                     String value=""+session.getAttribute(name);
158 
159                     out.println("<b>"+name+":</b> "+value+"<br/>");
160                 }
161 
162                 out.println("<b>Name:</b><input type=\"text\" name=\"Name\" /><br/>");
163                 out.println("<b>Value:</b><input type=\"text\" name=\"Value\" /><br/>");
164 
165                 out.println("<input type=\"submit\" name=\"Action\" value=\"Set\"/>");
166                 out.println("<input type=\"submit\" name=\"Action\" value=\"Remove\"/>");
167                 out.println("<input type=\"submit\" name=\"Action\" value=\"Refresh\"/>");
168                 out.println("<input type=\"submit\" name=\"Action\" value=\"Invalidate\"/><br/>");
169 
170                 out.println("</form><br/>");
171 
172                 if (request.isRequestedSessionIdFromCookie())
173                     out.println("<P>Turn off cookies in your browser to try url encoding<BR>");
174 
175                 if (request.isRequestedSessionIdFromURL())
176                     out.println("<P>Turn on cookies in your browser to try cookie encoding<BR>");
177                 out.println("<a href=\""+response.encodeURL(request.getRequestURI()+"?q=0")+"\">Encoded Link</a><BR>");
178 
179             }
180             catch (IllegalStateException e)
181             {
182                 e.printStackTrace();
183             }
184         }
185 
186     }
187 
188     /* ------------------------------------------------------------ */
189     @Override
190     public String getServletInfo() {
191         return "Session Dump Servlet";
192     }
193 
194     /* ------------------------------------------------------------ */
195     private String getURI(HttpServletRequest request)
196     {
197         String uri=(String)request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
198         if (uri==null)
199             uri=request.getRequestURI();
200         return uri;
201     }
202 
203 }