All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.frameworkset.http.ServletServerHttpResponse Maven / Gradle / Ivy

Go to download

bboss is a j2ee framework include aop/ioc,mvc,persistent,taglib,rpc,event ,bean-xml serializable and so on.http://www.bbossgroups.com

The newest version!
/*
 *  Copyright 2008 biaoping.yin
 *
 *  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.frameworkset.http;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.frameworkset.util.Assert;
import org.frameworkset.util.ClassUtils;
import org.frameworkset.util.CollectionUtils;

/**
 * 

Title: ServletServerHttpResponse.java

*

Description:

*

bboss workgroup

*

Copyright (c) 2008

* @Date 2010-11-22 * @author biaoping.yin * @version 1.0 */ public class ServletServerHttpResponse implements ServerHttpResponse { /** Checking for Servlet 3.0+ HttpServletResponse.getHeader(String) */ private static final boolean servlet3Present = ClassUtils.hasMethod(HttpServletResponse.class, "getHeader", String.class); private final HttpServletResponse servletResponse; private final HttpHeaders headers; private boolean headersWritten = false; private boolean bodyUsed = false; /** * Construct a new instance of the ServletServerHttpResponse based on the given {@link HttpServletResponse}. * @param servletResponse the servlet response */ public ServletServerHttpResponse(HttpServletResponse servletResponse) { Assert.notNull(servletResponse, "HttpServletResponse must not be null"); this.servletResponse = servletResponse; this.headers = (servlet3Present ? new ServletResponseHttpHeaders() : new HttpHeaders()); } @Override public void setStatusCode(HttpStatus status) { this.servletResponse.setStatus(status.value()); } @Override public HttpHeaders getHeaders() { return (this.headersWritten ? HttpHeaders.readOnlyHttpHeaders(this.headers) : this.headers); } @Override public OutputStream getBody() throws IOException { this.bodyUsed = true; writeHeaders(); return this.servletResponse.getOutputStream(); } @Override public void flush() throws IOException { writeHeaders(); if (this.bodyUsed) { this.servletResponse.flushBuffer(); } } @Override public void close() { writeHeaders(); } private void writeHeaders() { if (!this.headersWritten) { for (Map.Entry> entry : this.headers.entrySet()) { String headerName = entry.getKey(); for (String headerValue : entry.getValue()) { this.servletResponse.addHeader(headerName, headerValue); } } // HttpServletResponse exposes some headers as properties: we should include those if not already present if (this.servletResponse.getContentType() == null && this.headers.getContentType() != null) { this.servletResponse.setContentType(this.headers.getContentType().toString()); } if (this.servletResponse.getCharacterEncoding() == null && this.headers.getContentType() != null && this.headers.getContentType().getCharSet() != null) { this.servletResponse.setCharacterEncoding(this.headers.getContentType().getCharSet().name()); } this.headersWritten = true; } } /** * Extends HttpHeaders with the ability to look up headers already present in * the underlying HttpServletResponse. * *

The intent is merely to expose what is available through the HttpServletResponse * i.e. the ability to look up specific header values by name. All other * map-related operations (e.g. iteration, removal, etc) apply only to values * added directly through HttpHeaders methods. * * @since 4.0.3 */ private class ServletResponseHttpHeaders extends HttpHeaders { private static final long serialVersionUID = 3410708522401046302L; @Override public boolean containsKey(Object key) { return (super.containsKey(key) || (get(key) != null)); } @Override public String getFirst(String headerName) { String value = servletResponse.getHeader(headerName); if (value != null) { return value; } else { return super.getFirst(headerName); } } @Override public List get(Object key) { Assert.isInstanceOf(String.class, key, "Key must be a String-based header name"); Collection values1 = servletResponse.getHeaders((String) key); boolean isEmpty1 = CollectionUtils.isEmpty(values1); List values2 = super.get(key); boolean isEmpty2 = CollectionUtils.isEmpty(values2); if (isEmpty1 && isEmpty2) { return null; } List values = new ArrayList(); if (!isEmpty1) { values.addAll(values1); } if (!isEmpty2) { values.addAll(values2); } return values; } } public HttpServletResponse getResponse() { // TODO Auto-generated method stub return this.servletResponse; } /** * Return the {@code HttpServletResponse} this object is based on. */ public HttpServletResponse getServletResponse() { return this.servletResponse; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy