Struts2 HttpServletRequest獲取請求引數的過程
阿新 • • 發佈:2019-01-09
1. 編寫一個簡單的Action
public class UserAction {
private String name;
public String execute(){
System.out.println("執行execute方法...");//加斷點
System.out.println("name========"+name);
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2. 啟動Tomcat伺服器除錯執行
3. 檢視程式碼執行順序
4. 開啟Dispather的serviceAction方法
public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
throws ServletException {
//在下面一行程式碼加斷點再次除錯執行
Map<String, Object> extraContext = createContextMap(request, response, mapping);
.....
在該行按F5鍵進入如下程式碼
public Map<String,Object> createContextMap(request, response,mapping) {
Map requestMap = new RequestMap(request);
從以下注釋可以看出引數request獲取引數的方式,存在Map 中
// parameters map wrapping the http parameters. ActionMapping parameters are now handled and applied separately
HttpParameters params = HttpParameters.create(request.getParameterMap()).build();
在build方法按F3可以看到如下程式碼
public HttpParameters build() {
...
for (Map.Entry<String, Object> entry : requestParameterMap.entrySet()) {
String name = entry.getKey();
Object value = entry.getValue();
parameters.put(name, new Parameter.Request(name, value));
}
return new HttpParameters(parameters);
}
可以看出把請求引數的Map包裝成HttpParameters
最後建立一個map
Map<String,Object> extraContext = createContextMap(requestMap, params, session, application, request, response);
....
return extraContext;
5. 檢視具體引數位置
public void serviceAction(request, response, mapping)
throws ServletException {
//加斷點除錯
Map<String, Object> extraContext = createContextMap(request, response, mapping);
// If there was a previous value stack, ....
ValueStack stack = .....;
檢視extraContext 變數中的資料如下圖所示,可以看到呼叫Action時傳入的引數:http://localhost:8080/strutsdemo/userAction?name=admin
這就是Struts2獲取請求引數的過程。