若是你有兩個java項目的話,如何向他們之間進行信息的通訊
前提:必須知道要通訊的java項目(接收請求方)的服務器的IP地址和訪問路徑。
其實兩個java項目之間的通訊仍是使用HTTP的請求。主要有兩種方式:
①使用apache的HttpClient方式。
②使用JDK自帶的java.net包下的HttpURLConnection方式。html
此次主要講解HttpURLConnection方式:
HttpURLConnection傳遞請求經常使用的有兩種方式:POST和GET方式。使用setRequestMethod()方法設置傳遞的方式。
①、使用POST的方式傳遞請求:
第一個應用(發送Http請求的服務端):
在com.servlet下建立一個Servlet_test1.java文件java
package com.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet_test1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//設置請求的編碼方式
request.setCharacterEncoding("utf-8");
//設置返回時的編碼方式
response.setContentType("text/html;charset=utf-8");
System.out.println("test1");
//設置HTTP鏈接的URL地址,就是第二個應用的URL。若是不在同一個計算機上能夠將127.0.0.1變成相應的IP地址
String http="http://127.0.0.1:8080/test2/Setvlet_test2";
URL url=new URL(http);
//生成HttpURLConnection鏈接
HttpURLConnection httpurlconnection=(HttpURLConnection) url.openConnection();
//設置有輸出流,默認爲false,就是不能傳遞參數。
httpurlconnection.setDoOutput(true);
//設置發送請求的方式。注意:必定要大寫
httpurlconnection.setRequestMethod("POST");
//設置鏈接超時的時間。不過不設置,在網絡異常的狀況下,可能會形成程序僵死而沒法繼續向下執行,因此通常設置一個超時時間。單位爲毫秒
httpurlconnection.setConnectTimeout(30000);
//設置輸出流。
OutputStreamWriter writer=new OutputStreamWriter(httpurlconnection.getOutputStream(), "utf-8");
//傳遞的參數,中間使用&符號分割。
writer.write("username=123&password=456");
//用於刷新緩衝流。由於默認她會寫入到內存的緩衝流中,到必定的數據量時,纔會寫入,使用這個命令可讓他當即寫入,否則下面就到關閉流了
writer.flush();
//用於關閉輸出流,關閉以後就不能夠輸出數據了,因此要使用flush刷新緩衝流
writer.close();
//得到返回的請求嗎。
int responseCode=httpurlconnection.getResponseCode();
//表示請求成功
if(responseCode==HttpURLConnection.HTTP_OK){
System.out.println("OK"+responseCode);
//得到服務端的輸出流。獲得返回的數據
InputStream urlstream=httpurlconnection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(urlstream));
String line;
String tline="";
while((line=reader.readLine())!=null){
tline+=line;
}
//輸出全部的數據
System.out.println(tline);
}else{
System.out.println("ERR"+responseCode);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
在test1項目中的web.xml文件中的配置servlet:
<servlet>
<servlet-name>Servlet_test1</servlet-name>
<servlet-class>com.servlet.Servlet_test1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet_test1</servlet-name>
<url-pattern>/Servlet_test1</url-pattern>
</servlet-mapping> web
在服務端的代碼(接收HTTP請求方)
在test2項目下建立一個com.servlet包下的Servlet_test2.java文件
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Setvlet_test2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("test2");
System.out.println(request.getParameter("username"));
System.out.println(request.getParameter("password"));
//得到發送HTTP請求的參數
String username=request.getParameter("username");
String password=request.getParameter("password");
//向HTTP發送方返回響應數據
if("123".equals(username)&&"456".equals(password)){
response.getWriter().write("{\"falg\":\"success\"}");
}else{
response.getWriter().write("{\"falg\":\"error\"}");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
在test2項目的web.xml文件中的配置以下:
<servlet>
<servlet-name>Setvlet_test2</servlet-name>
<servlet-class>com.servlet.Setvlet_test2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Setvlet_test2</servlet-name>
<url-pattern>/Setvlet_test2</url-pattern>
</servlet-mapping> apache
在地址欄中輸入http://localhost:8080/test1/Servlet_test1。
就會輸出:
test1
test2
123
456
OK200
{"falg":"success"}服務器
如下要注意幾點內容:
1.發送請求默認是GET方式.
2.在發送方中,outputStream必須在inptstream以前。不然就會拋出異常
3.一個HTTP請求包括兩個部分:一個是報文頭信息,一個是正文。網絡