001 // Copyright 2004, 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.request; 016 017 import java.util.ArrayList; 018 import java.util.Enumeration; 019 import java.util.List; 020 021 import javax.servlet.http.HttpServletRequest; 022 import javax.servlet.http.HttpServletResponse; 023 import javax.servlet.http.HttpSession; 024 025 /** 026 * This class encapsulates all the relevant data for one request cycle of an 027 * {@link ApplicationServlet}. This includes: 028 * <ul> 029 * <li>{@link HttpServletRequest} 030 * <li>{@link HttpServletResponse} 031 * <li>{@link HttpSession} 032 * </ul> 033 * <p> 034 * This is a limited and crippled version of the RequestContext as it was available in release 3.0, 035 * that exists as a bridge for compatibility only. This saves developers from having to modify their 036 * classes to have the {@link javax.servlet.http.HttpServletRequest} or (preferrably) 037 * {@link org.apache.tapestry.web.WebRequest} injected into their pages, components, or services. It 038 * will be removed in the next release of Tapestry. 039 * 040 * @author Howard Lewis Ship 041 * @deprecated To be removed in 4.1. Use injection to gain access to the necessary objects. 042 */ 043 044 public class RequestContext 045 { 046 private final HttpServletRequest _request; 047 048 private final HttpServletResponse _response; 049 050 public RequestContext(HttpServletRequest request, HttpServletResponse response) 051 { 052 _request = request; 053 _response = response; 054 } 055 056 /** 057 * Returns the named parameter from the {@link HttpServletRequest}. 058 * <p> 059 * Use {@link #getParameters(String)}for parameters that may include multiple values. 060 */ 061 062 public String getParameter(String name) 063 { 064 return _request.getParameter(name); 065 } 066 067 /** 068 * Convienience method for getting a {@link HttpServletRequest}attribute. 069 * 070 * @since 2.3 071 */ 072 073 public Object getAttribute(String name) 074 { 075 return _request.getAttribute(name); 076 } 077 078 /** 079 * For parameters that are, or are possibly, multi-valued, this method returns all the values as 080 * an array of Strings. 081 * 082 * @see #getParameter(String) 083 */ 084 085 public String[] getParameters(String name) 086 { 087 return _request.getParameterValues(name); 088 } 089 090 public String[] getParameterNames() 091 { 092 Enumeration e = _request.getParameterNames(); 093 List names = new ArrayList(); 094 095 while (e.hasMoreElements()) 096 names.add(e.nextElement()); 097 098 int count = names.size(); 099 100 String[] result = new String[count]; 101 102 return (String[]) names.toArray(result); 103 } 104 105 /** 106 * Returns the request which initiated the current request cycle. Note that the methods 107 * {@link #getParameter(String)}and {@link #getParameters(String)}should be used, rather than 108 * obtaining parameters directly from the request (since the RequestContext handles the 109 * differences between normal and multipart/form requests). 110 */ 111 112 public HttpServletRequest getRequest() 113 { 114 return _request; 115 } 116 117 public HttpServletResponse getResponse() 118 { 119 return _response; 120 } 121 122 /** 123 * Returns the {@link HttpSession}, if necessary, invoking 124 * {@link HttpServletRequest#getSession(boolean)}. However, this method will <em>not</em> 125 * create a session. 126 */ 127 128 public HttpSession getSession() 129 { 130 return _request.getSession(false); 131 } 132 133 /** 134 * Like {@link #getSession()}, but forces the creation of the {@link HttpSession}, if 135 * necessary. 136 */ 137 138 public HttpSession createSession() 139 { 140 return _request.getSession(true); 141 } 142 143 }