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");