1. 程式人生 > >(七)Action訪問Servlet API

(七)Action訪問Servlet API

private except ring code urn session esp 一個 clas

第一種方式:

            Struts2提供了一個ServletActionContext對象可以訪問ServletAPI。
            例如
                HttpServletRequest request=ServletActionContext.getRequest();
                HttpServletResponse response=ServletActionContext.getResponse();
                ServletContext context=ServletActionContext.getServletContext();
                HttpSession session=request.getSession(); 

第二種方式,實現ServletContextAware,ServletRequestAware,ServletResponseAware三個接口

   public class VcodeAction extends ActionSupport implements ServletContextAware,ServletRequestAware,ServletResponseAware { 
                    //定義三個參數
                    private HttpServletRequest request;
                    private HttpServletResponse response;
                    private ServletContext context;

                    public String execute() throws Exception {

                        return null;
                    } 
                    //實現接口中設置參數的方法
                    @Override
                    public void setServletResponse(HttpServletResponse response) {
                        this.response=response;

                    }
                    @Override
                    public void setServletRequest(HttpServletRequest request) {
                        this.request=request;

                    }
                    @Override
                    public void setServletContext(ServletContext context) {
                        this.context=context;

                    }
                }


                執行流程是什麽,誰調用了set方法?
                struts的內建攔截器有一個ServletConfig的攔截器。
                它會先得到我們的動作類的引用,
                然後通過instanceof方法判斷我們動作類是否屬於ServletContextAware,ServletRequestAware,ServletResponseAware類型
                因為我們實現了這個接口,當然屬於這個類型
                然後獲取request,response等
                然後調用我們動作類實現的接口方法 setServletResponse,setServletRequest,setServletContext等為我們的request,response賦值。

  

  

(七)Action訪問Servlet API