兩個(gè)java項(xiàng)目的服務(wù)端通信之HttpURLConnection方式

http://blog.csdn.net/cw_hello1/article/details/51455203

如何你有兩個(gè)java項(xiàng)目的話,如何向他們之間進(jìn)行信息的通信前提:必須知道要通信的java項(xiàng)目(接收請(qǐng)求方)的服務(wù)器的IP地址和訪問(wèn)路徑。其實(shí)兩個(gè)java項(xiàng)目之間的通信還是使用HTTP的請(qǐng)求。主要有兩種方式:①使用apache的HttpClient方式。②使用JDK自帶的java.net包下的HttpURLConnection方式。主要講解HttpURLConnection方式:HttpURLConnection傳遞請(qǐng)求常用的有兩種方式:POST和GET方式。使用setRequestMethod()方法設(shè)置傳遞的方式。①、使用POST的方式傳遞請(qǐng)求:第一個(gè)應(yīng)用(發(fā)送Http請(qǐng)求的服務(wù)端):在com.servlet下創(chuàng)建一個(gè)Servlet_test1.java文件[java] view plain copy 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?{??????????//設(shè)置請(qǐng)求的編碼方式??????????request.setCharacterEncoding("utf-8");??????????//設(shè)置返回時(shí)的編碼方式??????????response.setContentType("text/html;charset=utf-8");??????????System.out.println("test1");??????????//設(shè)置HTTP連接的URL地址,就是第二個(gè)應(yīng)用的URL。如果在同一個(gè)計(jì)算機(jī)上可以將192.168.1.134變成127.0.0.1或者localhost??????????String?http="http://192.168.1.134:8080/test2/Setvlet_test2";??????????URL?url=new?URL(http);??????????//生成HttpURLConnection連接??????????HttpURLConnection?httpurlconnection=(HttpURLConnection)?url.openConnection();??????????//設(shè)置有輸出流,默認(rèn)為false,就是不能傳遞參數(shù)。??????????httpurlconnection.setDoOutput(true);??????????//設(shè)置發(fā)送請(qǐng)求的方式。注意:一定要大寫(xiě)??????????httpurlconnection.setRequestMethod("POST");??????????//設(shè)置連接超時(shí)的時(shí)間。不過(guò)不設(shè)置,在網(wǎng)絡(luò)異常的情況下,可能會(huì)造成程序僵死而無(wú)法繼續(xù)向下執(zhí)行,所以一般設(shè)置一個(gè)超時(shí)時(shí)間。單位為毫秒??????????httpurlconnection.setConnectTimeout(30000);??????????//設(shè)置輸出流。??????????OutputStreamWriter?writer=new?OutputStreamWriter(httpurlconnection.getOutputStream(),?"utf-8");??????????//傳遞的參數(shù),中間使用&符號(hào)分割。??????????writer.write("username=123&password=456");??????????//用于刷新緩沖流。因?yàn)槟J(rèn)她會(huì)寫(xiě)入到內(nèi)存的緩沖流中,到一定的數(shù)據(jù)量時(shí),才會(huì)寫(xiě)入,使用這個(gè)命令可以讓他立即寫(xiě)入,不然下面就到關(guān)閉流了??????????writer.flush();??????????//用于關(guān)閉輸出流,關(guān)閉之后就不可以輸出數(shù)據(jù)了,所以要使用flush刷新緩沖流??????????writer.close();??????????//獲得返回的請(qǐng)求嗎。??????????int?responseCode=httpurlconnection.getResponseCode();??????????//表示請(qǐng)求成功??????????if(responseCode==HttpURLConnection.HTTP_OK){??????????????System.out.println("OK"+responseCode);??????????????//獲得服務(wù)端的輸出流。得到返回的數(shù)據(jù)??????????????InputStream?urlstream=httpurlconnection.getInputStream();??????????????BufferedReader?reader=new?BufferedReader(new?InputStreamReader(urlstream));??????????????String?line;??????????????String?tline="";??????????????while((line=reader.readLine())!=null){??????????????????tline+=line;??????????????}??????????????//輸出所有的數(shù)據(jù)??????????????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項(xiàng)目中的web.xml文件中的配置servlet:[html] view plain copyServlet_test1com.servlet.Servlet_test1Servlet_test1/Servlet_test1在服務(wù)端的代碼(接收HTTP請(qǐng)求方)在test2項(xiàng)目下創(chuàng)建一個(gè)com.servlet包下的Servlet_test2.java文件 [java] view plain copy 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"));??????????//獲得發(fā)送HTTP請(qǐng)求的參數(shù)??????????String?username=request.getParameter("username");??????????String?password=request.getParameter("password");??????????//向HTTP發(fā)送方返回響應(yīng)數(shù)據(jù)??????????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項(xiàng)目的web.xml文件中的配置如下:[html] view plain copySetvlet_test2com.servlet.Setvlet_test2Setvlet_test2/Setvlet_test2在地址欄中輸入http://localhost:8080/test1/Servlet_test1。 就會(huì)輸出:test1test2123456OK200{"falg":"success"}以下要注意幾點(diǎn)內(nèi)容:1.發(fā)送請(qǐng)求默認(rèn)是GET方式.2.在發(fā)送方中,outputStream必須在inptstream之前。否則就會(huì)拋出異常3.一個(gè)HTTP請(qǐng)求包括兩個(gè)部分:一個(gè)是報(bào)文頭信息,一個(gè)是正文。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容