pom文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <parent>
6 <groupId>io.guangsoft</groupId>
7 <artifactId>market</artifactId>
8 <version>1.0</version>
9 </parent>
10 <modelVersion>4.0.0</modelVersion>
11
12 <artifactId>market-utils</artifactId>
13 <packaging>jar</packaging>
14
15 <!-- 完成真正的jar包注入 -->
16 <dependencies>
17 <!-- Apache工具组件 -->
18 <dependency>
19 <groupId>commons-net</groupId>
20 <artifactId>commons-net</artifactId>
21 </dependency>
22 <!-- Json处理工具包 -->
23 <dependency>
24 <groupId>com.fasterxml.jackson.core</groupId>
25 <artifactId>jackson-databind</artifactId>
26 </dependency>
27 <dependency>
28 <groupId>com.alibaba</groupId>
29 <artifactId>fastjson</artifactId>
30 </dependency>
31 <!-- httpclient -->
32 <dependency>
33 <groupId>org.apache.httpcomponents</groupId>
34 <artifactId>httpclient</artifactId>
35 </dependency>
36 <!-- Servet api -->
37 <dependency>
38 <groupId>javax.servlet</groupId>
39 <artifactId>javax.servlet-api</artifactId>
40 <scope>provided</scope>
41 </dependency>
42 </dependencies>
43
44 </project>
GResult.java
1 package io.guangsoft.market.util.bean; 2
3 public class GResult { 4
5 //状态码
6 private Integer gCode; 7
8 //状态信息
9 private String gMsg; 10
11 //响应数据
12 private Object gData; 13
14 public GResult() { 15 } 16
17 public GResult(Integer gCode, String gMsg) { 18 this.gCode = gCode; 19 this.gMsg = gMsg; 20 } 21
22 public GResult(Integer gCode, String gMsg, Object gData) { 23 this.gCode = gCode; 24 this.gMsg = gMsg; 25 this.gData = gData; 26 } 27
28 public Integer getgCode() { 29 return gCode; 30 } 31
32 public void setgCode(Integer gCode) { 33 this.gCode = gCode; 34 } 35
36 public String getgMsg() { 37 return gMsg; 38 } 39
40 public void setgMsg(String gMsg) { 41 this.gMsg = gMsg; 42 } 43
44 public Object getgData() { 45 return gData; 46 } 47
48 public void setgData(Object gData) { 49 this.gData = gData; 50 } 51
52 }
GResultUtil.java
1 package io.guangsoft.market.util.utils; 2
3 import com.alibaba.fastjson.JSONObject; 4 import io.guangsoft.market.util.bean.GResult; 5
6 import java.beans.BeanInfo; 7 import java.beans.Introspector; 8 import java.beans.PropertyDescriptor; 9 import java.lang.reflect.Method; 10 import java.util.HashMap; 11 import java.util.Map; 12
13 public class GResultUtil { 14
15 public static GResult success() { 16 return new GResult(0, "操作成功!"); 17 } 18
19 public static GResult fail() { 20 return new GResult(1, "操作失败!"); 21 } 22
23 public static GResult fail(Integer gCode) { 24 return new GResult(gCode, "操作失败!"); 25 } 26
27 public static GResult fail(Integer gCode, String gMsg) { 28 return new GResult(gCode, gMsg); 29 } 30
31 public static GResult build(Integer gCode, String gMsg, Object gData) { 32 return new GResult(gCode, gMsg, gData); 33 } 34
35 /**
36 * 得到JSON格式的结果集 37 */
38 public static JSONObject toJSONResult(GResult gResult) { 39 Map gResultMap = transBean2Map(gResult); 40 return new JSONObject(gResultMap); 41 } 42
43 /**
44 * 使用内省方式将bean转成map 45 */
46 public static Map<String, Object> transBean2Map(Object obj) { 47 if(obj == null){ 48 return null; 49 } 50 Map<String, Object> map = new HashMap<String, Object>(); 51 try { 52 BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); 53 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 54 for (PropertyDescriptor property : propertyDescriptors) { 55 String key = property.getName(); 56 // 过滤class属性
57 if (!key.equals("class")) { 58 // 得到property对应的getter方法
59 Method getter = property.getReadMethod(); 60 Object value = getter.invoke(obj); 61 map.put(key, value); 62 } 63 } 64 } catch (Exception e) { 65 e.printStackTrace(); 66 } 67 return map; 68 } 69 }
CookieUtil.java
1 package io.guangsoft.market.util.utils; 2
3
4 import java.net.URLDecoder; 5 import java.net.URLEncoder; 6
7 import javax.servlet.http.Cookie; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10
11 public class CookieUtil { 12
13 /**
14 * 得到Cookie的值, 不编码 15 */
16 public static String getCookieValue(HttpServletRequest request, String cookieName) { 17 return getCookieValue(request, cookieName, false); 18 } 19
20 /**
21 * 得到Cookie的值, 22 */
23 public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) { 24 Cookie[] cookieList = request.getCookies(); 25 if (cookieList == null || cookieName == null) { 26 return null; 27 } 28 String retValue = null; 29 try { 30 for (int i = 0; i < cookieList.length; i++) { 31 if (cookieList[i].getName().equals(cookieName)) { 32 if (isDecoder) { 33 retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8"); 34 } else { 35 retValue = cookieList[i].getValue(); 36 } 37 break; 38 } 39 } 40 } catch (Exception e) { 41 e.printStackTrace(); 42 } 43 return retValue; 44 } 45
46 /**
47 * 得到Cookie的值, 48 */
49 public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) { 50 Cookie[] cookieList = request.getCookies(); 51 if (cookieList == null || cookieName == null) { 52 return null; 53 } 54 String retValue = null; 55 try { 56 for (int i = 0; i < cookieList.length; i++) { 57 if (cookieList[i].getName().equals(cookieName)) { 58 retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString); 59 break; 60 } 61 } 62 } catch (Exception e) { 63 e.printStackTrace(); 64 } 65 return retValue; 66 } 67
68 /**
69 * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码 70 */
71 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 72 String cookieValue) { 73 setCookie(request, response, cookieName, cookieValue, -1); 74 } 75
76 /**
77 * 设置Cookie的值 在指定时间内生效,但不编码 78 */
79 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 80 String cookieValue, int cookieMaxage) { 81 setCookie(request, response, cookieName, cookieValue, cookieMaxage, false); 82 } 83
84 /**
85 * 设置Cookie的值 不设置生效时间,但编码 86 */
87 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 88 String cookieValue, boolean isEncode) { 89 setCookie(request, response, cookieName, cookieValue, -1, isEncode); 90 } 91
92 /**
93 * 设置Cookie的值 在指定时间内生效, 编码参数 94 */
95 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 96 String cookieValue, int cookieMaxage, boolean isEncode) { 97 doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode); 98 } 99
100 /**
101 * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码) 102 */
103 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 104 String cookieValue, int cookieMaxage, String encodeString) { 105 doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString); 106 } 107
108 /**
109 * 删除Cookie带cookie域名 110 */
111 public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, 112 String cookieName) { 113 doSetCookie(request, response, cookieName, "", -1, false); 114 } 115
116 /**
117 * 设置Cookie的值,并使其在指定时间内生效 118 * 119 * @param cookieMaxage cookie生效的最大秒数 120 */
121 private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, 122 String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { 123 try { 124 if (cookieValue == null) { 125 cookieValue = ""; 126 } else if (isEncode) { 127 cookieValue = URLEncoder.encode(cookieValue, "utf-8"); 128 } 129 Cookie cookie = new Cookie(cookieName, cookieValue); 130 if (cookieMaxage > 0) { 131 cookie.setMaxAge(cookieMaxage); 132 } 133 if (null != request) {// 设置域名的cookie
134 String domainName = getDomainName(request); 135 System.out.println(domainName); 136 if (!"localhost".equals(domainName) && !"127.0.0.1".equals(domainName)) { 137 cookie.setDomain(domainName); 138 } 139 } 140 cookie.setPath("/"); 141 response.addCookie(cookie); 142 } catch (Exception e) { 143 e.printStackTrace(); 144 } 145 } 146
147 /**
148 * 设置Cookie的值,并使其在指定时间内生效 149 * @param cookieMaxage cookie生效的最大秒数 150 */
151 private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, 152 String cookieName, String cookieValue, int cookieMaxage, String encodeString) { 153 try { 154 if (cookieValue == null) { 155 cookieValue = ""; 156 } else { 157 cookieValue = URLEncoder.encode(cookieValue, encodeString); 158 } 159 Cookie cookie = new Cookie(cookieName, cookieValue); 160 if (cookieMaxage > 0) { 161 cookie.setMaxAge(cookieMaxage); 162 } 163 if (null != request) {// 设置域名的cookie
164 String domainName = getDomainName(request); 165 System.out.println(domainName); 166 if (!"localhost".equals(domainName)) { 167 cookie.setDomain(domainName); 168 } 169 } 170 cookie.setPath("/"); 171 response.addCookie(cookie); 172 } catch (Exception e) { 173 e.printStackTrace(); 174 } 175 } 176
177 /**
178 * 得到cookie的域名 179 */
180 private static final String getDomainName(HttpServletRequest request) { 181 String domainName = null; 182 String serverName = request.getRequestURL().toString(); 183 if (serverName == null || serverName.equals("")) { 184 domainName = ""; 185 } else { 186 //http://www.baidu.com/aaa
187 //www.baidu.com.cn/aaa/bb/ccc
188 serverName = serverName.toLowerCase(); 189 serverName = serverName.substring(7); 190 final int end = serverName.indexOf("/"); 191 serverName = serverName.substring(0, end); 192 final String[] domains = serverName.split("\\."); 193 int len = domains.length; 194 if (len > 3) { 195 // www.xxx.com.cn
196 domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1]; 197 } else if (len <= 3 && len > 1) { 198 // xxx.com or xxx.cn
199 domainName = "." + domains[len - 2] + "." + domains[len - 1]; 200 } else { 201 domainName = serverName; 202 } 203 } 204 if (domainName != null && domainName.indexOf(":") > 0) { 205 String[] ary = domainName.split("\\:"); 206 domainName = ary[0]; 207 } 208 return domainName; 209 } 210 }
HttpClientUtil.java
1 package io.guangsoft.market.util.utils; 2
3 import java.io.IOException; 4 import java.io.InterruptedIOException; 5 import java.net.URI; 6 import java.net.UnknownHostException; 7 import java.util.ArrayList; 8 import java.util.List; 9 import java.util.Map.Entry; 10
11 import javax.net.ssl.SSLException; 12 import javax.net.ssl.SSLHandshakeException; 13
14 import org.apache.http.Consts; 15 import org.apache.http.HttpEntity; 16 import org.apache.http.HttpEntityEnclosingRequest; 17 import org.apache.http.HttpRequest; 18 import org.apache.http.HttpResponse; 19 import org.apache.http.NameValuePair; 20 import org.apache.http.NoHttpResponseException; 21 import org.apache.http.client.HttpClient; 22 import org.apache.http.client.HttpRequestRetryHandler; 23 import org.apache.http.client.config.RequestConfig; 24 import org.apache.http.client.entity.UrlEncodedFormEntity; 25 import org.apache.http.client.methods.HttpPost; 26 import org.apache.http.client.protocol.HttpClientContext; 27 import org.apache.http.config.Registry; 28 import org.apache.http.config.RegistryBuilder; 29 import org.apache.http.conn.ConnectTimeoutException; 30 import org.apache.http.conn.socket.ConnectionSocketFactory; 31 import org.apache.http.conn.socket.LayeredConnectionSocketFactory; 32 import org.apache.http.conn.socket.PlainConnectionSocketFactory; 33 import org.apache.http.conn.ssl.SSLConnectionSocketFactory; 34 import org.apache.http.impl.client.CloseableHttpClient; 35 import org.apache.http.impl.client.HttpClients; 36 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 37 import org.apache.http.message.BasicNameValuePair; 38 import org.apache.http.protocol.HttpContext; 39 import org.apache.http.util.EntityUtils; 40
41 import com.alibaba.fastjson.JSONObject; 42
43 public class HttpClientUtil { 44
45 private static CloseableHttpClient httpClient = null; 46 static final int maxTotal = 5000;//最大并发数
47 static final int defaultMaxPerRoute = 1000;//每路最大并发数
48 static final int connectionRequestTimeout = 5000;// ms毫秒,从池中获取链接超时时间
49 static final int connectTimeout = 5000;// ms毫秒,建立链接超时时间
50 static final int socketTimeout = 30000;// ms毫秒,读取超时时间
51
52 private static CloseableHttpClient initHttpClient() { 53 ConnectionSocketFactory plainFactory = PlainConnectionSocketFactory.getSocketFactory(); 54 LayeredConnectionSocketFactory sslFactory = SSLConnectionSocketFactory.getSocketFactory(); 55 Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create(). 56 register("http", plainFactory).register("https", sslFactory).build(); 57 PoolingHttpClientConnectionManager poolManager = new PoolingHttpClientConnectionManager(registry); 58 poolManager.setMaxTotal(maxTotal); 59 poolManager.setDefaultMaxPerRoute(defaultMaxPerRoute); 60 HttpRequestRetryHandler httpRetryHandler = new HttpRequestRetryHandler() { 61 @Override 62 public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { 63 if(executionCount >= 2) { 64 return false; 65 } 66 if(exception instanceof NoHttpResponseException) { 67 return false; 68 } 69 if(exception instanceof SSLHandshakeException) { 70 return false; 71 } 72 if(exception instanceof InterruptedIOException) { 73 return false; 74 } 75 if(exception instanceof UnknownHostException) { 76 return false; 77 } 78 if(exception instanceof ConnectTimeoutException) { 79 return false; 80 } 81 if(exception instanceof SSLException) { 82 return false; 83 } 84 HttpClientContext clientContext = HttpClientContext.adapt(context); 85 HttpRequest request = clientContext.getRequest(); 86 if(!(request instanceof HttpEntityEnclosingRequest)) { 87 return true; 88 } 89 return false; 90 } 91 }; 92 RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectionRequestTimeout). 93 setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout).build(); 94 CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(poolManager).setDefaultRequestConfig(requestConfig). 95 setRetryHandler(httpRetryHandler).build(); 96 return closeableHttpClient; 97 } 98
99 public static CloseableHttpClient getHttpClient() { 100 if(httpClient == null) { 101 synchronized (HttpClientUtil.class) { 102 if(httpClient == null) { 103 httpClient = initHttpClient(); 104 } 105 } 106 } 107 return httpClient; 108 } 109
110 public static JSONObject sendPost(JSONObject requestData) { 111 JSONObject result = new JSONObject(); 112 String url = requestData.getString("url"); 113 JSONObject parameter = requestData.getJSONObject("parameter"); 114 try { 115 HttpClient httpClient = HttpClientUtil.getHttpClient(); 116 HttpPost httpPost = new HttpPost(); 117 httpPost.setURI(new URI(url)); 118 List<NameValuePair> param = new ArrayList<NameValuePair>(); 119 for(Entry<String, Object> entry : parameter.entrySet()) { 120 param.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); 121 } 122 httpPost.setEntity(new UrlEncodedFormEntity(param, Consts.UTF_8)); 123 HttpResponse response = httpClient.execute(httpPost); 124 HttpEntity entity = response.getEntity(); 125 String responseBody = EntityUtils.toString(entity); 126 int code = response.getStatusLine().getStatusCode(); 127 result.put("CODE", code); 128 try { 129 JSONObject responseJson = JSONObject.parseObject(responseBody); 130 result.put("DATA", responseJson); 131 } catch(Exception e) { 132 result.put("DATA", responseBody); 133 } 134 httpPost.abort(); 135 httpPost.releaseConnection(); 136 } catch (Exception e) { 137 e.printStackTrace(); 138 } 139 return result; 140 } 141
142 }