處理請求的資料
// 例如:127.0.0.1:8080/test.jsp?a=%e4%b8%ad%e5%9b%bd
request.unparseduri().setbytes(buf, start, end - start);
if (questionpos >= 0) else
3. org.apache.catalina.connector.coyoteadapter
public void service(org.apache.coyote.request req,
org.apache.coyote.response res)
/*** service method. */
public void service(org.apache.coyote.request req,
org.apache.coyote.response res)
throws exception
if (connector.getxpoweredby())
/*** parse additional request parameters. */
protected boolean postparserequest(org.apache.coyote.request req,
request request,
org.apache.coyote.response res,
response response)
3. 解析引數
org.apache.catalina.connector.request.parseparameters
/*** parse request parameters. */
protected void parseparameters()
} else }
// 解析query str
parameters.handlequeryparameters();
if (usinginputstream || usingreader)
return;
// 不是post, 直接返回
if (!getmethod().equalsignorecase("post"))
return;
string contenttype = getcontenttype();
if (contenttype == null)
contenttype = "";
int semicolon = contenttype.indexof(';');
if (semicolon >= 0) else
// 當不是表單資料時, 返回
return;
// 是表單資料, 讀取解析
int len = getcontentlength();
if (len > 0)
return; }
byte formdata = null;
if (len < cached_post_len) else
try
} catch (ioexception e)
return; }
parameters.processparameters(formdata, 0, len);
} else if ("chunked".equalsignorecase(
coyoterequest.getheader("transfer-encoding"))) catch (ioexception e)
return; }
if (formdata != null) }
}// 使用querystr的encoding
public void processparameters( messagebytes data, string encoding ) else }
小結:1. 所有引數tomcat都會先做url decode(這很正常, 標準情況下, 都要做url編碼, 可同時保證特殊字元的正確傳送, 不管get傳參還是post傳參)
字元 特殊字元的含義 url編碼
# 用來標誌特定的文件位置 %23
% 對特殊字元進行編碼 %25
& 分隔不同的變數值對 %26
+ 在變數值中表示空格 %2b
\ 表示目錄路徑 %2f
= 用來連線鍵和值 %3d
? 表示查詢字串的開始 %3f
2. 做url編碼時, 肯定有指定的字符集(這裡假定為utf-8), 如果後端的處理字符集與此字符集不同, 一般來說, 就有亂碼
針對get方式的引數, 有兩種方式, 可以正確處理
(1) tomcat的伺服器配置uriencoding="utf-8"
(2) tomcat的伺服器配置usebodyencodingforuri="true", 讀取引數之前, 設定
request.setcharacterencoding("utf-8");
針對post方式的引數, 只要設定如下即可:
request.setcharacterencoding("utf-8");
USB host處理過程
在usbh core.c中有乙個函式usbh process 這個函式很重要,main 函式每迴圈一次,它就執行一次,它處理所有usb核心狀態的變化,typedef enum host state 根據這個當前狀態 phost gstate 處於以上哪個狀態的不同,做出不同的處理過程。其中最重要的要...
Hadoop map reduce處理過程
1 在hadoop中,每個mapreduce任務都被初始化為乙個job。每個job又可以分成兩個階段 map階段和reduce階段 map函式接受乙個形式的輸入,然後同樣產生乙個形式的中間輸出,hadoop會負責將所有具有相同結果中間key值的value集合到一起傳給reduce函式,reduce函...
Openstack nova api 處理過程
乙個python函式示例 乙個python類的示例 所有的web請求引數都被封裝在environ這個dictionary中,start response函式讓人難以理解,其主要作用是設定reponse的http返回碼和http header.返回的list的乙個item對應於http respons...