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

org.frameworkset.http.ServletServerHttpRequest 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

There is a newer version: 6.2.7
Show newest version
/*
 *  Copyright 2008-2010 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 com.frameworkset.util.StringUtil;
import org.frameworkset.util.Assert;
import org.frameworkset.util.annotations.HttpMethod;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.security.Principal;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 

Title: ServletServerHttpRequest.java

*

Description:

*

bboss workgroup

*

Copyright (c) 2008

* @Date 2010-11-21 * @author biaoping.yin * @version 1.0 */ public class ServletServerHttpRequest implements ServerHttpRequest { protected static final String FORM_CONTENT_TYPE = "application/x-www-form-urlencoded"; protected static final String FORM_CHARSET = "UTF-8"; private final HttpServletRequest servletRequest; private HttpHeaders headers; private ServerHttpAsyncRequestControl asyncRequestControl; /** * Construct a new instance of the ServletServerHttpRequest based on the given {@link HttpServletRequest}. * @param servletRequest the servlet request */ public ServletServerHttpRequest(HttpServletRequest servletRequest) { Assert.notNull(servletRequest, "HttpServletRequest must not be null"); this.servletRequest = servletRequest; } /** * Returns the {@code HttpServletRequest} this object is based on. */ public HttpServletRequest getServletRequest() { return this.servletRequest; } @Override public HttpMethod getMethod() { return HttpMethod.resolve(this.servletRequest.getMethod()); } @Override public URI getURI() { try { StringBuffer url = this.servletRequest.getRequestURL(); String query = this.servletRequest.getQueryString(); if (StringUtil.hasText(query)) { url.append('?').append(query); } return new URI(url.toString()); } catch (URISyntaxException ex) { throw new IllegalStateException("Could not get HttpServletRequest URI: " + ex.getMessage(), ex); } } @Override public HttpHeaders getHeaders() { if (this.headers == null) { this.headers = RequestHeaderUtil.getHeaders(this.servletRequest); } return this.headers; } @Override public Principal getPrincipal() { return this.servletRequest.getUserPrincipal(); } @Override public InetSocketAddress getLocalAddress() { return new InetSocketAddress(this.servletRequest.getLocalName(), this.servletRequest.getLocalPort()); } @Override public InetSocketAddress getRemoteAddress() { return new InetSocketAddress(this.servletRequest.getRemoteHost(), this.servletRequest.getRemotePort()); } @Override public InputStream getBody() throws IOException { if (isFormPost(this.servletRequest)) { return getBodyFromServletRequestParameters(this.servletRequest); } else { return this.servletRequest.getInputStream(); } } @Override public ServerHttpAsyncRequestControl getAsyncRequestControl(ServerHttpResponse response) { if (this.asyncRequestControl == null) { Assert.isInstanceOf(ServletServerHttpResponse.class, response); ServletServerHttpResponse servletServerResponse = (ServletServerHttpResponse) response; this.asyncRequestControl = new ServletServerHttpAsyncRequestControl(this, servletServerResponse); } return this.asyncRequestControl; } private static boolean isFormPost(HttpServletRequest request) { String contentType = request.getContentType(); return (contentType != null && contentType.contains(FORM_CONTENT_TYPE) && HttpMethod.POST.matches(request.getMethod())); } /** * Use {link javax.servlet.ServletRequest#getParameterMap()} to reconstruct the * body of a form 'POST' providing a predictable outcome as opposed to reading * from the body, which can fail if any other code has used the ServletRequest * to access a parameter, thus causing the input stream to be "consumed". */ private static InputStream getBodyFromServletRequestParameters(HttpServletRequest request) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); Writer writer = new OutputStreamWriter(bos, FORM_CHARSET); Map form = request.getParameterMap(); for (Iterator nameIterator = form.keySet().iterator(); nameIterator.hasNext();) { String name = nameIterator.next(); List values = Arrays.asList(form.get(name)); for (Iterator valueIterator = values.iterator(); valueIterator.hasNext();) { String value = valueIterator.next(); writer.write(URLEncoder.encode(name, FORM_CHARSET)); if (value != null) { writer.write('='); writer.write(URLEncoder.encode(value, FORM_CHARSET)); if (valueIterator.hasNext()) { writer.write('&'); } } } if (nameIterator.hasNext()) { writer.append('&'); } } writer.flush(); return new ByteArrayInputStream(bos.toByteArray()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy