javax.servlet.ServletRequestWrapper Maven / Gradle / Ivy
/*
* Copyright (c) 1998-2018 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Scott Ferguson
*/
package javax.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
/**
* Wraps a servlet request in another request. Filters may
* use ServletRequestWrapper to modify the headers passed to the servlet.
*
* The default methods just call the wrapped request methods.
*
* @since servlet 2.3
*/
public class ServletRequestWrapper implements ServletRequest {
// the wrapped request
private ServletRequest _request;
/**
* Create a new ServletRequestWrapper wrapping the enclosed request.
*/
public ServletRequestWrapper(ServletRequest request)
{
if (request == null)
throw new IllegalArgumentException();
_request = request;
}
/**
* Sets the request object being wrapped.
*
* @exception IllegalArgumentException if the request is null
*/
public void setRequest(ServletRequest request)
{
if (request == null)
throw new IllegalArgumentException();
_request = request;
}
/**
* Gets the request object being wrapped.
*
* @return the wrapped response
*/
public ServletRequest getRequest()
{
return _request;
}
/**
* Returns the prococol, e.g. "HTTP/1.1"
*/
public String getProtocol()
{
return _request.getProtocol();
}
/**
* Returns the request scheme, e.g. "http"
*/
public String getScheme()
{
return _request.getScheme();
}
/**
* Returns the server name handling the request. When using virtual hosts,
* this returns the virtual host name, e.g. "vhost1.caucho.com".
*/
public String getServerName()
{
return _request.getServerName();
}
/**
* Returns the server port handling the request, e.g. 80.
*/
public int getServerPort()
{
return _request.getServerPort();
}
/**
* Returns the IP address of the remote host, i.e. the client browser.
*/
public String getRemoteAddr()
{
return _request.getRemoteAddr();
}
/**
* Returns the DNS hostname of the remote host, i.e. the client browser.
*/
public String getRemoteHost()
{
return _request.getRemoteHost();
}
/**
* Returns the remote port
*
* @since 2.4
*/
public int getRemotePort()
{
return _request.getRemotePort();
}
/**
* Returns the IP address of the local host, i.e. the server.
*/
public String getLocalAddr()
{
return _request.getLocalAddr();
}
/**
* Returns the local host name.
*/
public String getLocalName()
{
return _request.getLocalName();
}
/**
* Returns the local port
*/
public int getLocalPort()
{
return _request.getLocalPort();
}
/**
* Returns a form parameter. When the form contains several parameters
* of the same name, getParameter
returns the first.
*
* For example, calling getParameter("a")
with the
* the query string a=1&a=2
will return "1".
*
* @param name the form parameter to return
* @return the form value or null if none matches.
*/
public String getParameter(String name)
{
return _request.getParameter(name);
}
/**
* Returns the parameter map request parameters. By default, returns
* the underlying request's map.
*/
public Map getParameterMap()
{
return _request.getParameterMap();
}
/**
* Returns all values of a form parameter.
*
* For example, calling getParameterValues("a")
* with the the query string a=1&a=2
will
* return ["1", "2"].
*
* @param name the form parameter to return
* @return an array of matching form values or null if none matches.
*/
public String []getParameterValues(String name)
{
return _request.getParameterValues(name);
}
/**
* Returns an enumeration of all form parameter names.
*
*
* Enumeration e = _request.getParameterNames();
* while (e.hasMoreElements()) {
* String name = (String) e.nextElement();
* out.println(name + ": " + request.getParameter(name));
* }
*
*/
public Enumeration getParameterNames()
{
return _request.getParameterNames();
}
/**
* Returns an InputStream to retrieve POST data from the request.
* The stream will automatically end when the end of the POST data
* is complete.
*/
public ServletInputStream getInputStream()
throws IOException
{
return _request.getInputStream();
}
/**
* Returns a reader to read POSTed data. Character encoding is
* based on the request data and is the same as
* getCharacterEncoding()
*/
public BufferedReader getReader()
throws IOException, IllegalStateException
{
return _request.getReader();
}
/**
* Returns the character encoding of the POSTed data.
*/
public String getCharacterEncoding()
{
return _request.getCharacterEncoding();
}
/**
* Sets the character encoding to be used for forms and getReader.
*/
public void setCharacterEncoding(String encoding)
throws UnsupportedEncodingException
{
_request.setCharacterEncoding(encoding);
}
/**
* Returns the content length of the data. This value may differ from
* the actual length of the data. For newer browsers, i.e.
* those supporting HTTP/1.1, can support "chunked" encoding which does
* not make the content length available.
*
* The upshot is, rely on the input stream to end when the data
* completes.
*/
public int getContentLength()
{
return _request.getContentLength();
}
/**
* Returns the request's mime-type.
*/
public String getContentType()
{
return _request.getContentType();
}
/**
* Returns the request's preferred locale.
*/
public Locale getLocale()
{
return _request.getLocale();
}
/**
* Returns an enumeration of all locales acceptable by the client.
*/
public Enumeration getLocales()
{
return _request.getLocales();
}
/**
* Returns true if the connection is secure, e.g. it uses SSL.
*/
public boolean isSecure()
{
return _request.isSecure();
}
/**
* Returns an attribute value.
*
* @param name the attribute name
* @return the attribute value
*/
public Object getAttribute(String name)
{
return _request.getAttribute(name);
}
/**
* Sets an attribute value.
*
* @param name the attribute name
* @param o the attribute value
*/
public void setAttribute(String name, Object o)
{
_request.setAttribute(name, o);
}
/**
* Enumerates all attribute names in the request.
*/
public Enumeration getAttributeNames()
{
return _request.getAttributeNames();
}
/**
* Removes the given attribute.
*
* @param name the attribute name
*/
public void removeAttribute(String name)
{
_request.removeAttribute(name);
}
/**
* Returns a request dispatcher for later inclusion or forwarding. This
* is the servlet API equivalent to SSI includes. uri
* is relative to the request URI. Absolute URIs are relative to
* the application prefix (getContextPath()
).
*
* If getRequestURI()
is /myapp/dir/test.jsp and the
* uri
is "inc.jsp", the resulting page is
* /myapp/dir/inc.jsp.
*
* RequestDispatcher disp;
* disp = getRequestDispatcher("inc.jsp?a=b");
* disp.include(request, response);
*
*
* @param uri path relative to getRequestURI()
* (including query string) for the included file.
* @return RequestDispatcher for later inclusion or forwarding.
*/
public RequestDispatcher getRequestDispatcher(String uri)
{
return _request.getRequestDispatcher(uri);
}
/**
* Returns the real path.
*/
@SuppressWarnings("deprecation")
public String getRealPath(String uri)
{
return _request.getRealPath(uri);
}
//
// Servlet 3.0
//
/**
* Returns the servlet context for the request
*
* @since Servlet 3.0
*/
public ServletContext getServletContext()
{
return _request.getServletContext();
}
/**
* Returns the async context for the request
*
* @since Servlet 3.0
*/
@Override
public AsyncContext getAsyncContext()
{
return _request.getAsyncContext();
}
/**
* Returns true if the request is in async.
*
* @since Servlet 3.0
*/
@Override
public boolean isAsyncStarted()
{
return _request.isAsyncStarted();
}
/**
* Returns true if the request supports async
*
* @since Servlet 3.0
*/
@Override
public boolean isAsyncSupported()
{
return _request.isAsyncSupported();
}
/**
* Starts an async mode
*
* @since Servlet 3.0
*/
@Override
public AsyncContext startAsync()
throws IllegalStateException
{
return _request.startAsync();
}
/**
* Starts an async mode
*
* @since Servlet 3.0
*/
@Override
public AsyncContext startAsync(ServletRequest servletRequest,
ServletResponse servletResponse)
throws IllegalStateException
{
return _request.startAsync(servletRequest, servletResponse);
}
/**
* Returns the dispatcherType (request, include, etc) for the current
* request.
*/
@Override
public DispatcherType getDispatcherType()
{
return _request.getDispatcherType();
}
/**
* @since Servlet 3.0
*/
public boolean isWrapperFor(ServletRequest wrapped)
{
if (_request == wrapped)
return true;
else if (_request instanceof ServletRequestWrapper)
return ((ServletRequestWrapper) _request).isWrapperFor(wrapped);
else
return false;
}
/**
* @since Servlet 3.0
*/
public boolean isWrapperFor(Class wrappedType)
{
if (!ServletRequest.class.isAssignableFrom(wrappedType))
throw new IllegalArgumentException(
"expected instance of javax.servlet.ServletRequest at `"
+ wrappedType
+ "'");
else if (wrappedType.isAssignableFrom(_request.getClass()))
return true;
else if (_request instanceof ServletRequestWrapper)
return ((ServletRequestWrapper) _request).isWrapperFor(wrappedType);
else
return false;
}
}