URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接。程序可以通过URLConnection实例向该URL发送请求、读取URL引用的资源。
验证身份证号码与姓名是否一致的接口:
http://132.228.156.103:9188/DataSync/CheckResult?SeqNo=1&ChannelID=1003&ID=41272xxxxx&Name=xxx
需求:
在用户填入身份证号时校验其准确性。
页面:
var id_number = $("#idNumber").val(); var user_name = $("#staffName").val(); $.ajax({ type:'POST', url:contextPath + "/check/checkIdNumber.do", data:{ id_number:id_number, user_name:user_name }, dataType:'json', success:function(json){ if(json.result != "00"){ $.messager.alert('警告','姓名与身份证号码不一致,请核对!'); }else{ $.ajax({ type : 'POST', url : contextPath + "/Staff/modifyIdNumber.do", data : { ID_NUMBER:id_number, mobileNumber:$("#mobileNumber").val() }, dataType : 'json', success : function(json) { if (json.status) { msgShow('系统提示', '实名认证成功', 'info'); isSimplePwd = true; $('#idNumberWindow').window('close'); }else{ msgShow('系统提示', json.info, 'warning'); } } }); } } });
控制层:
/** * 验证身份证号码与姓名是否一致 * @param request * @param response * @throws IOException */ @RequestMapping("/checkIdNumber.do") @ResponseBody public void checkIdNumber(HttpServletRequest request, HttpServletResponse response) throws IOException{ String id_number = request.getParameter("id_number"); String user_name = request.getParameter("user_name"); Map<String, String> param = new HashMap<String, String>(); param.put("ID", id_number); param.put("Name", user_name); param.put("SeqNo", "1");//流水号 param.put("ChannelID", "1003");//渠道号 String result = HttpUtil.sendPost(Constants.DATA_SYNC, param, "utf-8"); JSONObject resObj = JSONObject.fromObject(result); Map<String, Object> rs = new HashMap<String, Object>(); rs.put("result", resObj.get("result").toString()); rs.put("smsg", resObj.get("smsg").toString()); write(response, rs); }
数据返回页面的另一种方式:(尤其是当返回结果是List集合时,不能使用write(response,rs))
BaseServletTool.sendParam(response, rs.toString());
服务层:
/** * POST请求,Map形式数据 * @param url 请求地址 * @param param 请求数据 * @param charset 编码方式 */ public static String sendPost(String url, Map<String, String> param, String charset) { StringBuffer buffer = new StringBuffer(); if (param != null && !param.isEmpty()) { for (Map.Entry<String, String> entry : param.entrySet()) { buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue())).append("&"); } } buffer.deleteCharAt(buffer.length() - 1); PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); //设置鉴权属性 //connection.setRequestProperty("X-Authorization", " Bearer " + String.valueOf(param.get("token"))); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(buffer); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * TODO GET请求,字符串形式数据 * @param url 请求地址 * @param charset 编码方式 * */ public String sendGet(String url, Map<String, String> param, String charset) { String result = ""; BufferedReader in = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); //设置鉴权属性 connection.setRequestProperty("X-Authorization", " Bearer " + String.valueOf(param.get("token"))); // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; }
根据不同的请求方式选择sendPost()或sendGet()方法,如果需要鉴权,添加:
connection.setRequestProperty("X-Authorization", " Bearer " + String.valueOf(param.get("token")));
附HttpUtil.java
package com.system.tool; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; /** * 向指定服务器(外网)发送GET或POST请求工具类 * @author wangxiangyu * */ public class HttpUtil { private static int connectTimeOut = 5000; private static int readTimeOut = 10000; private static String requestEncoding = "UTF-8"; /** * GET请求,字符串形式数据 * @param url 请求地址 * @param charset 编码方式 * */ public static String sendGet(String url, String charset) { String result = ""; BufferedReader in = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); //设置鉴权属性 //connection.setRequestProperty("X-Authorization", " Bearer " + String.valueOf(param.get("token"))); // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * POST请求,字符串形式数据 * @param url 请求地址 * @param param 请求数据 * @param charset 编码方式 * */ public static String sendPostUrl(String url, String param, String charset) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * POST请求,Map形式数据 * @param url 请求地址 * @param param 请求数据 * @param charset 编码方式 */ public static String sendPost(String url, Map<String, String> param, String charset) { StringBuffer buffer = new StringBuffer(); if (param != null && !param.isEmpty()) { for (Map.Entry<String, String> entry : param.entrySet()) { buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue())).append("&"); } } buffer.deleteCharAt(buffer.length() - 1); PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(buffer); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * POST请求,字符串形式数据 * @param url 请求地址 * @param param 请求数据 */ public static String sendPost(String url, Map<String,Object> param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("Content-Type", "application/form-data"); conn.setRequestProperty("Content-Length", String.valueOf(JsonUtil.simpleMapToJsonStr(param).length())); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(JsonUtil.simpleMapToJsonStr(param)); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); String line; while ((line = in.readLine()) != null) { result += line; } System.out.println("url>>>>>>>>:"+url); System.out.println("param>>>>>>>>:"+JsonUtil.simpleMapToJsonStr(param)); System.out.println("result>>>>>>>>:"+result); } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } public static String doPost(String reqUrl, Map<String, String> parameters, String recvEncoding) { HttpURLConnection url_con = null; String responseContent = null; String vchartset = recvEncoding == "" ? HttpUtil.requestEncoding : recvEncoding; try { StringBuffer params = new StringBuffer(); for (Iterator<?> iter = parameters.entrySet().iterator(); iter.hasNext();) { Entry<?, ?> element = (Entry<?, ?>) iter.next(); params.append(element.getKey().toString()); params.append("="); params.append(URLEncoder.encode(element.getValue().toString(), vchartset)); params.append("&"); } if (params.length() > 0) { params = params.deleteCharAt(params.length() - 1); } URL url = new URL(reqUrl); url_con = (HttpURLConnection) url.openConnection(); url_con.setRequestMethod("POST"); url_con.setConnectTimeout(HttpUtil.connectTimeOut); url_con.setReadTimeout(HttpUtil.readTimeOut); url_con.setDoOutput(true); byte[] b = params.toString().getBytes(); url_con.getOutputStream().write(b, 0, b.length); url_con.getOutputStream().flush(); url_con.getOutputStream().close(); InputStream in = url_con.getInputStream(); byte[] echo = new byte[10 * 1024]; int len = in.read(echo); responseContent = (new String(echo, 0, len)).trim(); int code = url_con.getResponseCode(); if (code != 200) { responseContent = "ERROR" + code; } } catch (IOException e) { System.out.println("网络故障:" + e.toString()); } finally { if (url_con != null) { url_con.disconnect(); } } return responseContent; } public static String http(String url, Map<String, Object> params) { URL u = null; HttpURLConnection con = null; // 构建请求参数 StringBuffer sb = new StringBuffer(); if (params != null) { for (Entry<String, Object> e : params.entrySet()) { sb.append(e.getKey()); sb.append("="); sb.append(e.getValue()); sb.append("&"); } sb.substring(0, sb.length() - 1); } System.out.println("send_url:" + url); System.out.println("send_data:" + sb.toString()); // 尝试发送请求 try { u = new URL(url); con = (HttpURLConnection) u.openConnection(); //// POST 只能为大写,严格限制,post会不识别 con.setRequestMethod("POST"); con.setDoOutput(true); con.setDoInput(true); con.setUseCaches(false); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8"); osw.write(JsonUtil.simpleMapToJsonStr(params)); osw.flush(); osw.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (con != null) { con.disconnect(); } } // 读取返回内容 StringBuffer buffer = new StringBuffer(); try { //一定要有返回值,否则无法把请求发送给server端。 BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String temp; while ((temp = br.readLine()) != null) { buffer.append(temp); buffer.append("\n"); } } catch (Exception e) { e.printStackTrace(); } return buffer.toString(); } }
--------------------迷人的分割线--------------------
作者:架构师小跟班
开发者导航: http://www.codernav.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出,以免更多的人被误导。
作者:架构师小跟班
开发者导航: http://www.codernav.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出,以免更多的人被误导。