Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2010 Oracle and/or its affiliates. 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_1_1.html
  * or packager/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 packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [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;
 
 
Response object.

Author(s):
James Duncan Davidson [duncan@eng.sun.com]
Jason Hunter [jch@eng.sun.com]
James Todd [gonzo@eng.sun.com]
Harish Prabandham
Hans Bergsten <hans@gefionsoftware.com>
Remy Maucherat
 
 public final class Response {
 
 
     // ----------------------------------------------------------- Constructors
 
 
     public Response() {
     }
 
 
     // ----------------------------------------------------- Class Variables
 
    
Default locale as mandated by the spec.
 
     private static Locale DEFAULT_LOCALE = Locale.getDefault();
 
 
     // ----------------------------------------------------- Instance Variables
 
    
Status code.
 
    protected int status = 200;


    
Status message.
    protected String message = null;


    
Response headers.
    protected MimeHeaders headers = new MimeHeaders();


    
Associated output buffer.
    protected OutputBuffer outputBuffer;


    
Notes.
    private NotesManagerImpl notesManager = new NotesManagerImpl();


    
Committed flag.
    protected boolean commited = false;


    
Action hook.
    public ActionHook hook;


    
HTTP specific fields.
    protected String contentType = null;
    protected String contentLanguage = null;
    // START SJSAS 6316254
    // END SJSAS 6316254
    protected int contentLength = -1;
    private Locale locale = ;
    // General informations
    private long bytesWritten=0;

    
Holds request error exception.
    protected Exception errorException = null;

    
Has the charset been explicitly set.
    protected boolean charsetSet = false;

    
Request error URI.
    protected String errorURI = null;
    protected Request req;
    // ------------------------------------------------------------- Properties
    public Request getRequest() {
        return ;
    }
    public void setRequestRequest req ) {
        this.=req;
    }
    public OutputBuffer getOutputBuffer() {
        return ;
    }
    public void setOutputBuffer(OutputBuffer outputBuffer) {
        this. = outputBuffer;
    }
    public MimeHeaders getMimeHeaders() {
        return ;
    }
    public ActionHook getHook() {
        return ;
    }
    public void setHook(ActionHook hook) {
        this. = hook;
    }
    // -------------------- Per-Response "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;
    }
    
    
    // -------------------- Actions --------------------
    public void action(ActionCode actionCodeObject param) {
        if ( != null) {
            ifparam==null ) 
                .action(actionCodethis);
            else
                .action(actionCodeparam);
        }
    }
    // -------------------- State --------------------
    public int getStatus() {
        return ;
    }

    
    
Set the response status
 
    public void setStatusint status ) {
        this. = status;
    }


    
Get the status message.
    public String getMessage() {
        return ;
    }


    
Set the status message.
    public void setMessage(String message) {
        this. = message;
    }
    public boolean isCommitted() {
        return ;
    }
    public void setCommitted(boolean v) {
        this. = v;
    }
    // -----------------Error State --------------------


    
Set the error Exception that occurred during request processing.
    public void setErrorException(Exception ex) {
     = ex;
    }


    
Get the Exception that occurred during request processing.
    public Exception getErrorException() {
        return ;
    }
    public boolean isExceptionPresent() {
        return (  != null );
    }


    
Set request URI that caused an error during request processing.
    public void setErrorURI(String uri) {
         = uri;
    }


    
Get the request URI that caused the original error.
    public String getErrorURI() {
        return ;
    }
    // -------------------- Methods --------------------
    
    
    public void reset() 
        throws IllegalStateException {
        
        // Reset the headers only if this is the main request,
        // not for included
         = null;;
         = ;
         = null;
        // START SJSAS 6316254
        // END SJSAS 6316254
         = -1;
         = false;
         = 200;
         = null;
        .clear();
        
        // Force the PrintWriter to flush its data to the output
        // stream before resetting the output stream
        //
        // Reset the stream
        if () {
            //String msg = sm.getString("servletOutputStreamImpl.reset.ise"); 
            throw new IllegalStateException();
        }
        
        action(.this);
    }
    public void finish() throws IOException {
        action(.this);
    }
    public void acknowledge() throws IOException {
        action(.this);
    }
    // -------------------- Headers --------------------
    public boolean containsHeader(String name) {
        return .getHeader(name) != null;
    }
    public void setHeader(String nameString value) {
        char cc=name.charAt(0);
        ifcc=='C' || cc=='c' ) {
            ifcheckSpecialHeader(namevalue) )
            return;
        }
        .setValue(name).setStringvalue);
    }
    public void addHeader(String nameString value) {
        char cc=name.charAt(0);
        ifcc=='C' || cc=='c' ) {
            ifcheckSpecialHeader(namevalue) )
            return;
        }
        .addValue(name).setStringvalue );
    }

    
    
Set internal fields for special header names. Called from set/addHeader. Return true if the header is special, no need to set the header.
    private boolean checkSpecialHeaderString nameString value) {
        // XXX Eliminate redundant fields !!!
        // ( both header and in special fields )
        ifname.equalsIgnoreCase"Content-Type" ) ) {
            setContentTypevalue );
            return true;
        }
        ifname.equalsIgnoreCase"Content-Length" ) ) {
            try {
                int cL=Integer.parseIntvalue );
                setContentLengthcL );
                return true;
            } catchNumberFormatException ex ) {
                // Do nothing - the spec doesn't have any "throws" 
                // and the user might know what he's doing
                return false;
            }
        }
        ifname.equalsIgnoreCase"Content-Language" ) ) {
            // XXX XXX Need to construct Locale or something else
        }
        return false;
    }


    
Signal that we're done with the headers, and body will follow. Any implementation needs to notify ContextManager, to allow interceptors to fix headers.
    public void sendHeaders() throws IOException {
        action(.this);
         = true;
    }
    // -------------------- I18N --------------------
    public Locale getLocale() {
        return ;
    }

    
Called explicitely by user to set the Content-Language and the default encoding
    public void setLocale(Locale locale) {
        if (locale == null) {
            return;  // throw an exception?
        }
        // Save the locale for use by getLocale()
        this. = locale;
        // Set the contentLanguage for header output
         = locale.getLanguage();
        if (( != null) && (.length() > 0)) {
            String country = locale.getCountry();
            StringBuffer value = new StringBuffer();
            if ((country != null) && (country.length() > 0)) {
                value.append('-');
                value.append(country);
            }
             = value.toString();
        }
    }

    
Return the content language.
    public String getContentLanguage() {
        return ;
    }
    /*
     * Overrides the name of the character encoding used in the body
     * of the response. This method must be called prior to writing output
     * using getWriter().
     *
     * @param charset String containing the name of the chararacter encoding.
     */
    public void setCharacterEncoding(String charset) {
        if (isCommitted())
            return;
        if (charset == null)
            return;
         = charset;
        // START SJSAS 6316254
         = charset;
        // END SJSAS 6316254
        =true;
    }
    public String getCharacterEncoding() {
        return ;
    }

    
Sets the content type. This method must preserve any response charset that may already have been set via a call to response.setContentType(), response.setLocale(), or response.setCharacterEncoding().

Parameters:
type the content type
    public void setContentType(String type) {
        int semicolonIndex = -1;
        if (type == null) {
            this. = null;
            return;
        }
        /*
         * Remove the charset param (if any) from the Content-Type, and use it
         * to set the response encoding.
         * The most recent response encoding setting will be appended to the
         * response's Content-Type (as its charset param) by getContentType();
         */
        boolean hasCharset = false;
        int len = type.length();
        int index = type.indexOf(';');
        while (index != -1) {
            semicolonIndex = index;
            index++;
            while (index < len && Character.isSpace(type.charAt(index))) {
                index++;
            }
            if (index+8 < len
                    && type.charAt(index) == 'c'
                    && type.charAt(index+1) == 'h'
                    && type.charAt(index+2) == 'a'
                    && type.charAt(index+3) == 'r'
                    && type.charAt(index+4) == 's'
                    && type.charAt(index+5) == 'e'
                    && type.charAt(index+6) == 't'
                    && type.charAt(index+7) == '=') {
                hasCharset = true;
                break;
            }
            index = type.indexOf(';'index);
        }
        if (!hasCharset) {
            this. = type;
            return;
        }
        this. = type.substring(0, semicolonIndex);
        String tail = type.substring(index+8);
        int nextParam = tail.indexOf(';');
        String charsetValue = null;
        if (nextParam != -1) {
            this. += tail.substring(nextParam);
            charsetValue = tail.substring(0, nextParam);
        } else {
            charsetValue = tail;
        }
        // The charset value may be quoted, but must not contain any quotes.
        if (charsetValue != null && charsetValue.length() > 0) {
            =true;
            // START SJSAS 6316254
            this. = charsetValue;
            // END SJSAS 6316254
            this. = charsetValue.replace('"'' ').trim();
        }
    }
    public String getContentType() {
        String ret = ;
        if (ret != null 
                /* SJSAS 6316254
                && characterEncoding != null
                */
                // START SJSAS 6316254
                &&  != null
                // END SJSAS 6316254
                && ) {
            /* SJSAS 6316254
            ret = ret + ";charset=" + characterEncoding;   
            */
            // START SJSAS 6316254
            ret = ret + ";charset=" + ;
            // END SJSAS 6316254
        }
        return ret;
    }
    
    public void setContentLength(int contentLength) {
        this. = contentLength;
    }
    public int getContentLength() {
        return ;
    }
 
    public long getContentLengthLong() {
        return ;
    }

    
Write a chunk of bytes.
    public void doWrite(ByteChunk chunk/*byte buffer[], int pos, int count*/)
        throws IOException
    {
        .doWrite(chunkthis);
        +=chunk.getLength();
    }
    // --------------------
    
    public void recycle() {
        
         = null;
         = null;
         = ;
        // START SJSAS 6316254
        // END SJSAS 6316254
         = false;
         = -1;
         = 200;
         = null;
         = false;
         = null;
         = null;
        .clear();
        // update counters
        =0;
    }
    public long getBytesWritten() {
        return ;
    }
    public void setBytesWritten(long bytesWritten) {
        this. = bytesWritten;
    }
    // START GlassFish 896
    
Removes any Set-Cookie response headers whose value contains the string JSESSIONID
    public void removeSessionCookies() {
        .removeHeader("Set-Cookie".);
    }
    // END GlassFish 896
New to GrepCode? Check out our FAQ X