1. 程式人生 > >Struts2 HttpServletRequest獲取請求引數的過程

Struts2 HttpServletRequest獲取請求引數的過程

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獲取請求引數的過程。