Java Web之網絡通信

1、head ,get,post請求方式主要區別java

head只要求服務器返回HTTP響應消息的頭字段
編程

  1. 首先是"GET方式提交的數據最多隻能是1024字節",由於GET是經過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關係 了。而實際上,URL不存在參數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的 限制是2083字節(2K+35)。對於get方法瀏覽器將提交表單中的字段信息放置在請求頭中,不適合大數據量的傳輸,post方式瀏覽器將提交表單中的字段信息放置在請求體中,適合大數據量的傳輸,如:向服務器端上傳文件等瀏覽器

2.自從Tomcat5.x開始,GET和POST方法提交的信息,Tomcat採用了不一樣的方式來處理編碼,對於POST請求,Tomcat會仍然使用request.setCharacterEncoding方法所設置的編碼來處理,若是未設置,則使用默認的iso-8859-1編碼。而GET請求則不一樣,Tomcat對於GET請求並不會考慮使用request.setCharacterEncoding方法設置的編碼,而會永遠使用iso-8859-1編碼,而這位朋友使用的正好是GET請求,所以,tomcat將會使用iso-8859-1將提交的字節轉換成字符串。tomcat

解決的方法有兩個:
 將GET請求改爲POST請求,而後就可使用
request.setCharacterEncoding方法設置編碼,並使用request.getParameter方法直接得到中文請求參數了。
 不用改GET請求,在Servlet中使用以下的代碼來獲得中文請求參數。
服務器

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");

綜上所述,若是使用了GET請求,則setCharacterEncoding方法不起做用,只能使用上面的代碼來解決,而使用POST請求,儘管setCharacterEncoding 方法起做用,但使用上面的代碼仍然好使(在這時不能使用setCharacterEncoding方法將編碼格式設置成非iso-8859-1格式)。所以,若是想讓Servlet能夠同時處理GET和POST請求中的中文信息,除了判斷這兩種方法外,還可使用上面的代碼來同時處理這兩種請求的中文信息。網絡


   筆者建議使用以下的代碼來得到中文請求參數:ide

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");

由於上面的代碼是利用了Java的編碼能力,對於全部的Web服務器都會有效,而setCharacterEncoding方法是經過Web服務器支持的,並非全部的Web服務器都會對該方法有很好的支持。post


2、scoket和HttpURLConnection通訊大數據


       

  Socket是一個針對TCP和UDP編程的接口,你能夠藉助它創建TCP鏈接等等。而TCP和UDP協議屬於傳輸層,而http是個應用層的協議,它實際上也創建在TCP協議之上。 編碼

  (HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。)


HttpURLConnection內部使用了緩衝技術,傳輸文件的時候,文件寫到內存緩衝區,容易內存溢出

相關文章
相關標籤/搜索