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

com.blade.web.http.wrapper.ServletRequest Maven / Gradle / Ivy

There is a newer version: 1.7.2-beta
Show newest version
/**
 * Copyright (c) 2015, biezhi 王爵 ([email protected])
 *
 * 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 com.blade.web.http.wrapper;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.blade.Blade;
import com.blade.route.Route;
import com.blade.web.http.HttpException;
import com.blade.web.http.HttpMethod;
import com.blade.web.http.Path;
import com.blade.web.http.Request;
import com.blade.web.multipart.FileItem;
import com.blade.web.multipart.Multipart;
import com.blade.web.multipart.MultipartException;
import com.blade.web.multipart.MultipartHandler;

import blade.kit.IOKit;
import blade.kit.text.HTMLFilter;

/**
 * 
 * 

* ServletRequest *

* * @author biezhi * @since 1.0 */ public class ServletRequest implements Request { private static final String USER_AGENT = "user-agent"; protected Route route; private HttpServletRequest request; protected Map pathParams = new HashMap(); private Map multipartParams = new HashMap(); private List files = new ArrayList(); private Session session = null; private Blade blade = Blade.me(); public ServletRequest(HttpServletRequest request) throws MultipartException, IOException { this.request = request; init(); } public ServletRequest init() throws IOException, MultipartException { // retrieve multipart/form-data parameters if (Multipart.isMultipartContent(request)) { Multipart multipart = new Multipart(); multipart.parse(request, new MultipartHandler() { @Override public void handleFormItem(String name, String value) { multipartParams.put( name, value ); } @Override public void handleFileItem(String name, FileItem fileItem) { files.add(fileItem); } }); } return this; } private String join(String[] arr) { String ret = ""; for (String item : arr) { ret += "," + item; } if (ret.length() > 0) { ret = ret.substring(1); } return ret; } @Override public void initPathParams(String routePath) { pathParams.clear(); List variables = getPathParam(routePath); String regexPath = routePath.replaceAll(Path.VAR_REGEXP, Path.VAR_REPLACE); Matcher matcher = Pattern.compile("(?i)" + regexPath).matcher(path()); matcher.matches(); // start index at 1 as group(0) always stands for the entire expression for (int i=1; i <= variables.size(); i++) { String value = matcher.group(i); pathParams.put(variables.get(i-1), value); } } private List getPathParam(String routePath) { List variables = new ArrayList(); Matcher matcher = Pattern.compile(Path.VAR_REGEXP).matcher(routePath); while (matcher.find()) { variables.add(matcher.group(1)); } return variables; } @Override public HttpServletRequest raw() { return request; } @Override public String host() { return request.getServerName(); } @Override public String url() { return request.getRequestURL().toString(); } @Override public String path() { return Path.fixPath(request.getRequestURI()); } @Override public String userAgent() { return request.getHeader(USER_AGENT); } @Override public String pathInfo() { return request.getPathInfo(); } @Override public String protocol() { return request.getProtocol(); } @Override public String servletPath() { return request.getServletPath(); } @Override public String contextPath() { return request.getContextPath(); } @Override public ServletContext context() { return request.getServletContext(); } @Override public Map pathParams() { return pathParams; } @Override public String param(String name) { String val = pathParams.get(name); if(null != val && blade.enableXSS()){ return HTMLFilter.htmlSpecialChars(val); } return val; } @Override public String param(String name, String defaultValue) { String val = pathParams.get(name); if(null == val){ val = defaultValue; } if (null != val && blade.enableXSS()) { return HTMLFilter.htmlSpecialChars(val); } return val; } @Override public Integer paramAsInt(String name) { String value = param(name); if (null != value) { return Integer.valueOf(value); } return null; } @Override public Long paramAsLong(String name) { String value = param(name); if (null != value) { return Long.valueOf(value); } return null; } @Override public Boolean paramAsBool(String name) { String value = param(name); if (null != value) { return Boolean.valueOf(value); } return null; } @Override public String queryString() { return request.getQueryString(); } @Override public Map querys() { Map params = new HashMap(); Map requestParams = request.getParameterMap(); for (Map.Entry entry : requestParams.entrySet()) { params.put( entry.getKey(), join(entry.getValue()) ); } params.putAll(multipartParams); return Collections.unmodifiableMap(params); } @Override public String query(String name) { String[] param = request.getParameterValues(name); String val = null; if (param != null) { val = join(param); } else { val = multipartParams.get(name); } if(null != val && blade.enableXSS()){ return HTMLFilter.htmlSpecialChars(val); } return val; } @Override public String query(String name, String defaultValue) { String[] param = request.getParameterValues(name); String val = null; if (param != null) { val = join(param); } else { val = multipartParams.get(name); } if(null == val){ val = defaultValue; } if(blade.enableXSS()){ return HTMLFilter.htmlSpecialChars(val); } return val; } @Override public Integer queryAsInt(String name) { String value = query(name); if (null != value) { return Integer.valueOf(value); } return null; } @Override public Long queryAsLong(String name) { String value = query(name); if (null != value) { return Long.valueOf(value); } return null; } @Override public Boolean queryAsBool(String name) { String value = query(name); if (null != value) { return Boolean.valueOf(value); } return null; } @Override public Float queryAsFloat(String name) { String value = query(name); if (null != value) { return Float.valueOf(value); } return null; } @Override public Double queryAsDouble(String name) { String value = query(name); if (null != value) { return Double.valueOf(value); } return null; } @Override public String method() { return request.getMethod(); } @Override public HttpMethod httpMethod() { return HttpMethod.valueOf(request.getMethod().toUpperCase()); } @Override public String address() { return request.getRemoteAddr(); } @Override public Session session() { if (session == null) { session = new Session(request.getSession()); } return session; } @Override public Session session(boolean create) { if (session == null) { HttpSession httpSession = request.getSession(create); if (httpSession != null) { session = new Session(httpSession); } } return session; } @Override public void attribute(String name, Object value) { request.setAttribute(name, value); } @SuppressWarnings("unchecked") @Override public T attribute(String name) { Object object = request.getAttribute(name); if(null != object){ return (T) object; } return null; } @Override public Set attributes() { Set attrList = new HashSet(); Enumeration attributes = (Enumeration) request.getAttributeNames(); while (attributes.hasMoreElements()) { attrList.add(attributes.nextElement()); } return attrList; } @Override public String contentType() { return request.getContentType(); } @Override public int port() { return request.getServerPort(); } @Override public boolean isSecure() { return request.isSecure(); } @Override public boolean isAjax() { if (request.getHeader("x-requested-with") == null) { return false; } return "XMLHttpRequest".equals(request.getHeader("x-requested-with")); } @Override public Map cookies() { javax.servlet.http.Cookie[] servletCookies = request.getCookies(); Map cookies = new HashMap(); for (javax.servlet.http.Cookie c : servletCookies) { cookies.put( c.getName(), map(c) ); } return Collections.unmodifiableMap(cookies); } private Cookie map(Cookie servletCookie) { Cookie cookie = new Cookie(servletCookie.getName(), servletCookie.getValue()); cookie.setMaxAge(servletCookie.getMaxAge()); cookie.setHttpOnly(servletCookie.isHttpOnly()); String path = servletCookie.getPath(); if(null != path){ cookie.setPath(path); } String domain = servletCookie.getDomain(); if(null != domain){ cookie.setDomain(domain); } cookie.setSecure(servletCookie.getSecure()); return cookie; } @Override public String cookie(String name) { Cookie cookie = cookieRaw(name); if(null != cookie){ return cookie.getValue(); } return null; } @Override public Cookie cookieRaw(String name) { javax.servlet.http.Cookie[] servletCookies = request.getCookies(); if (servletCookies == null) { return null; } for (javax.servlet.http.Cookie c : servletCookies) { if (c.getName().equals(name)) { return map(c); } } return null; } @Override public Map headers() { Enumeration servletHeaders = request.getHeaderNames(); Map headers = new HashMap(); while(servletHeaders.hasMoreElements()) { String headerName = servletHeaders.nextElement(); headers.put(headerName, request.getHeader(headerName)); } return headers; } @Override public String header(String name) { return request.getHeader(name); } @Override public void encoding(String encoding) { try { request.setCharacterEncoding(encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public FileItem[] files() { FileItem[] fileParts = new FileItem[files.size()]; for (int i=0; i < files.size(); i++) { fileParts[i] = files.get(i); } return fileParts; } @Override public BodyParser body() { return new BodyParser() { @Override public String asString() throws HttpException { try { BufferedReader reader = new BufferedReader( new InputStreamReader(request.getInputStream()) ); StringBuilder sb = new StringBuilder(); String line = reader.readLine(); while (line != null) { sb.append(line + "\n"); line = reader.readLine(); } reader.close(); String data = sb.toString(); return data; } catch (IOException e) { throw new HttpException(e); } } @Override public InputStream asInputStream() throws HttpException { try { return request.getInputStream(); } catch (IOException e) { throw new HttpException(e); } } @Override public byte[] asByte() { try { return IOKit.toByteArray(request.getInputStream()); } catch (IOException e) { e.printStackTrace(); } return null; } }; } @Override public void setRoute(Route route) { this.route = route; initPathParams(route.getPath()); } @Override public Route route() { return this.route; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy