文档章节

http请求封装

千元机爱好者
 千元机爱好者
发布于 2016/10/08 15:13
字数 303
阅读 20
收藏 1
点赞 0
评论 1
package an.you.common.http;

import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
/**
 * http请求工具类
 * @author anyou
 *
 */
public class BaseUrlUtil {
	/**
	 * 封装请求地址的前部分
	 * @param request
	 * @return
	 */
	public static String getBaseUrl(HttpServletRequest request){
		String path = request.getContextPath();
		int port = request.getServerPort();
		String _port = ":"+port;
		if(port == 80 || port == 443)_port = "";
		String basePath = request.getScheme()+"://"+request.getServerName()+_port+path+"/";
		return basePath;
	}
	/**
	 * 获取请求地址的参数,多个参数以,分割
	 * @param request
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static String getPaream(HttpServletRequest request){
		Map map = request.getParameterMap();
		String returnStr = "";
		Iterator entries = map.entrySet().iterator(); 
		Map.Entry entry;
		while (entries.hasNext()) {
			entry = (Map.Entry) entries.next(); 
			String name = (String) entry.getKey(); 
			Object valueObj = entry.getValue();
			String value = "";
			if(valueObj instanceof String[]){ 
				String[] values = (String[])valueObj;
				for(int i=0;i<values.length;i++){ 
					 value = values[i] + ",";
				}
				value = value.substring(0, value.length()-1); 
			}else{
				value = valueObj.toString(); 
			}
			
			returnStr += name + "=" + value +"&";
		}
		if(returnStr.length()>0){
			returnStr = returnStr.substring(0, returnStr.length()-1);
		}
		return returnStr;
	}
	/**
	 * 获取客户端请求的IP地址
	 * @param request
	 * @return
	 */
	public static String getRequestIP(HttpServletRequest request){
		String spBillCreateIP = "";
		if (request.getHeader("x-forwarded-for") == null) {
			spBillCreateIP = request.getRemoteAddr();
		} else {
			String _ip = request.getHeader("x-forwarded-for");
			String[] str = _ip.replace(" ", "").split(",");
			if (str.length > 0) {
				spBillCreateIP = str[0];
			} else {
				spBillCreateIP = request.getHeader("x-forwarded-for");
			}

		}
		return spBillCreateIP;
	}
	/**
	 * 获取访问的浏览器和操作系统
	 * @param request
	 * @return
	 */
	public static String[] getRequestUseragent(HttpServletRequest request){
		String[] strs = new String[2];
		String brower = null;
		String userOs = null;
		String agent = request.getHeader("user-agent");
		agent = agent.substring(agent.indexOf("(")+1, agent.indexOf(")"));
		String[] _agents = agent.split(";");
		if(agent.contains("iPhone")){
			brower = "Safari";
			userOs = "iPhone";
		}else if(agent.contains("MSIE")){
			brower = _agents[1];
			userOs = _agents[2];
		}else if(agent.contains("Linux")){
			if(_agents[1].contains("Android"))userOs = _agents[1];
			else userOs = _agents[2];
			brower = _agents[_agents.length-1];
		}else{
			brower = _agents[0];
			userOs = _agents[0];
		}
		strs[0] = brower;
		strs[1] = userOs;
		return strs;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
千元机爱好者
粉丝 9
博文 34
码字总数 34685
作品 0
焦作
后端工程师
加载中

评论(1)

千元机爱好者
千元机爱好者
自顶一个

暂无相关文章

Java集合类总结笔记

一、集合类的层次关系 主要容器集合类的特点: ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行高效地插入和删除的有序序列 ArrayDeque 一种用循环数组实现的...

edwardGe ⋅ 2分钟前 ⋅ 0

spring RMI远程调用

RMI https://www.cnblogs.com/wdh1995/p/6792407.html

BobwithB ⋅ 7分钟前 ⋅ 0

Jenkins实践2 之基本配置

1 插件管理 系统管理->插件管理 在可选插件中可以自主安装插件 2 管理用户 系统管理->管理用户->新建用户 3 安全配置 系统管理->全局安全配置 授权策略 选择安全矩阵 然后添加现有的用户,赋...

晨猫 ⋅ 7分钟前 ⋅ 0

c++智能指针

1、是一种泛型类,针对指针类型的泛型类,会保存指针 2、重载了符号 *和-> 对智能指针使用这两个符号,相当于对保存的泛型使用这两个符号 3、当智能指针引用计数为0时,会去释放指针指向的资...

国仔饼 ⋅ 8分钟前 ⋅ 0

Spring Boot错误处理机制

1)、SpringBoot默认的错误处理机制 默认效果: 1)、浏览器,返回一个默认的错误页面 浏览器发送请求的请求头: 2)、如果是其他客户端,默认响应一个json数据 原理: 可以参照ErrorMvcAut...

小致dad ⋅ 10分钟前 ⋅ 0

ftp连接不上的终极办法 SFTP

假如FTP由于各种原因就是连不上,那么用SFTP协议吧,使用登录服务器的账号密码。

sskill ⋅ 14分钟前 ⋅ 0

Unity 围绕旋转角度限制(Transform.RotateAround)

在 Unity 中可以利用 Transform.RotateAround 围绕指定物体进行旋转,但某些情况下可能需要对旋转角度进行控制。我是先计算出预设角度大小,然后判断是否在限定角度范围内是则进行旋转。 相关...

大轩 ⋅ 15分钟前 ⋅ 0

阿里沙箱环境支付宝测试demo

阿里支付宝支付和微信支付,包括:阿里沙箱环境支付宝测试demo,支付宝支付整合到spring+springmvc+mybatis环境和微信整合到如上环境,功能非常齐全,只需要修改对应的配置文件即可,帮助文档...

码代码的小司机 ⋅ 18分钟前 ⋅ 0

JDK1.6和JDK1.7中,Collections.sort的区别,

背景 最近,项目正在集成测试阶段,项目在服务器上运行了一段时间,点击表格的列进行排序的时候,有的列排序正常,有的列在排序的时候,在后台会抛出如下异常,查询到不到数据,而且在另外一...

tsmyk0715 ⋅ 35分钟前 ⋅ 0

C++ 中命名空间的 5 个常见用法

相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名...

柳猫 ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部