當前位置:首頁 » 編程語言 » java的http協議

java的http協議

發布時間: 2022-12-16 18:13:08

java開發介面利用http協議傳輸數據

5.1請求程序代碼
public void sendMessage() throws Exception {
System.out.println("調用servlet開始=================");
StringBuffer sendStr = new StringBuffer();
sendStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sendStr.append("<report_data>");
sendStr.append("<request_req>953943547334</request_req>");
sendStr.append("<request_time>201204094324</request_time>");
sendStr.append("<request_param>");
sendStr.append("<query_month>201203</query_month>");
sendStr.append("</request_param>");
sendStr.append("</report_data>");

BufferedReader reader = null;

try {
String strMessage = "";
StringBuffer buffer = new StringBuffer();

// 接報文的地址
URL uploadServlet = new URL(
"http://localhost:9090/TestTransfers");

HttpURLConnection servletConnection = (HttpURLConnection) uploadServlet
.openConnection();
// 設置連接參數
servletConnection.setRequestMethod("POST");
servletConnection.setDoOutput(true);
servletConnection.setDoInput(true);
servletConnection.setAllowUserInteraction(true);

// 開啟流,寫入XML數據
OutputStream output = servletConnection.getOutputStream();
System.out.println("發送的報文:");
System.out.println(sendStr.toString());

output.write(sendStr.toString().getBytes());
output.flush();
output.close();

// 獲取返回的數據
InputStream inputStream = servletConnection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
while ((strMessage = reader.readLine()) != null) {
buffer.append(strMessage);
}

System.out.println("接收返回值:" + buffer);

} catch (java.net.ConnectException e) {
throw new Exception();
} finally {
if (reader != null) {
reader.close();
}

}
}
5.2響應程序代碼

public class TestTransfers extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

//判斷請求報文是否來自代維系統的ip地址
String ip = request.getRemoteHost();

// 獲取收到的報文
BufferedReader reader = request.getReader();
String line = "";
StringBuffer inputString = new StringBuffer();
while ((line = reader.readLine()) != null) {
inputString.append(line);
}

//如有必要,可以在報文中增加其他驗證和加密的參數
//解析獲取到的報文,根據ip地址、其他驗證、加密等等來判斷請求報文的伺服器是否有許可權

//如果請求驗證合格,則根據請求的參數裝配返回的報文

// 要返回的報文
StringBuffer resultBuffer = new StringBuffer();
resultBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
resultBuffer.append("<report_data>");
resultBuffer.append("<respon_req>953947334</respon_req>");
resultBuffer.append("<respon_time>2012040943</respon_time>");
resultBuffer.append("<result>");
resultBuffer.append("<id>0000</id>");
resultBuffer.append("<comment>成功</comment>");
resultBuffer.append("</result>");
resultBuffer.append("<items>");
resultBuffer.append("<item>");
resultBuffer.append("<county>長治縣</county>");
resultBuffer.append("<company>鐵通</company>");
resultBuffer.append("<speciality>線路</speciality>");
resultBuffer.append("<personnel>王加和</personnel>");
resultBuffer.append("<begin_time>20120301000000</begin_time>");
resultBuffer.append("<end_time>20120331235959</end_time>");
resultBuffer.append("<plan_quantity>50</plan_quantity>");
resultBuffer.append("<checkout_quantity>40</checkout_quantity>");
resultBuffer.append("<patrol_rate>0.80</patrol_rate>");
resultBuffer.append("</item>");
//......
//......
//......
//循環組裝響應的報文

resultBuffer.append("</items>");
resultBuffer.append("</report_data>");

// 設置發送報文的格式
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();
out.println(resultBuffer.toString());
out.flush();
out.close();
}
}

⑵ 北大青鳥java培訓:http協議請求處理過程

隨著互聯網的不斷發展,用戶在訪問互聯網的時候使用的終端設備類型也在不斷的變化,但是這些都是基於http協議來實現的,下面我們就簡單分析一下,http發送請求的處理過程。
HTTP協議是基於TCP協議的,所以它使用面向連接的方式發送請求,通過stream二進制流的方式傳給對方。
當然,到了TCP層,它會把二進制流變成一個的報文段發送給伺服器。
在發送給每個報文段的時候,都需要對方有一個回應ACK,來保證報文可靠地到達了對方。
如果沒有回應,那麼TCP這一層會進行重新傳輸,直到可以到達。
同一個包有可能被傳了好多次,但是HTTP這一層不需要知道這一點,因為是TCP這一層在埋頭苦幹。
TCP層發送每一個報文的時候,都需要加上自己的地址(即源地址)和它想要去的地方(即目標地址),將這兩個信息放到IP頭裡面,交給IP層進行傳輸。
IP層需要查看目標地址和自己是否是在同一個區域網。
如果是,就發送ARP協議來請求這個目標地址對應的MAC地址,然後將源MAC和目標MAC放入MAC頭,發送出去即可。
如果不在同一個區域網,就需要發送到網關,還要需要發送ARP協議,來獲取網關的MAC地址,然後將源MAC和網關MAC放入MAC頭,發送出去。
網關收到包發現MAC符合,取出目標IP地址,根據路由協議找到下一跳的路由器,獲取下一跳路由器的MAC地址,將包發給下一跳路由器。
這樣路由器一跳一跳終於到達目標的區域網。
這個時候,後一跳的路由器能夠發現,目標地址就在自己的某一個出口的區域網上。
於是,在這個區域網上發送ARP,獲得這個目標地址的MAC地址,將包發出去。
目標的機器發現MAC地址符合,就將包收起來;發現IP地址符合,根據IP頭中協議項,知道自己上一層是TCP協議,於是解析TCP的頭,裡面有序列號,IT培訓http://www.kmbdqn.cn/建議需要看一看這個序列包是不是我要的,如果是就放入緩存中然後返回一個ACK,如果不是就丟棄。
TCP頭裡面還有埠號,HTTP的伺服器正在監聽這個埠號。
於是,目標機器自然知道是HTTP伺服器這個進程想要這個包,於是將包發給HTTP伺服器。
HTTP伺服器的進程看到,原來這個請求是要訪問一個網頁,於是就把這個網頁發給客戶端。

⑶ 如何使用java實現基於Http協議的大文件傳輸

雖然在JDK的java.net包中已經提供了訪問HTTP協議的基本功能,但是對於大部分應用程序來說,JDK庫本身提供的功能還不夠豐富和靈活。HttpClient是ApacheJakartaCommon下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。以下是簡單的post例子:Stringurl="bbslogin2.php";PostMethodpostMethod=newPostMethod(url);//填入各個表單域的值NameValuePair[]data={newNameValuePair("id","youUserName"),newNameValuePair("passwd","yourPwd")};//將表單的值放入postMethod中postMethod.setRequestBody(data);//執行postMethodintstatusCode=httpClient.executeMethod(postMethod);//HttpClient對於要求接受後繼服務的請求,象POST和PUT等不能自動處理轉發//301或者302if(statusCode==HttpStatus.SC_MOVED_PERMANENTLY||statusCode==HttpStatus.SC_MOVED_TEMPORARILY){//從頭中取出轉向的地址HeaderlocationHeader=postMethod.getResponseHeader("location");Stringlocation=null;if(locationHeader!=null){location=locationHeader.getValue();System.out.println("Thepagewasredirectedto:"+location);}else{System.err.println("Locationfieldvalueisnull.");}return;}詳情見:/developerworks/cn/opensource/os-httpclient/

⑷ java 如何實現 http協議傳輸

Java 6 提供了一個輕量級的純 Java Http 伺服器的實現。下面是一個簡單的例子:

public static void main(String[] args) throws Exception{
HttpServerProvider httpServerProvider = HttpServerProvider.provider();
InetSocketAddress addr = new InetSocketAddress(7778);
HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
httpServer.createContext("/myapp/", new MyHttpHandler());
httpServer.setExecutor(null);
httpServer.start();
System.out.println("started");
}

static class MyHttpHandler implements HttpHandler{
public void handle(HttpExchange httpExchange) throws IOException {
String response = "Hello world!";
httpExchange.sendResponseHeaders(200, response.length());
OutputStream out = httpExchange.getResponseBody();
out.write(response.getBytes());
out.close();
}
}

然後,在瀏覽器中訪問 http://localhost:7778/myapp/

⑸ java使用Http協議發請求報文

1.java.net.Socket 中有一個介面叫 PackageReceiver 你創建一個類繼承自PackageReceiver
2.自己寫一個類ConnectToHost 定義一些常量如
public ConnectToHost()
{
port = 0;
keepAlive = false;
lastCommTime = 0;
connectionCtrl = false;
maxConnection = 10;
connections = new ArrayList();
soTimeOut = 0;
inUsedConnection = 0;
alive = true;
al = true;
reconnectImmediately = false;
pollingWeight = 1;
}
3.寫一個方法用來獲取本地要發送的數據,如
private static String getRequestData(String name) throws IOException {
// TODO Auto-generated method stub
File testReq = new File("E:/virturlSend/", name);

// 輸入流
FileInputStream infile = null;
InputStreamReader isr = null;
BufferedReader in = null;
String strLine = "";
StringBuffer strTotalLine = new StringBuffer();
try {
infile = new FileInputStream(testReq); // 以流的方式讀配置文件
isr = new InputStreamReader(infile);
in = new BufferedReader(isr);

for (int iLine = 1; (strLine = in.readLine()) != null; iLine++) { // 從上傳文件中每次讀一行
// System.out.println(strLine.getBytes());
strTotalLine.append(strLine);
}
} catch (Exception ee) {

} finally {
in.close();
isr.close();
infile.close();
}
return strTotalLine.toString();
// return "baoyy";
}
4.設置主機信息 如
ConnectToHost connectToHost = new ConnectToHost();
//connectToHost.setHostAddr("20.*2.*.35");
//connectToHost.setPort(27098);
connectToHost.setHostAddr("127.*.*.1");
connectToHost.setPort(6789);
connectToHost.setMaxConnection(20);
5.發送數據
service.addConnectToHost(connectToHost);

以上代碼不是全部 僅提供大體思路和構架 不知道能不能幫到您

⑹ java的TCP和HTTP的區別和聯系是什麼

TCP是傳輸層協議,定義數據傳輸和連接方式的規范。握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。

HTTP 超文本傳送協議(Hypertext Transfer Protocol )是應用層協議,定義的是傳輸數據的內容的規范。

HTTP協議中的數據是利用TCP協議傳輸的,特點是客戶端發送的每次請求都需要伺服器回送響應,它是TCP協議族中的一種,默認使用 TCP 80埠。

好比網路是路,TCP是跑在路上的車,HTTP是車上的人。每個網站內容不一樣,就像車上的每個人有不同的故事一樣。

熱點內容
怎麼給電腦換配置 發布:2025-01-24 13:04:04 瀏覽:919
如何修改服務密碼10086 發布:2025-01-24 12:44:27 瀏覽:512
dosftp連接 發布:2025-01-24 12:35:56 瀏覽:802
編程來炒股 發布:2025-01-24 12:35:14 瀏覽:854
python正則中括弧 發布:2025-01-24 12:32:08 瀏覽:584
配置排列用英語怎麼說 發布:2025-01-24 12:32:00 瀏覽:607
led流水燈c語言程序 發布:2025-01-24 12:28:15 瀏覽:46
蘋果平板鎖屏密碼在哪裡 發布:2025-01-24 12:16:41 瀏覽:958
網校c語言 發布:2025-01-24 12:12:15 瀏覽:787
少兒機器人編程哪個機構好 發布:2025-01-24 11:51:18 瀏覽:697