Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License. You can obtain
  * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
  * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
  * Sun designates this particular file as subject to the "Classpath" exception
  * as provided by Sun in the GPL Version 2 section of the License file that
  * accompanied this code.  If applicable, add the following below the License
  * Header, with the fields enclosed by brackets [] replaced by your own
  * identifying information: "Portions Copyrighted [year]
  * [name of copyright owner]"
  *
  * Contributor(s):
  *
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  *
  *
  * This file incorporates work covered by the following copyright and
  * permission notice:
  *
  * Copyright 2004 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
  
 
 
 
 package org.apache.coyote;
 
 
 
This is a low-level, efficient representation of a server request. Most fields are GC-free, expensive operations are delayed until the user code needs the information. Processing is delegated to modules, using a hook mechanism. This class is not intended for user code - it is used internally by tomcat for processing the request in the most efficient way. Users ( servlets ) can access the information using a facade, which provides the high-level view of the request. For lazy evaluation, the request uses the getInfo() hook. The following ids are defined:
  • req.encoding - returns the request encoding
  • req.attribute - returns a module-specific attribute ( like SSL keys, etc ).
Tomcat defines a number of attributes:
  • "org.apache.tomcat.request" - allows access to the low-level request object in trusted applications

Author(s):
James Duncan Davidson [duncan@eng.sun.com]
James Todd [gonzo@eng.sun.com]
Jason Hunter [jch@eng.sun.com]
Harish Prabandham
Alex Cruikshank [alex@epitonic.com]
Hans Bergsten [hans@gefionsoftware.com]
Costin Manolache
Remy Maucherat
public final class Request {
    // ----------------------------------------------------------- Constructors
    public Request() {
        .setQuery();
        .setHeaders();
        .setString("http");
        .setString("GET");
        /* SJSWS 6376484
        uriMB.setString("/");
        */
        .setString("");
        .setString("HTTP/1.0");
    }
    // ----------------------------------------------------- Instance Variables
    private int serverPort = -1;
    private MessageBytes serverNameMB = new MessageBytes();
    private String localHost;
    
    private int remotePort;
    private int localPort;
    private MessageBytes schemeMB = new MessageBytes();
    private MessageBytes methodMB = new MessageBytes();
    private MessageBytes unparsedURIMB = new MessageBytes();
    private MessageBytes uriMB = new MessageBytes();
    private MessageBytes decodedUriMB = new MessageBytes();
    private MessageBytes queryMB = new MessageBytes();
    private MessageBytes protoMB = new MessageBytes();
    // remote address/host
    private MessageBytes remoteAddrMB = new MessageBytes();
    private MessageBytes localNameMB = new MessageBytes();
    private MessageBytes remoteHostMB = new MessageBytes();
    private MessageBytes localAddrMB = new MessageBytes();
     
    private MimeHeaders headers = new MimeHeaders();
    private MessageBytes instanceId = new MessageBytes();

    
Notes.
    private NotesManagerImpl notesManager = new NotesManagerImpl();


    
Associated input buffer.
    private InputBuffer inputBuffer = null;


    
URL decoder.
    private UDecoder urlDecoder = new UDecoder();


    
HTTP specific fields. (remove them ?)
    private long contentLength = -1;
    private MessageBytes contentTypeMB = null;
    private String charEncoding = null;
    private boolean charEncodingParsed = false;
    private Cookies cookies = new Cookies();
    private Parameters parameters = new Parameters();
    private MessageBytes remoteUser=new MessageBytes();
    private MessageBytes authType=new MessageBytes();
    private HashMap attributes=new HashMap();
    private Response response;
    private ActionHook hook;
    private int bytesRead=0;
    // Time of the request - usefull to avoid repeated calls to System.currentTime
    private long startTime = 0L;
    private RequestInfo reqProcessorMX=new RequestInfo(this);
    // ------------------------------------------------------------- Properties


    
Get the instance id (or JVM route). Curently Ajp is sending it with each request. In future this should be fixed, and sent only once ( or 'negociated' at config time so both tomcat and apache share the same name.

Returns:
the instance id
    public MessageBytes instanceId() {
        return ;
    }
    public MimeHeaders getMimeHeaders() {
        return ;
    }
    public UDecoder getURLDecoder() {
        return ;
    }
    // -------------------- Request data --------------------
    public MessageBytes scheme() {
        return ;
    }
    
    public MessageBytes method() {
        return ;
    }
    
    public MessageBytes unparsedURI() {
        return ;
    }
    public MessageBytes requestURI() {
        return ;
    }
    public MessageBytes decodedURI() {
        return ;
    }
    public MessageBytes query() {
        return ;
    }
    public MessageBytes queryString() {
        return ;
    }
    public MessageBytes protocol() {
        return ;
    }
    
    
Return the buffer holding the server name, if any. Use isNull() to check if there is no value set. This is the "virtual host", derived from the Host: header.
    public MessageBytes serverName() {
	return ;
    }
    public int getServerPort() {
        return ;
    }
    
    public void setServerPort(int serverPort ) {
	this.=serverPort;
    }
    public MessageBytes remoteAddr() {
	return ;
    }
    public MessageBytes remoteHost() {
	return ;
    }
    public MessageBytes localName() {
	return ;
    }    
    public MessageBytes localAddr() {
	return ;
    }
    
    public String getLocalHost() {
	return ;
    }
    public void setLocalHost(String host) {
	this. = host;
    }    
    
    public int getRemotePort(){
        return ;
    }
        
    public void setRemotePort(int port){
        this. = port;
    }
    
    public int getLocalPort(){
        return ;
    }
        
    public void setLocalPort(int port){
        this. = port;
    }
    // -------------------- encoding/type --------------------


    
Get the character encoding used for this request.
    public String getCharacterEncoding() {
        if ( != null || ) {
            return ;
        }
         = ContentType.getCharsetFromContentType(getContentType());
         = true;
        return ;
    }
    public void setCharacterEncoding(String enc) {
	this. = enc;
    }
    public void setContentLength(int len) {
	this. = len;
    }
    public int getContentLength() {
        long length = getContentLengthLong();
        
        if (length < .) {
            return (intlength;
        }
        return -1;
    }
    
    public long getContentLengthLong() {
        if > -1 ) return ;
        MessageBytes clB = .getUniqueValue("content-length");
         = (clB == null || clB.isNull()) ? -1 : clB.getLong();
        return ;
    }
    public String getContentType() {
        contentType();
        if (( == null) || .isNull()) 
            return null;
        return .toString();
    }
    public void setContentType(String type) {
        .setString(type);
    }
    public MessageBytes contentType() {
        if ( == null)
             = .getValue("content-type");
        return ;
    }
    public void setContentType(MessageBytes mb) {
        =mb;
    }
    public String getHeader(String name) {
        return .getHeader(name);
    }
    // -------------------- Associated response --------------------
    public Response getResponse() {
        return ;
    }
    public void setResponseResponse response ) {
        this.=response;
        response.setRequestthis );
    }
    
    public void action(ActionCode actionCodeObject param) {
        if==null && !=null )
            =.getHook();
        
        if ( != null) {
            ifparam==null ) 
                .action(actionCodethis);
            else
                .action(actionCodeparam);
        }
    }
    // -------------------- Cookies --------------------
    public Cookies getCookies() {
	return ;
    }
    // -------------------- Parameters --------------------
    public Parameters getParameters() {
	return ;
    }
    // -------------------- Other attributes --------------------
    // We can use notes for most - need to discuss what is of general interest
    
    public void setAttributeString nameObject o ) {
        .putnameo );
    }
    public HashMap getAttributes() {
        return ;
    }
    public Object getAttribute(String name ) {
        return .get(name);
    }
    
    public MessageBytes getRemoteUser() {
        return ;
    }
    public MessageBytes getAuthType() {
        return ;
    }
    // -------------------- Input Buffer --------------------
    public InputBuffer getInputBuffer() {
        return ;
    }
    public void setInputBuffer(InputBuffer inputBuffer) {
        this. = inputBuffer;
    }


    
Read data from the input buffer and put it into a byte chunk. The buffer is owned by the protocol implementation - it will be reused on the next read. The Adapter must either process the data in place or copy it to a separate buffer if it needs to hold it. In most cases this is done during byte->char conversions or via InputStream. Unlike InputStream, this interface allows the app to process data in place, without copy.
    public int doRead(ByteChunk chunk
        throws IOException {
        int n = .doRead(chunkthis);
        if (n > 0) {
            +=n;
        }
        return n;
    }
    // -------------------- debug --------------------
    public String toString() {
	return "R( " + requestURI().toString() + ")";
    }
    public long getStartTime() {
        return ;
    }
    public void setStartTime(long startTime) {
        this. = startTime;
    }
    // -------------------- Per-Request "notes" --------------------
    public final void setNote(int posObject value) {
    }
    public final Object getNote(int pos) {
	return .getNote(pos);
    }
    
    public NotesManagerImpl getNotesManager() {
        return ;
    }
    
    public void setNotesManager(NotesManagerImpl notesManager) {
        this. = notesManager;
    }   
    
    // -------------------- Recycling -------------------- 
    public void recycle() {
        =0;
         = null;
         = null;
         = false;
        .recycle();
        .recycle();
        =-1;
         = -1;
         = -1;
        .recycle();
        .recycle();
        .recycle(); 
        .recycle();
	//remoteAddrMB.recycle();
	//remoteHostMB.recycle();
	// XXX Do we need such defaults ?
        .recycle();
        /* SJSWS 6376484
        uriMB.setString("/");
        */
        .setString("");
        .setString("HTTP/1.0");
        //remoteAddrMB.setString("127.0.0.1");
        //remoteHostMB.setString("localhost");
        .recycle();
        .recycle();
        .recycle();
        .clear();
    }
    // -------------------- Info  --------------------
    public void updateCounters() {
    }
    public RequestInfo getRequestProcessor() {
        return ;
    }
    public int getBytesRead() {
        return ;
    }
    public void setBytesRead(int bytesRead) {
        this. = bytesRead;
    }
New to GrepCode? Check out our FAQ X