001 /** 002 * 003 * Copyright 2003-2004 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 // 019 // This source code implements specifications defined by the Java 020 // Community Process. In order to remain compliant with the specification 021 // DO NOT add / change / or delete method signatures! 022 // 023 024 package javax.servlet.http; 025 026 import java.util.Enumeration; 027 import javax.servlet.ServletRequest; 028 029 /** 030 * Extends the {@link javax.servlet.ServletRequest} interface 031 * to provide request information for HTTP servlets. 032 * 033 * <p>The servlet container creates an <code>HttpServletRequest</code> 034 * object and passes it as an argument to the servlet's service 035 * methods (<code>doGet</code>, <code>doPost</code>, etc). 036 * 037 * @version $Rev: 46019 $ $Date: 2004-09-14 02:56:06 -0700 (Tue, 14 Sep 2004) $ 038 */ 039 public interface HttpServletRequest extends ServletRequest { 040 041 /** 042 * String identifier for Basic authentication. Value "BASIC" 043 */ 044 public static final String BASIC_AUTH = "BASIC"; 045 046 /** 047 * String identifier for Form authentication. Value "FORM" 048 */ 049 public static final String FORM_AUTH = "FORM"; 050 051 /** 052 * String identifier for Client Certificate authentication. Value "CLIENT_CERT" 053 */ 054 public static final String CLIENT_CERT_AUTH = "CLIENT_CERT"; 055 056 /** 057 * String identifier for Digest authentication. Value "DIGEST" 058 */ 059 public static final String DIGEST_AUTH = "DIGEST"; 060 061 /** 062 * Returns the name of the authentication scheme used to protect 063 * the servlet. All servlet containers support basic, form and client 064 * certificate authentication, and may additionally support digest 065 * authentication. 066 * If the servlet is not authenticated <code>null</code> is returned. 067 * 068 * <p>Same as the value of the CGI variable AUTH_TYPE. 069 * 070 * @return one of the static members BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, 071 * DIGEST_AUTH (suitable for == comparison) or the container-specific string 072 * indicating the authentication scheme, or <code>null</code> if the request 073 * was not authenticated. 074 */ 075 public String getAuthType(); 076 077 /** 078 * Returns an array containing all of the <code>Cookie</code> 079 * objects the client sent with this request. 080 * This method returns <code>null</code> if no cookies were sent. 081 * 082 * @return an array of all the <code>Cookies</code> 083 * included with this request, or <code>null</code> 084 * if the request has no cookies 085 */ 086 public Cookie[] getCookies(); 087 088 /** 089 * Returns the value of the specified request header 090 * as a <code>long</code> value that represents a 091 * <code>Date</code> object. Use this method with 092 * headers that contain dates, such as 093 * <code>If-Modified-Since</code>. 094 * 095 * <p>The date is returned as 096 * the number of milliseconds since January 1, 1970 GMT. 097 * The header name is case insensitive. 098 * 099 * <p>If the request did not have a header of the 100 * specified name, this method returns -1. If the header 101 * can't be converted to a date, the method throws 102 * an <code>IllegalArgumentException</code>. 103 * 104 * @param name a <code>String</code> specifying the 105 * name of the header 106 * 107 * @return a <code>long</code> value representing the 108 * date specified in the header expressed as the number 109 * of milliseconds since January 1, 1970 GMT, or -1 if 110 * the named header was not included with the reqest 111 * 112 * @exception IllegalArgumentException If the header value 113 * can't be converted to a date 114 */ 115 public long getDateHeader(String name); 116 117 /** 118 * Returns the value of the specified request header 119 * as a <code>String</code>. If the request did not include a header 120 * of the specified name, this method returns <code>null</code>. 121 * If there are multiple headers with the same name, this method 122 * returns the first head in the request. 123 * The header name is case insensitive. You can use 124 * this method with any request header. 125 * 126 * @param name a <code>String</code> specifying the header name 127 * 128 * @return a <code>String</code> containing the value of the 129 * requested header, or <code>null</code> if the request does not 130 * have a header of that name 131 */ 132 public String getHeader(String name); 133 134 /** 135 * Returns all the values of the specified request header 136 * as an <code>Enumeration</code> of <code>String</code> objects. 137 * 138 * <p>Some headers, such as <code>Accept-Language</code> can be sent 139 * by clients as several headers each with a different value rather than 140 * sending the header as a comma separated list. 141 * 142 * <p>If the request did not include any headers 143 * of the specified name, this method returns an empty 144 * <code>Enumeration</code>. 145 * The header name is case insensitive. You can use 146 * this method with any request header. 147 * 148 * @param name a <code>String</code> specifying the 149 * header name 150 * 151 * @return an <code>Enumeration</code> containing the values of the 152 * requested header. If the request does not have any headers of 153 * that name return an empty enumeration. If the container does not 154 * allow access to header information, return null 155 */ 156 public Enumeration getHeaders(String name); 157 158 /** 159 * Returns an enumeration of all the header names this request 160 * contains. If the request has no headers, this method returns an 161 * empty enumeration. 162 * 163 * <p>Some servlet containers do not allow servlets to access headers 164 * using this method, in which case this method returns <code>null</code> 165 * 166 * @return an enumeration of all the header names sent with this 167 * request; if the request has no headers, an empty enumeration; 168 * if the servlet container does not allow servlets to use this method, 169 * <code>null</code> 170 */ 171 public Enumeration getHeaderNames(); 172 173 /** 174 * Returns the value of the specified request header 175 * as an <code>int</code>. If the request does not have a header 176 * of the specified name, this method returns -1. If the 177 * header cannot be converted to an integer, this method 178 * throws a <code>NumberFormatException</code>. 179 * 180 * <p>The header name is case insensitive. 181 * 182 * @param name a <code>String</code> specifying the name 183 * of a request header 184 * 185 * @return an integer expressing the value of the request header or -1 186 * if the request doesn't have a header of this name 187 * 188 * @exception NumberFormatException If the header value can't be 189 * converted to an <code>int</code> 190 */ 191 public int getIntHeader(String name); 192 193 /** 194 * Returns the name of the HTTP method with which this request was made, 195 * for example, GET, POST, or PUT. Same as the value of the CGI variable 196 * REQUEST_METHOD. 197 * 198 * @return a <code>String</code> specifying the name of the method with 199 * which this request was made 200 */ 201 public String getMethod(); 202 203 /** 204 * Returns any extra path information associated with the URL the client 205 * sent when it made this request. The extra path information follows the 206 * servlet path but precedes the query string and will start with a "/" 207 * character. 208 * 209 * <p>This method returns <code>null</code> if there was no extra path 210 * information. 211 * 212 * <p>Same as the value of the CGI variable PATH_INFO. 213 * 214 * @return a <code>String</code>, decoded by the web container, specifying 215 * extra path information that comes after the servlet path but before the 216 * query string in the request URL; or <code>null</code> if the URL does 217 * not have any extra path information 218 */ 219 public String getPathInfo(); 220 221 /** 222 * Returns any extra path information after the servlet name but before 223 * the query string, and translates it to a real path. Same as the value 224 * of the CGI variable PATH_TRANSLATED. 225 * 226 * <p>If the URL does not have any extra path information, this method 227 * returns <code>null</code> or the servlet container cannot translate the 228 * virtual path to a real path for any reason (such as when the web 229 * application is executed from an archive). 230 * 231 * The web container does not decode this string. 232 * 233 * @return a <code>String</code> specifying the real path, or 234 * <code>null</code> if the URL does not have any extra path information 235 */ 236 public String getPathTranslated(); 237 238 /** 239 * Returns the portion of the request URI that indicates the context 240 * of the request. The context path always comes first in a request 241 * URI. The path starts with a "/" character but does not end with a "/" 242 * character. For servlets in the default (root) context, this method 243 * returns "". The container does not decode this string. 244 * 245 * @return a <code>String</code> specifying the portion of the request 246 * URI that indicates the context of the request 247 */ 248 public String getContextPath(); 249 250 /** 251 * Returns the query string that is contained in the request URL after 252 * the path. This method returns <code>null</code> if the URL does not 253 * have a query string. Same as the value of the CGI variable QUERY_STRING. 254 * 255 * @return a <code>String</code> containing the query string or 256 * <code>null</code> if the URL contains no query string. The value is not 257 * decoded by the container. 258 */ 259 public String getQueryString(); 260 261 /** 262 * Returns the login of the user making this request, if the user has been 263 * authenticated, or <code>null</code> if the user has not been 264 * authenticated. Whether the user name is sent with each subsequent 265 * request depends on the browser and type of authentication. Same as the 266 * value of the CGI variable REMOTE_USER. 267 * 268 * @return a <code>String</code> specifying the login of the user making 269 * this request, or <code>null</code> if the user login is not known 270 */ 271 public String getRemoteUser(); 272 273 /** 274 * Returns a boolean indicating whether the authenticated user is included 275 * in the specified logical "role". Roles and role membership can be 276 * defined using deployment descriptors. If the user has not been 277 * authenticated, the method returns <code>false</code>. 278 * 279 * @param role a <code>String</code> specifying the name of the role 280 * 281 * @return a <code>boolean</code> indicating whether the user 282 * making this request belongs to a given role; <code>false</code> 283 * if the user has not been authenticated 284 */ 285 public boolean isUserInRole(String role); 286 287 /** 288 * Returns a <code>java.security.Principal</code> object containing 289 * the name of the current authenticated user. If the user has not been 290 * authenticated, the method returns <code>null</code>. 291 * 292 * @return a <code>java.security.Principal</code> containing the name 293 * of the user making this request; <code>null</code> if the user has 294 * not been authenticated 295 */ 296 public java.security.Principal getUserPrincipal(); 297 298 /** 299 * Returns the session ID specified by the client. This may not be the 300 * same as the ID of the current valid session for this request. 301 * If the client did not specify a session ID, this method returns 302 * <code>null</code>. 303 * 304 * @return a <code>String</code> specifying the session ID, or 305 * <code>null</code> if the request did not specify a session ID 306 * 307 * @see #isRequestedSessionIdValid 308 */ 309 public String getRequestedSessionId(); 310 311 /** 312 * Returns the part of this request's URL from the protocol 313 * name up to the query string in the first line of the HTTP request. 314 * The web container does not decode this String. 315 * For example: 316 * 317 * <table summary="Examples of Returned Values"> 318 * <tr align=left><th>First line of HTTP request </th> 319 * <th> Returned Value</th> 320 * <tr><td>POST /some/path.html HTTP/1.1<td><td>/some/path.html 321 * <tr><td>GET http://foo.bar/a.html HTTP/1.0 322 * <td><td>/a.html 323 * <tr><td>HEAD /xyz?a=b HTTP/1.1<td><td>/xyz 324 * </table> 325 * 326 * <p>To reconstruct an URL with a scheme and host, use 327 * {@link HttpUtils#getRequestURL}. 328 * 329 * @return a <code>String</code> containing the part of the URL 330 * from the protocol name up to the query string 331 * 332 * @see HttpUtils#getRequestURL 333 */ 334 public String getRequestURI(); 335 336 /** 337 * Reconstructs the URL the client used to make the request. The returned 338 * URL contains a protocol, server name, port number, and server path, but 339 * it does not include query string parameters. 340 * 341 * <p>Because this method returns a <code>StringBuffer</code>, not a string, 342 * you can modify the URL easily, for example, to append query parameters. 343 * 344 * <p>This method is useful for creating redirect messages and for reporting 345 * errors. 346 * 347 * @return a <code>StringBuffer</code> object containing the reconstructed URL 348 */ 349 public StringBuffer getRequestURL(); 350 351 /** 352 * Returns the part of this request's URL that calls the servlet. This 353 * path starts with a "/" character and includes either the servlet name 354 * or a path to the servlet, but does not include any extra path 355 * information or a query string. Same as the value of the CGI variable 356 * SCRIPT_NAME. 357 * 358 * <p>This method will return an empty string ("") if the servlet used to 359 * process this request was matched using the "/*" pattern. 360 * 361 * @return a <code>String</code> containing the name or path of the servlet 362 * being called, as specified in the request URL, decoded, or an empty 363 * string if the servlet used to process the request is matched using the 364 * "/*" pattern. 365 */ 366 public String getServletPath(); 367 368 /** 369 * Returns the current <code>HttpSession</code> associated with this 370 * request or, if there is no current session and <code>create</code> is 371 * true, returns a new session. 372 * 373 * <p>If <code>create</code> is <code>false</code> and the request has no 374 * valid <code>HttpSession</code>, this method returns <code>null</code>. 375 * 376 * <p>To make sure the session is properly maintained, you must call this 377 * method before the response is committed. If the container is using cookies 378 * to maintain session integrity and is asked to create a new session 379 * when the response is committed, an IllegalStateException is thrown. 380 * 381 * @param create <code>true</code> to create a new session for this request 382 * if necessary; <code>false</code> to return <code>null</code> if there's 383 * no current session 384 * 385 * @return the <code>HttpSession</code> associated with this request or 386 * <code>null</code> if <code>create</code> is <code>false</code> and the 387 * request has no valid session 388 * 389 * @see #getSession() 390 */ 391 public HttpSession getSession(boolean create); 392 393 /** 394 * Returns the current session associated with this request, or if the 395 * request does not have a session, creates one. 396 * 397 * @return the <code>HttpSession</code> associated with this request 398 * 399 * @see #getSession(boolean) 400 */ 401 public HttpSession getSession(); 402 403 /** 404 * Checks whether the requested session ID is still valid. 405 * 406 * @return <code>true</code> if this request has an id for a valid session 407 * in the current session context; <code>false</code> otherwise 408 * 409 * @see #getRequestedSessionId 410 * @see #getSession 411 * @see HttpSessionContext 412 */ 413 public boolean isRequestedSessionIdValid(); 414 415 /** 416 * Checks whether the requested session ID came in as a cookie. 417 * 418 * @return <code>true</code> if the session ID came in as a cookie; 419 * otherwise, <code>false</code> 420 * 421 * @see #getSession 422 */ 423 public boolean isRequestedSessionIdFromCookie(); 424 425 /** 426 * Checks whether the requested session ID came in as part of the request 427 * URL. 428 * 429 * @return <code>true</code> if the session ID came in as part of a URL; 430 * otherwise, <code>false</code> 431 * 432 * @see #getSession 433 */ 434 public boolean isRequestedSessionIdFromURL(); 435 436 /** 437 * @deprecated As of Version 2.1 of the Java Servlet API, use 438 * {@link #isRequestedSessionIdFromURL} instead. 439 */ 440 public boolean isRequestedSessionIdFromUrl(); 441 }