整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          html中表單的使用以及get和post的區(qū)別

          TML:完成頁面的內(nèi)容展示

          CSS:完成頁面樣式的控制,美化頁面,完成頁面的布局。

          表單:用于采集用戶輸入的數(shù)據(jù)。用于和服務器進行交互。

          form:用于定義表單的。可以定義一個范圍(代表用戶采集數(shù)據(jù)的范圍)

          屬性:action:指定提交數(shù)據(jù)的url(指的就是把數(shù)據(jù)提交到哪里)

          method:指定提交方式

          分類:一共有7種,2種比較常用。

          get:1.請求參數(shù)會在地址欄顯示

          2.請求參數(shù)的長度是有限制的。

          3.請求不安全

          post:1.請求參數(shù)不會在地址欄顯示,會封裝在請求體中。

          2.請求參數(shù)的長度沒有限制

          3.較為安全

          表單里面的數(shù)據(jù)要想被提交,必須指定它的name屬性


          我們在Web表單提交,常常需要選擇提交方法,這時我們會用到GET和POST方法。但關于它們之間的區(qū)別你又知道多少。今天我們就來了解它們
          

          兩方法其實是HTTP協(xié)議中的請求方法(關于HTTP協(xié)議可以閱讀之前我寫的《解密Web通信協(xié)議——超文本傳輸協(xié)議》)我們先通過一個例子來看看它們之間的區(qū)別。

          通過下面源代碼來查看:

          源代碼

          效果

          我們來看一下地址欄無輸入時為:

          file:///E:/~/~/Demo.html
          

          我們測試時用戶名和密碼都為123456789

          當我們用GET方法提交地址欄變?yōu)椋?/p>

          file:///E:/~/~/Demo.html?textfield=123456789&password=123456789&submit=提交#Url
          

          再來看看post方法提交后為file:///E:/~/~/Demo.html#Url

          我們不難看出當我們在輸入密碼時Get方法提交會把所有信息顯示到地址欄,這樣可以看出這樣提交信息不安全

          它們沒有很大區(qū)別都是TCP連接,但在HTTP規(guī)范不同和C/S限制導致它們有了區(qū)別如下:

          1. GET請求的數(shù)據(jù)會附在URL之后,以?分割URL,參數(shù)之間以&相連,POST方法把提交的數(shù)據(jù)放在HTTP包中。
          2. GET的長度受限于url的長度,理論上GET的URL長度可以無限長,但由于瀏覽器和服務器有限制。
          3. POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力
          4. POST的安全性要比GET的安全性高前面已經(jīng)提到

          post和get的選擇

          私密性的信息請求使用post。

          查詢信息和可以想要通過url分享的信息使用get。

          如果有任何錯誤和紕漏,請私信我更正。

          如果你有任何意見一定要私信告訴我,讓我快速成長起來喲。

          能會用到的相關包

          import java.io.File;
          import java.nio.charset.Charset;
          import org.apache.http.HttpResponse;
          import org.apache.http.client.methods.HttpUriRequest;
          import org.apache.http.client.methods.RequestBuilder;
          import org.apache.http.entity.ContentType;
          import org.apache.http.entity.mime.HttpMultipartMode;
          import org.apache.http.entity.mime.MultipartEntityBuilder;
          import org.apache.http.impl.client.CloseableHttpClient;
          import org.apache.http.impl.client.HttpClients;
          import org.apache.http.message.BasicNameValuePair;
          import org.apache.http.util.EntityUtils;

          使用HttpClient發(fā)送一個表單POST請求

          try {
          	CloseableHttpClient client = HttpClients.createDefault();
          	List<NameValuePair> paras = new ArrayList<NameValuePair>();
          	paras.add(new BasicNameValuePair("testIn1", "表單1"));
          	paras.add(new BasicNameValuePair("testIn2", "true"));
          	paras.add(new BasicNameValuePair("testIn3", "3"));
          	paras.add(new BasicNameValuePair("testIn4", "20210929010101"));
          	paras.add(new BasicNameValuePair("testIn5", "5.1"));
          	HttpUriRequest post = RequestBuilder.post("http://localhost:9092/test.jsp")//
          			.setEntity(new UrlEncodedFormEntity(paras, "GBK"))//
          			.build();
          	HttpResponse res = client.execute(post);
          	System.out.println(res.getEntity().getContentType().toString());
          	System.out.println(EntityUtils.toString(res.getEntity()));
          } catch (Exception e) {
          	e.printStackTrace();
          }
          1. 創(chuàng)建一個請求客戶端:HttpClients.createDefault(),用來實際發(fā)起調(diào)用post請求,可以類比成瀏覽器。
          2. 組裝表單請求數(shù)據(jù):通過ArrayList容器組裝NameValuePair類型的請求數(shù)據(jù),一個NameValuePair對象里存的是一個鍵值對。
          3. 創(chuàng)建一個post請求:通過請求構造器RequestBuilderpost方法構造一個post請求,通過setEntity方法向post請求里放置請求參數(shù),請求參數(shù)需要通過UrlEncodedFormEntity對象包裝,并指定編碼字符集(這里是指對方編碼,通過addHeader方法向post請求里追加請求頭信息,請求頭信息比如雙方約定的token,通過build方法返回請求對象。
          4. 發(fā)起post請求并獲得響應:通過請求客戶端的execute方法執(zhí)行請求并獲得返回值請求響應。
          5. 獲取響應結果:獲取響應對象的實體HttpEntity,通過EntityUtils的toString方法將實體轉(zhuǎn)成字符串(例子里為請求的一個jsp(html)頁面,實際返回為jsp頁面里html內(nèi)容),這里一般還要指定字符集,尤其是當實體里沒有指定字符集時

          使用HttpClient發(fā)送一個JSON數(shù)據(jù)格式的POST請求

          try {
          	CloseableHttpClient client = HttpClients.createDefault();
          	JSONObject json = new JSONObject();
          	json.put("str", "字符串");
          	json.put("num", 123);
          	json.put("bool", true);
          	json.put("date", Calendar.getInstance().getTime());//日期類型的一般會約定會特定格式的字符串,這里僅是示例
          	json.put("ja", new JSONArray());
          	HttpUriRequest post = RequestBuilder.post("http://localhost:8181/auri")//
          			.setEntity(new StringEntity(json.toString(), ContentType.APPLICATION_JSON))//json的content-type已經(jīng)包含utf-8的編碼了
          			.build();            
          	System.out.println(post.toString());
          	HttpResponse res = client.execute(post);
          	System.out.println("statusLine:" + res.getStatusLine().getStatusCode());
          	System.out.println(res.getEntity().getContentType().toString());
          	System.out.println(EntityUtils.toString(res.getEntity()));
          } catch (Exception e) {
          	e.printStackTrace();
          }
          
          1. 創(chuàng)建一個請求客戶端:HttpClients.createDefault(),用來實際發(fā)起調(diào)用post請求,可以類比成瀏覽器。
          2. 組裝Json請求數(shù)據(jù):通過JSONObject對象組裝數(shù)據(jù)。
          3. 創(chuàng)建一個post請求:通過請求構造器RequestBuilder的post方法構造一個post請求,通過setEntity方法向post請求里放置請求實體,請求實體需要通過StringEntity對象包裝,并指定content-type為json,通過build方法返回請求對象。
          4. 發(fā)起http請求并獲得響應:通過請求客戶端的execute方法執(zhí)行請求并獲得返回值請求響應。
          5. 獲取響應結果:獲取響應對象的實體HttpEntity,通過EntityUtils的toString方法將實體轉(zhuǎn)成字符串,這里一般還要指定字符集,尤其是當返回的實體里沒有指定字符集時。

          使用HttpClient發(fā)送一個包含附件上傳的POST請求

          try {
          	CloseableHttpClient client = HttpClients.createDefault();            
          	MultipartEntityBuilder meb = MultipartEntityBuilder.create();
          	meb.setMode(HttpMultipartMode.RFC6532);//must
          	meb.addBinaryBody("file1", new File("D:/abc.jpg"));
          	meb.addBinaryBody("file2", new File("D:/你好.jpg"));
          	meb.addTextBody("testIn1", "上傳表單1", ContentType.DEFAULT_TEXT.withCharset("GBK"));//GBK or UTF-8, either is ok
          	meb.addTextBody("testIn2", "true");
          	meb.addTextBody("aid", "3");
          	meb.setCharset(Charset.forName("UTF-8"));//must
          
          	HttpUriRequest multiPost = RequestBuilder.post("http://localhost:9092/web/test")//
          			.setEntity(meb.build())//
          			.build();     
          	HttpResponse res = client.execute(multiPost);
          	System.out.println("statusLine:" + res.getStatusLine().getStatusCode());
          	System.out.println(EntityUtils.toString(res.getEntity()));
          } catch (Exception e) {
          	e.printStackTrace();
          }

          1.創(chuàng)建一個請求客戶端:HttpClients.createDefault(),用來實際發(fā)起調(diào)用post請求,可以類比成瀏覽器。

          2.組裝表單請求數(shù)據(jù):因需要傳遞文件,所以通過MultipartEntityBuilder構造器組裝表單實體請求數(shù)據(jù)。

          2.1 設置mode為HttpMultipartMode.RFC6532(必須);

          2.2 設置字符集為UTF-8(必須);

          2.3 通過addBinaryBody追加文件;

          2.4 通過addTextBody追加文本參數(shù),若文本為中文則必須指定字符集為GBK或者UTF-8。

          3.創(chuàng)建一個post請求:通過請求構造器RequestBuilder的post方法構造一個post請求,通過setEntity方法向post請求里放置請求參數(shù),通過addHeader方法向post請求里追加請求頭信息,請求頭信息比如雙方約定的token,通過build方法返回請求對象。

          4.發(fā)起post請求并獲得響應:通過請求客戶端的execute方法執(zhí)行請求并獲得返回值請求響應。

          5.獲取響應結果:獲取響應對象的實體HttpEntity,通過EntityUtilstoString方法將實體轉(zhuǎn)成字符串,這里一般還要指定字符集,尤其是當實體里沒有指定字符集時。

          注意MultipartEntityBuilder必須指定modeHttpMultipartMode.RFC6532,且必須設置字符集為UTF-8否則若傳遞的文件名包含中文,則文件名亂碼;對于普通的文本參數(shù),中文指定UTF-8或者GBK接收方均未發(fā)現(xiàn)亂碼情況;接收方需要將請求轉(zhuǎn)為MultipartHttpServetRequest方可獲取到文件,示例代碼如下:

          public ModelAndView enterTest(HttpServletRequest req, HttpServletResponse res, DataObject para) throws Exception {
          	System.out.println(req.getContentType());
          	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
          	MultipartFile mf = mr.getFile("file2");
          	System.out.println("getOriginalFilename:" + mf.getOriginalFilename());
          	System.out.println("getName:" + mf.getName());
          	......
          }

          若感覺對您有用,可以轉(zhuǎn)發(fā)并關注,您的關注是對我莫大的支持!


          主站蜘蛛池模板: 国产在线不卡一区| 精品国产一区二区三区AV性色| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲一区二区三区影院| 国产未成女一区二区三区| 少妇激情AV一区二区三区| 波多野结衣的AV一区二区三区| 日韩视频免费一区二区三区| 亚洲AV成人一区二区三区在线看| 一区二区三区在线免费观看视频 | 国产成人精品一区二三区在线观看| 无码国产精品一区二区免费式影视 | 台湾无码一区二区| 国产日韩一区二区三区在线观看| 精品一区二区三区四区电影| 亚洲一区二区无码偷拍| 中文字幕一区二区三区久久网站 | 精品国产一区二区三区av片| 亚洲欧洲日韩国产一区二区三区| 久久久精品人妻一区二区三区四| 精品福利一区二区三| 日本一区二区在线| 人妻体内射精一区二区三区| 无码乱人伦一区二区亚洲一| 无码少妇精品一区二区免费动态| 国99精品无码一区二区三区 | 日韩精品一区二区亚洲AV观看| 无码日韩人妻AV一区免费l| 国产精品一区不卡| 波霸影院一区二区| 久久久久人妻精品一区三寸蜜桃| 精品免费久久久久国产一区 | 日产亚洲一区二区三区| 麻豆AV一区二区三区久久| 无码国产精品一区二区免费| 国模大胆一区二区三区| 一区二区三区四区精品| 久久精品中文字幕一区| 久久精品视频一区| 精品亚洲av无码一区二区柚蜜| 国产大秀视频一区二区三区|