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

com.weicoder.web.util.RequestUtil Maven / Gradle / Ivy

package com.weicoder.web.util;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;

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

import com.weicoder.common.constants.ArrayConstants;
import com.weicoder.common.constants.HttpConstants;
import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.io.IOUtil;
import com.weicoder.common.lang.C;
import com.weicoder.common.lang.Maps;
import com.weicoder.common.params.CommonParams;
import com.weicoder.common.util.EmptyUtil;
import com.weicoder.common.util.IpUtil;
import com.weicoder.common.util.StringUtil;
import com.weicoder.core.json.JsonEngine;

/**
 * Request一些相关操作类
 * 
 * @author WD
 */
public final class RequestUtil {
	/**
	 * 获得客户连接IP
	 * 
	 * @param  request Request
	 * @return         客户连接IP
	 */
	public static String getIp(HttpServletRequest request) {
		// 获得ip列表
		String[] ips = getIps(request);
		// 返回第一个ip
		return EmptyUtil.isEmpty(ips) ? StringConstants.EMPTY : ips[0];
	}

	/**
	 * 获得客户连接IP数组 一般通过代理的可或则所以IP
	 * 
	 * @param  request Request
	 * @return         客户连接IP
	 */
	public static String[] getIps(HttpServletRequest request) {
		// 判断不为空
		if (EmptyUtil.isNotEmpty(request)) {
			// 获得IP
			String ip = request.getHeader("X-Forwarded-For");
			// 判断如果为空继续获得
			if (EmptyUtil.isEmpty(ip))
				// 为空换方法获得
				ip = request.getHeader("X-Real-IP");
			// 判断如果为空继续获得
			if (EmptyUtil.isEmpty(ip))
				// 为空换方法获得
				ip = request.getRemoteAddr();
			// 返回IP
			return EmptyUtil.isEmpty(ip) ? ArrayConstants.STRING_EMPTY : ip.indexOf(StringConstants.COMMA) == -1 ? new String[]{ip} : ip.split(StringConstants.COMMA);
		}
		// 返回""
		return ArrayConstants.STRING_EMPTY;
	}

	/**
	 * 获得域名路径
	 * 
	 * @param  request HttpServletRequest
	 * @return         域名路径
	 */
	public static String getServer(HttpServletRequest request) {
		// 获得path
		String path = request.getServerName();
		// 返回域名路径
		return IpUtil.LOCAL_IP.equals(path) ? IpUtil.getIp() : path;
	}

	/**
	 * 获得域名路径
	 * 
	 * @param  request HttpServletRequest
	 * @return         域名路径
	 */
	public static String getDomain(HttpServletRequest request) {
		// 获得域名
		String domain = StringUtil.add("http://", getServer(request), getBase(request));
		// 返回域名
		return domain.endsWith(StringConstants.BACKSLASH) ? domain : domain + StringConstants.BACKSLASH;
	}

	/**
	 * 获得项目路径
	 * 
	 * @param  request HttpServletRequest
	 * @return         项目路径
	 */
	public static String getBase(HttpServletRequest request) {
		return request.getContextPath();
	}

	/**
	 * 获得程序路径
	 * 
	 * @param  request HttpServletRequest
	 * @param  name    文件名
	 * @return         程序路径
	 */
	public String getRealPath(HttpServletRequest request, String name) {
		return request.getServletContext().getRealPath(StringConstants.BACKSLASH) + name;
	}

	/**
	 * 获得request的提交参数 如果没有返回空Map
	 * 
	 * @param  request ServletRequest
	 * @return         Map参数
	 */
	public static Map getParameters(HttpServletRequest request) {
		// 声明空Map
		Map map = Maps.newMap();
		// 获得提交的所以参数名
		for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
			// 获得参数Key
			String key = e.nextElement();
			// 获得参数值并添加到Map中
			map.put(key, request.getParameter(key));
		}
		// 返回Map
		return map;
	}

	/**
	 * 获得request的提交头参数 如果没有返回空Map
	 * 
	 * @param  request HttpServletRequest
	 * @return         Map参数
	 */
	public static Map getHeaders(HttpServletRequest request) {
		// 声明空Map
		Map map = Maps.newMap();
		// 获得提交的所以参数名
		for (Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {
			// 获得参数Key
			String key = e.nextElement();
			// 获得参数值并添加到Map中
			map.put(key, request.getHeader(key));
		}
		// 返回Map
		return map;
	}

	/**
	 * 获得request的提交Cookie参数 如果没有返回空Map
	 * 
	 * @param  request HttpServletRequest
	 * @return         Map参数
	 */
	public static Map getCookies(HttpServletRequest request) {
		// 声明空Map
		Map map = Maps.newMap();
		try {
			// 获得提交的所以参数名
			for (Cookie c : request.getCookies())
				// 获得参数值并添加到Map中
				map.put(c.getName(), c.getValue());
		} catch (Exception e) {
		}
		// 返回Map
		return map;
	}

	/**
	 * 获得request的提交Attribute参数 如果没有返回空Map
	 * 
	 * @param  request HttpServletRequest
	 * @return         Map参数
	 */
	public static Map getJson(HttpServletRequest request) {
		// 声明空Map
		Map map = Maps.newMap();
		// 是json头才读取
		if (StringUtil.startsWith(request.getContentType(), HttpConstants.CONTENT_TYPE_JSON)) {
			try {
				// 获取json串
				String json = IOUtil.readString(request.getInputStream(), CommonParams.ENCODING, false);
				// 判断是json
				if (JsonEngine.isJson(json))
					// 转换成map
					JsonEngine.toMap(json).forEach((k, v) -> map.put(k, C.toString(v)));
			} catch (IOException e) {
			}
		}
		// 返回Map
		return map;
	}

	/**
	 * 获得request的提交Attribute参数 如果没有返回空Map
	 * 
	 * @param  request HttpServletRequest
	 * @return         Map参数
	 */
	public static Map getAttributes(HttpServletRequest request) {
		// 声明空Map
		Map map = Maps.newMap();
		// 获得提交的所以参数名
		for (Enumeration e = request.getAttributeNames(); e.hasMoreElements();) {
			// 获得参数Key
			String key = e.nextElement();
			// 获得参数值并添加到Map中
			map.put(key, request.getHeader(key));
		}
		// 返回Map
		return map;
	}

	/**
	 * 获得request的提交所有参数 包括cookie和header
	 * 
	 * @param  request HttpServletRequest
	 * @return         Map参数
	 */
	public static Map getAll(HttpServletRequest request) {
		return Maps.newMaps(getJson(request), getAttributes(request), getCookies(request), getHeaders(request), getParameters(request));
	}

	/**
	 * 获得request的提交参数 如果没有返回""
	 * 
	 * @param  request ServletRequest
	 * @param  key     属性值
	 * @return         value
	 */
	public static String getParameter(ServletRequest request, String key) {
		return getParameter(request, key, StringConstants.EMPTY);
	}

	/**
	 * 获得request的提交参数 如果没有返回defaultValue
	 * 
	 * @param  request      ServletRequest
	 * @param  key          属性值
	 * @param  defaultValue 默认值
	 * @return              value
	 */
	public static String getParameter(ServletRequest request, String key, String defaultValue) {
		// 获得值
		String value = EmptyUtil.isEmpty(request) ? defaultValue : request.getParameter(key);
		// 如果值为空 返回默认值
		return EmptyUtil.isEmpty(value) ? defaultValue : value;
	}

	/**
	 * 获得request的属性 如果没有返回defaultValue
	 * 
	 * @param  request ServletRequest
	 * @param  key     属性值
	 * @return         value
	 */
	public static Object getAttribute(ServletRequest request, String key) {
		return getAttribute(request, key, null);
	}

	/**
	 * 获得request的属性 如果没有返回defaultValue
	 * 
	 * @param  request      ServletRequest
	 * @param  key          属性值
	 * @param  defaultValue 默认值
	 * @param            泛型
	 * @return              value
	 */
	@SuppressWarnings("unchecked")
	public static  E getAttribute(ServletRequest request, String key, E defaultValue) {
		// 获得值
		E value = EmptyUtil.isEmpty(request) ? defaultValue : (E) request.getAttribute(key);
		// 如果值为空 返回默认值
		return EmptyUtil.isEmpty(value) ? defaultValue : value;
	}

	/**
	 * 获得Session
	 * 
	 * @param  request HttpServletRequest
	 * @return         HttpSession
	 */
	public static HttpSession getSession(HttpServletRequest request) {
		return EmptyUtil.isEmpty(request) ? null : request.getSession();
	}

	/**
	 * 获得Session
	 * 
	 * @param  request HttpServletRequest
	 * @param  b       Boolean
	 * @return         HttpSession
	 */
	public static HttpSession getSession(HttpServletRequest request, boolean b) {
		return EmptyUtil.isEmpty(request) ? null : request.getSession(b);
	}

	/**
	 * 设置request的属性
	 * 
	 * @param request ServletRequest
	 * @param key     属性值
	 * @param value   属性值
	 */
	public static void setAttribute(ServletRequest request, String key, Object value) {
		if (EmptyUtil.isNotEmpty(request))
			request.setAttribute(key, value);
	}

	/**
	 * 获得浏览器类型
	 * 
	 * @param  request ServletRequest
	 * @return         浏览器类型
	 */
	public static String getUserAgent(HttpServletRequest request) {
		return request.getHeader("User-Agent");
	}

	/**
	 * 获得浏览器语言
	 * 
	 * @param  request ServletRequest
	 * @return         浏览器语言
	 */
	public static String getLanguage(HttpServletRequest request) {
		return request.getHeader("accept-language");
	}

	private RequestUtil() {
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy