两个java项目之间的通讯

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个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

 



以上是关于两个java项目之间的通讯的主要内容,如果未能解决你的问题,请参考以下文章

kotlin:如何在两个片段之间传递数据

layim即使通讯框架只能两个浏览器之间单向通讯问题

如何在导航抽屉中的两个片段之间传递数据

Java线程之间通讯

论如何设计一款端对端加密通讯软件

如何在导航抽屉活动模板中的片段之间传递字符串变量