兩個java項目之間的通訊
阿新 • • 發佈:2017-08-31
mapping xml配置 lose rgs nal 定位 next quest api
兩個Java項目,他們之間進行信息的通信
前提:必須知道要通信的java項目(接收請求方)的服務器的IP地址和訪問路徑。
其實兩個java項目之間的通信還是使用HTTP的請求。主要有兩種方式:
①使用apache的HttpClient方式。
②使用JDK自帶的java.NET包下的HttpURLConnection方式。
HttpURLConnection方式:
HttpURLConnection傳遞請求常用的有兩種方式:POST和GET方式。使用setRequestMethod()方法設置傳遞的方式。
HttpURLConnection方式詳解:
Java原生的API可用於發送HTTP請求
即java.net.URL、java.net.URLConnection,JDK自帶的類;
1.通過統一資源定位器(java.net.URL)獲取連接器(java.net.URLConnection)
2.設置請求的參數
3.發送請求
4.以輸入流的形式獲取返回內容
5.關閉輸入流
封裝請求類:
HttpConnectionUtil1 package com.util; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream;6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.OutputStreamWriter; 9 import java.net.HttpURLConnection; 10 import java.net.MalformedURLException; 11 import java.net.URL; 12 import java.net.URLConnection; 13 import java.util.Iterator; 14 importjava.util.Map; 15 16 public class HttpConnectionUtil { 17 18 // post請求 19 public static final String HTTP_POST = "POST"; 20 21 // get請求 22 public static final String HTTP_GET = "GET"; 23 24 // utf-8字符編碼 25 public static final String CHARSET_UTF_8 = "utf-8"; 26 27 // HTTP內容類型。如果未指定ContentType,默認為TEXT/HTML 28 public static final String CONTENT_TYPE_TEXT_HTML = "text/xml"; 29 30 // HTTP內容類型。相當於form表單的形式,提交暑假 31 public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded"; 32 33 // 請求超時時間 34 public static final int SEND_REQUEST_TIME_OUT = 50000; 35 36 // 將讀超時時間 37 public static final int READ_TIME_OUT = 50000; 38 39 /** 40 * 41 * @param requestType 42 * 請求類型 43 * @param urlStr 44 * 請求地址 45 * @param body 46 * 請求發送內容 47 * @return 返回內容 48 */ 49 public static String requestMethod(String requestType, String urlStr, String body) { 50 51 // 是否有http正文提交 52 boolean isDoInput = false; 53 if (body != null && body.length() > 0) 54 isDoInput = true; 55 OutputStream outputStream = null; 56 OutputStreamWriter outputStreamWriter = null; 57 InputStream inputStream = null; 58 InputStreamReader inputStreamReader = null; 59 BufferedReader reader = null; 60 StringBuffer resultBuffer = new StringBuffer(); 61 String tempLine = null; 62 try { 63 // 統一資源 64 URL url = new URL(urlStr); 65 // 連接類的父類,抽象類 66 URLConnection urlConnection = url.openConnection(); 67 // http的連接類 68 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; 69 70 // 設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在 71 // http正文內,因此需要設為true, 默認情況下是false; 72 if (isDoInput) { 73 httpURLConnection.setDoOutput(true); 74 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length())); 75 } 76 // 設置是否從httpUrlConnection讀入,默認情況下是true; 77 httpURLConnection.setDoInput(true); 78 // 設置一個指定的超時值(以毫秒為單位) 79 httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT); 80 // 將讀超時設置為指定的超時,以毫秒為單位。 81 httpURLConnection.setReadTimeout(READ_TIME_OUT); 82 // Post 請求不能使用緩存 83 httpURLConnection.setUseCaches(false); 84 // 設置字符編碼 85 httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8); 86 // 設置內容類型 87 httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL); 88 // 設定請求的方法,默認是GET 89 httpURLConnection.setRequestMethod(requestType); 90 91 // 打開到此 URL 引用的資源的通信鏈接(如果尚未建立這樣的連接)。 92 // 如果在已打開連接(此時 connected 字段的值為 true)的情況下調用 connect 方法,則忽略該調用。 93 httpURLConnection.connect(); 94 95 if (isDoInput) { 96 outputStream = httpURLConnection.getOutputStream(); 97 outputStreamWriter = new OutputStreamWriter(outputStream); 98 outputStreamWriter.write(body); 99 outputStreamWriter.flush();// 刷新 100 } 101 if (httpURLConnection.getResponseCode() >= 300) { 102 throw new Exception( 103 "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); 104 } 105 106 if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 107 inputStream = httpURLConnection.getInputStream(); 108 inputStreamReader = new InputStreamReader(inputStream); 109 reader = new BufferedReader(inputStreamReader); 110 111 while ((tempLine = reader.readLine()) != null) { 112 resultBuffer.append(tempLine); 113 resultBuffer.append("\n"); 114 } 115 } 116 117 } catch (MalformedURLException e) { 118 e.printStackTrace(); 119 } catch (IOException e) { 120 e.printStackTrace(); 121 } catch (Exception e) { 122 e.printStackTrace(); 123 } finally {// 關閉流 124 125 try { 126 if (outputStreamWriter != null) { 127 outputStreamWriter.close(); 128 } 129 } catch (Exception e) { 130 e.printStackTrace(); 131 } 132 try { 133 if (outputStream != null) { 134 outputStream.close(); 135 } 136 } catch (Exception e) { 137 e.printStackTrace(); 138 } 139 try { 140 if (reader != null) { 141 reader.close(); 142 } 143 } catch (Exception e) { 144 e.printStackTrace(); 145 } 146 try { 147 if (inputStreamReader != null) { 148 inputStreamReader.close(); 149 } 150 } catch (Exception e) { 151 e.printStackTrace(); 152 } 153 try { 154 if (inputStream != null) { 155 inputStream.close(); 156 } 157 } catch (Exception e) { 158 e.printStackTrace(); 159 } 160 } 161 return resultBuffer.toString(); 162 } 163 164 /** 165 * 將map集合的鍵值對轉化成:key1=value1&key2=value2 的形式 166 * 167 * @param parameterMap 168 * 需要轉化的鍵值對集合 169 * @return 字符串 170 */ 171 public static String convertStringParamter(Map parameterMap) { 172 StringBuffer parameterBuffer = new StringBuffer(); 173 if (parameterMap != null) { 174 Iterator iterator = parameterMap.keySet().iterator(); 175 String key = null; 176 String value = null; 177 while (iterator.hasNext()) { 178 key = (String) iterator.next(); 179 if (parameterMap.get(key) != null) { 180 value = (String) parameterMap.get(key); 181 } else { 182 value = ""; 183 } 184 parameterBuffer.append(key).append("=").append(value); 185 if (iterator.hasNext()) { 186 parameterBuffer.append("&"); 187 } 188 } 189 } 190 return parameterBuffer.toString(); 191 } 192 193 public static void main(String[] args) throws MalformedURLException { 194 195 System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/TestHttpRequestServlet", 196 "username=123&password=我是誰")); 197 198 } 199 }
測試Servlet
1 package com.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class TestHttpRequestServelt extends HttpServlet { 11 12 13 /** 14 * 15 */ 16 private static final long serialVersionUID = 1L; 17 18 @Override 19 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 20 21 System.out.println("this is a TestHttpRequestServlet"); 22 request.setCharacterEncoding("utf-8"); 23 24 String username = request.getParameter("username"); 25 String password = request.getParameter("password"); 26 27 System.out.println(username); 28 System.out.println(password); 29 System.err.println("BBBBBBBBBBBBOOOOOOOOOOOO"); 30 31 response.setContentType("text/plain; charset=UTF-8"); 32 response.setCharacterEncoding("UTF-8"); 33 response.getWriter().write("This is ok!"); 34 35 } 36 }TestHttpRequestServelt
web.xml配置
1 <!-- BO測試中。。。多平臺之間消息推送 --> 2 <display-name>test</display-name> 3 <servlet> 4 <servlet-name>TestHttpRequestServlet</servlet-name> 5 <servlet-class>com.servlet.TestHttpRequestServelt</servlet-class> 6 </servlet> 7 <servlet-mapping> 8 <servlet-name>TestHttpRequestServlet</servlet-name> 9 <url-pattern>/TestHttpRequestServlet</url-pattern> 10 </servlet-mapping> 11 <!-- BO 測試中。。。 -->web.xml
兩個java項目之間的通訊