0
我正在運行一個嵌入式Jetty(9.1.0.v20131115)設置,並有幾個處理程序安裝來處理請求在幾個不同的上下文。碼頭是莫名其妙地吃POST參數
其中一個處理程序在用戶提交表單時執行登錄功能。它的設置如下:
ContextHandler loginContext = new ContextHandler("/login");
loginContext.setHandler(new LoginHandler());
// Other handlers go here...
contexts.setHandlers(new Handler[]{rootContext, logoutContext, loginContext, resourceHandler});
server.setHandler(contexts);
這應該是相當標準的,沒什麼特別的。令我感到困惑的是,當我通過調試器運行LoginHandler時,即使表單明確具有兩個表單輸入元素,HttpServletRequest對象也沒有參數!
這裏的請求的副本,這是我通過netcat的抓:
POST /login HTTP/1.1
Host: localhost:52520
Connection: keep-alive
Content-Length: 31
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:52520
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:52520/dashboard/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
username=myuser&password=mypass
最重要的是,如果我改變形式的行動,而不是GET POST的參數顯示出來就好了!
爲了讓Handler接受POST參數,必須做什麼特別的事情嗎?
事實上,你是對的。運行你的單元測試我看到了相同的結果。我正在通過差異現在... –
Joakim,你做了一個沒有提到的其他變化。您似乎已將「POST/login HTTP/1.1」更改爲「POST/login/HTTP/1.1」。尾隨斜線改變了所有區別。 –
啊,是的。對''/ login''的請求將導致302重定向到「」/ login /「',並且您的客戶端可能不會正確地重新提交POST。我剛剛跳過了302重定向,並讓測試執行重定向後的請求。 –