1. 程式人生 > >兩個java項目之間的通訊

兩個java項目之間的通訊

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.關閉輸入流

封裝請求類:

技術分享HttpConnectionUtil
  1 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 import
java.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項目之間的通訊