Action 訪問 Servlet API 的方式
這里只針對 Servlet 中常用的,如 HttpServletRequest、HttpServletResponse 和 HttpSession 來展開。
一般來說,在 Struts2 中訪問 Servlet API 的方式有2種:
(1) 直接訪問 Servlet API。這將會使得你的 Action 類與 Servlet API 耦合在一起。
(2) 通過 Struts2 API 來訪問 Servlet API,這樣 Action 類就不會再跟 Servlet API 耦合。
通過 ServletActionContext 來訪問 Servlet API ( 耦合 )
package fan.tutorial.action;
import com.opensymphony.xwork2.Action;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
public class ServletApiAction implements Action {
private HttpSession session;
private HttpServletRequest request;
private HttpServletResponse response;
public String execute() throws Exception {
request = ServletActionContext.getRequest();
session = request.getSession();
response = ServletActionContext.getResponse();
request.setAttribute("requestScopeParam", "fan");
session.setAttribute("sessionScopeParam", "tutorial");
response.setHeader("expires", "-1");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
return SUCCESS;
}
}
通過 ServletRequestAware、ServletResponseAware 接口來訪問 Servlet API ( 耦合 )
package fan.tutorial.action;
import javax.servlet.http.HttpSession;
import com.opensymphony.xwork2.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
public class IServletApiAction implements Action, ServletRequestAware, ServletResponseAware {
private HttpSession session;
private HttpServletRequest request;
private HttpServletResponse response;
public String execute() throws Exception {
request.setAttribute("requestScopeParam", "fan");
session.setAttribute("sessionScopeParam", "tutorial");
response.setHeader("expires", "-1");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}
通過 ActionContext 來訪問 Servlet API ( 解耦 )
package fan.tutorial.action;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class StrutsServletApiAction implements Action {
private Map<String, Object> session;
private Map<String, Object> request;
private ActionContext context = ActionContext.getContext();
public String execute() throws Exception {
session = context.getSession();
request = (Map<String, Object>)context.get("request");
request.put("requestScopeParam", "fan");
session.put("sessionScopeParam", "tutorial");
return SUCCESS;
}
}
通過 RequestAware、SessionAware 接口來訪問 Servlet API ( 解耦 )
package fan.tutorial.action;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class IStrutsServletApiAction implements Action, RequestAware, SessionAware {
private Map<String, Object> session;
private Map<String, Object> request;
public String execute() throws Exception {
request.put("requestScopeParam", "fan");
session.put("sessionScopeParam", "tutorial");
return SUCCESS;
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
Struts2 對 HttpServletRequest 和 HttpSession 做了一層封裝,使用 Map<String, Object> 來替換掉這2種對象,這樣可避免 Action 類與 Servlet API 耦合在一起。
struts-servlet.zip
posted on 2014-03-17 19:58
fancydeepin 閱讀(2045)
評論(2) 編輯 收藏