程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet/JSP 容器開發手記4-Request Parameter

Servlet/JSP 容器開發手記4-Request Parameter

編輯:關於JSP

請求參數的來源

1. 請求 URL 的查詢串, 如 /localhost/abc/test?abc=ddd&bbb=ccc, 在問號後面的字符串
2. POST 請求時, 如果 Content-Type = "application/x-www-form-urlencoded", 則參數來自請求內容(格式同查詢串)

對於第一種情況, 請求參數可以在任何情況下使用 getParameter 系列方法讀取, 采用 ISO-8859-1 編碼

對於第二種情況, 則有點復雜, 它涉及到 ServletRequest 以下幾個方法

getParameter 系列方法
getCharacterEncoding
getInputStream
getReader

getCharacterEncoding

一般情況下, 請求 characterEncoding 來自於 Content-Type 的 charset 參數, 如果 charset 參數未設, 則為 null

getInputStream 和 getReader (糾正手記1的錯誤)

這兩個方法用於讀取請求內容, 並且不能同時使用, 如果使用其中一個後再試圖使用另一個, 則拋出 IllegalStateException
getReader方法返回 BufferedReader 對象, 該對象使用 getCharacterEncoding 對字符串進行編碼, 如果為 null, 則使用 ISO-8859-1

getParameter 系列方法

當參數來自於請求內容時, 由於要讀取請求內容而用到流, 所以

1. 當使用 getParameter 系列方法之前使用了 getInputStream 和 getReader 方法, 則不能使用 getParameter 系列方法得到請求參數
2. 當使用 getParameter 系列方法後再使用流, 則流應該已到了結尾, 此時可以得到請求參數
3. 使用 getCharacterEncoding 對參數編碼, 如果為 null, 則使用 ISO-8859-1
4. 不直接使用 getInputStream 或 getReader 方法來得到流用以解析參數, 因為這會影響狀態, 造成 getInputStream 或 getReader 方法拋出 IllegalStateException

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved