漫遊 javax.servlet 請求引數解析(jetty 實現)

炸雞店老闆發表於2017-12-27

1. jetty javax.servlet.http.HttpServletRequest 的實現:org.mortbay.jetty.Request

2. server接收請求後,會給每個HttpConnection建立Request例項。請求引數的解析實現由例項完成。

3. request.getParameter實現,被動觸發引數解析


4. 引數解析實現:org.mortbay.jetty.Request#extractParameters

  • 請求url中涉及到的引數,稱之為baseParameters,簡單理解為GET請求引數處理
  • 如果POST或者PUT請求,表單(MimeType = application/x-www-form-urlencoded)提交的引數,則解析inputStream
  • 請求的引數處理全部涉及到decode的過程,預設字符集ISO-8859-1
  • 如果需要修改字符集,呼叫setCharacterEncoding
5. 對於(表單提交)POST請求,根據charset不同,具體的解析演算法也不相同,非常巧妙,可以細讀。
參考:org.mortbay.util.UrlEncoded#decodeTo。
如下:遇到&符號,buffer賦值給value,buffer重置迴圈利用,將上一步的key、value儲存。


附:針對提交引數的特殊符號,詳解參考:url特殊符號


相關文章