Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 免费在线日韩,日韩午夜高清福利片在线观看,在线观看日本

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          html中表單的使用以及get和post的區別

          TML:完成頁面的內容展示

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

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

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

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

          method:指定提交方式

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

          get:1.請求參數會在地址欄顯示

          2.請求參數的長度是有限制的。

          3.請求不安全

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

          2.請求參數的長度沒有限制

          3.較為安全

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


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

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

          通過下面源代碼來查看:

          源代碼

          效果

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

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

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

          當我們用GET方法提交地址欄變為:

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

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

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

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

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

          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發送一個表單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. 創建一個請求客戶端:HttpClients.createDefault(),用來實際發起調用post請求,可以類比成瀏覽器。
          2. 組裝表單請求數據:通過ArrayList容器組裝NameValuePair類型的請求數據,一個NameValuePair對象里存的是一個鍵值對。
          3. 創建一個post請求:通過請求構造器RequestBuilderpost方法構造一個post請求,通過setEntity方法向post請求里放置請求參數,請求參數需要通過UrlEncodedFormEntity對象包裝,并指定編碼字符集(這里是指對方編碼,通過addHeader方法向post請求里追加請求頭信息,請求頭信息比如雙方約定的token,通過build方法返回請求對象。
          4. 發起post請求并獲得響應:通過請求客戶端的execute方法執行請求并獲得返回值請求響應。
          5. 獲取響應結果:獲取響應對象的實體HttpEntity,通過EntityUtils的toString方法將實體轉成字符串(例子里為請求的一個jsp(html)頁面,實際返回為jsp頁面里html內容),這里一般還要指定字符集,尤其是當實體里沒有指定字符集時

          使用HttpClient發送一個JSON數據格式的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已經包含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. 創建一個請求客戶端:HttpClients.createDefault(),用來實際發起調用post請求,可以類比成瀏覽器。
          2. 組裝Json請求數據:通過JSONObject對象組裝數據。
          3. 創建一個post請求:通過請求構造器RequestBuilder的post方法構造一個post請求,通過setEntity方法向post請求里放置請求實體,請求實體需要通過StringEntity對象包裝,并指定content-type為json,通過build方法返回請求對象。
          4. 發起http請求并獲得響應:通過請求客戶端的execute方法執行請求并獲得返回值請求響應。
          5. 獲取響應結果:獲取響應對象的實體HttpEntity,通過EntityUtils的toString方法將實體轉成字符串,這里一般還要指定字符集,尤其是當返回的實體里沒有指定字符集時。

          使用HttpClient發送一個包含附件上傳的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.創建一個請求客戶端:HttpClients.createDefault(),用來實際發起調用post請求,可以類比成瀏覽器。

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

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

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

          2.3 通過addBinaryBody追加文件;

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

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

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

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

          注意MultipartEntityBuilder必須指定modeHttpMultipartMode.RFC6532,且必須設置字符集為UTF-8否則若傳遞的文件名包含中文,則文件名亂碼;對于普通的文本參數,中文指定UTF-8或者GBK接收方均未發現亂碼情況;接收方需要將請求轉為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());
          	......
          }

          若感覺對您有用,可以轉發并關注,您的關注是對我莫大的支持!


          主站蜘蛛池模板: chinese国产一区二区| 美女视频在线一区二区三区| 制服丝袜一区二区三区| 亚洲av乱码一区二区三区香蕉 | 538国产精品一区二区在线| 久久久精品人妻一区二区三区四| 波多野结衣av高清一区二区三区| 蜜桃视频一区二区三区在线观看 | 无码精品人妻一区二区三区人妻斩 | 国产乱子伦一区二区三区| 乱子伦一区二区三区| 夜夜添无码一区二区三区| 日本中文一区二区三区亚洲| 国内精品视频一区二区三区| 亚洲av无码片区一区二区三区| 无码国产精品一区二区免费16 | 中文字幕av无码一区二区三区电影 | 消息称老熟妇乱视频一区二区| 国产伦精品一区二区免费| 无码日韩人妻AV一区免费l| 久久精品成人一区二区三区| 国产一区二区三区乱码网站| 国产精品一区二区不卡| 亚洲一区二区三区在线| 人妻AV一区二区三区精品| 国产一区二区三区高清在线观看 | 在线观看视频一区二区| 人妻少妇精品视频三区二区一区| 人妻无码视频一区二区三区 | 中文字幕一区在线| 红杏亚洲影院一区二区三区| 国产色精品vr一区区三区| 国产综合无码一区二区三区| 国产在线精品一区二区在线观看| 亚洲永久无码3D动漫一区| 国产激情无码一区二区app| 久久一区二区三区精品| 日产精品久久久一区二区| 亚洲av成人一区二区三区在线播放| 亚洲中文字幕乱码一区| 日韩一区二区三区在线观看 |