兩個java項目之間的通訊


兩個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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM