国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HTML表單Form中的get和post方法

2019-11-18 16:02:21
字體:
來源:轉載
供稿:網友

    在B/S應用程序中,前臺與后臺的數據交互,都是通過Html中Form表單完成的。Form提供了兩種數據傳輸的方式——get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,并且可能會對數據產生嚴重的影響。雖然為了方便的得到變量值,Web容器已經屏蔽了二者的一些差異,但是了解二者的差異在以后的編程也會很有幫助的。
  Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:
  1、Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。
  2、Get將表單中數據的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL。
  3、Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
  4、Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post(當然還有一個原因,將在后面的提到)。
  5、Get限制Form表單的數據集的值必須為ASCII字符;而Post支持整個ISO10646字符集。
  6、Get是Form的默認方法。
  下面我們一個實例來查看二者的不同:  
  
 
   
 
 
   


      Username:

      PassWord:

     
   

 

//接受數據的Servlet文件
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class ParseServlet
  extends HttpServlet {
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }

  public void service(HttpServletRequest request, HttpServletResponse response) throws
    IOException, ServletException {
    System.out.    String method = request.getMethod();
    System.out.println("method        = " + method);
    int contentLength = request.getContentLength();
    System.out.println("contentLength = " + contentLength);
    System.out.println("ContentType   = " + request.getContentType());
    //System.out.println("-------  在設定字符編碼前  -------");
    System.out.println("QueryString   = " + request.getQueryString());

    //得到ServletInputStream,請注意:這段代碼和得到user的值的代碼,不能同時出現,否則

    //在后面的那個將會得到空值。
    if (method.equalsIgnoreCase("Post")) {
      try {
        ServletInputStream ins = request.getInputStream();
        byte[] arr = new byte[contentLength];
        while (ins.read() != -1)
          ins.read(arr, 0, contentLength);
        System.out.println("content       = " + new String(arr));
      } catch (IOException e) {}
    }
   
    //得到user的值
    //System.out.println("Username = " + request.getParameter("user"));

    //設置字符編碼,必須放在得到ServletInputStream或者得到user的值的代碼之前,否則將起不
    //到轉化編碼的作用。
    try {
      request.setCharacterEncoding("gb2312");
    } catch (UnsupportedEncodingException use) {}

    //System.out.println("-------  在設定字符編碼后  -------");
    //得到user的值
    //System.out.println("Username = " + request.getParameter("user"));

    //System.out.println("QueryString = " + request.getQueryString());
    System.out.println("************** end ***************");
  }
}
   首先,我們設置form的method="post",提交數據,則可以得到如下的結果:
HTML表單Form中的get和post方法(圖一)
   從結果中可以看到,QueryString為null,而content是輸入的值,并且按照variable=value的形式組織,而且變量之間使用“&”連接,這和結果中的另外一個變量(ContentType)有關。在后面將會提到ContentType的有關概念。
   接著,我們將form中的method設置為get,重新提交數據,則可以得到如下的結果:
HTML表單Form中的get和post方法(圖二)
   可以看到,QueryString的值正是我們在頁面上的變量及其對應值,而此時ContentLength=-1。從以上的結果,我們可以清楚地看到,Get和Post分別將數據放在不同的位置來傳輸。我們還可以將程序中注釋去掉,觀察一下,在Get和Post下設置字符編碼對數據的影響,會發現:使用Post傳輸的數據,可以通過設置編碼的方式正確轉化中文;而Get傳輸的數據卻沒有變化。在以后的程序中,我們一定要注意這一點。
  下面簡單介紹一下ContentType,它和Form中enctype屬性的相對應,它是Form用來組織數據的方式,主要包含了兩種:
  1、
application/x-www-form-urlencoded:它是默認內容類型(content type),在結果中我們已經看到了經它編碼的數據的效果。編碼方法:i.將空格使用“+”代替,非字母和數字字符,是用以%HH表示的該字符的ASCII代替(漢字就是這種形式);ii.變量和值使用“=”,各個變量和值對之間使用“&”連接。
  2、multHTML表單Form中的get和post方法(圖三)

點擊查看大圖

此時在Servlet中,使用常規getParameter(String)方法已經不能到值,至于如何解析,可以參考文件上傳的程序。


(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜昌市| 佛山市| 察雅县| 抚顺县| 安陆市| 施甸县| 广宗县| 色达县| 道孚县| 佛坪县| 驻马店市| 汶上县| 德令哈市| 尚志市| 古田县| 永春县| 镇安县| 贵德县| 闽侯县| 洪洞县| 玛多县| 宜黄县| 苏尼特右旗| 贵定县| 安溪县| 兖州市| 杭锦后旗| 岚皋县| 丰顺县| 隆化县| 南漳县| 铅山县| 高唐县| 普格县| 淮滨县| 襄城县| 白水县| 濮阳县| 西贡区| 绩溪县| 天台县|