兩個java工程之間的相互調用方法


如果你有兩個java項目的話,如何向他們之間進行信息的通信
前提:必須知道要通信的java項目(接收請求方)的服務器的IP地址和訪問路徑。
其實兩個java項目之間的通信還是使用HTTP的請求。主要有兩種方式:
①使用apache的HttpClient方式。
②使用JDK自帶的java.net包下的HttpURLConnection方式。

這次主要講解HttpURLConnection方式:
HttpURLConnection傳遞請求常用的有兩種方式:POST和GET方式。使用setRequestMethod()方法設置傳遞的方式。
①、使用POST的方式傳遞請求:
第一個應用(發送Http請求的服務端):
在com.servlet下創建一個Servlet_test1.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>     

在服務端的代碼(接收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>     

在地址欄中輸入http://localhost:8080/test1/Servlet_test1。
就會輸出:
test1
test2
123
456
OK200
{"falg":"success"}

以下要注意幾點內容:
1.發送請求默認是GET方式.
2.在發送方中,outputStream必須在inptstream之前。否則就會拋出異常
3.一個HTTP請求包括兩個部分:一個是報文頭信息,一個是正文。


免責聲明!

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



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