Struts2中Action訪問Servlet API的兩種方法

Struts2的Action並未直接與任何Servlet  API偶合,這也是Struts2的一個改良的地方。但如何進行訪問?


方法一:.[一般推薦使用](只能獲得request,而response則得不到)
Struts2提供了一個ActionContext類,Struts2中的Action可以通過它進行訪問。
其方法有:get(),getApplication(),getContext(),getParameters(),getSession(),setApplication(),setSession()


/**
 * @作者 Jcuckoo
 * @創建日期 2008-12-02
 * @版本 V 1.0
 */


public class LoginAction implements Action
{
    private String username;
    private String password;
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String execute() throws Exception
    {
        //獲取靜態方法,獲取系統的ActionContext實例
            ActionContext ctx = ActionContext.getContext();
        //獲取servletContext裏的counter屬性
        Integer counter = (Integer)ctx.getApplication().get("counter");
        if (counter == null)
        {
            counter = 1;
        }
        else
        {
            counter = counter + 1;
        }
        //將增加1後的counter值設置成counter屬性
        ctx.getApplication().put("counter" , counter);
        ctx.getSession().put("user" , getUsername());
        if (getUsername().equals("scott")&& getPassword().equals("tiger") )
        {
        //直接設置HttpServletRequest屬性
            ctx.put("tip" , "服務器提示:您已經成功的登陸");
                    return SUCCESS;
        }else{
        //直接設置HttpServletRequest屬性
            ctx.put("tip" , "服務器提示:登陸失敗");
                 return ERROR;
        }
    }
}

方法二:[不推薦](麻煩,與servlet API 耦合大).

雖然Struts2提供了ActionContext來訪問Servlet API,但這種訪問畢竟不能直接獲得Servlet API,爲了在Action中直接訪問Servlet API,Struts2還提供了一下接口:ServletContextAware,ServletRequestAware,ServletResponseAware
下面以ServletResponseAware爲例。

/**
 * @作者 Jcuckoo
 * @創建日期 2008-12-02
 * @版本 V 1.0
 */

//實現ServletResponseAware
public class LoginAction implements Action , ServletResponseAware
{
//需要訪問的HttpServletResponse對象
    private HttpServletResponse response;
    private String username;
    private String password;
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username = username;
    }
//實現ServletResponseAware接口必須實現的方法
    public void setServletResponse(HttpServletResponse response) {
    this.response = response;
  }
    public String execute() throws Exception{
        Cookie c = new Cookie("user" , getUsername());
        c.setMaxAge(60 * 60);
        response.addCookie(c);
        return SUCCESS;
    }
}
方法三:強烈推薦使用

Struts2還提供了一個ServletActionContext,其靜態方法有:getPageContext(),getRequest(),getResponse(),getServletContext()

HttpServletRequest request = ServletActionContext.getRequest(); 
HttpServletResponse response = ServletActionContext.getResponse(); 
request.getSession().setAttribute("username","admin"); 
request.setAttribute("password", "1234");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章