隨筆-126  評論-247  文章-5  trackbacks-0

          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 閱讀(2047) 評論(2)  編輯  收藏

          評論:
          # re: Struts2 訪問 Servlet API 的方式 2014-03-20 13:41 | 中山婚紗攝影
          很好,  回復  更多評論
            
          # re: Struts2 訪問 Servlet API 的方式 2014-04-16 17:13 | 鋁板
          通過 Struts2 API 來訪問 Servlet API,這樣 Action 類就不會再跟 Servlet API 耦合。  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东阳市| 武乡县| 竹北市| 长春市| 广河县| 闽侯县| 永平县| 平安县| 玉田县| 南皮县| 盐山县| 航空| 华池县| 囊谦县| 沿河| 柞水县| 城口县| 巴东县| 依兰县| 和林格尔县| 安阳市| 襄垣县| 耒阳市| 闵行区| 恭城| 大方县| 友谊县| 会泽县| 延寿县| 红安县| 都兰县| 鲜城| 宜昌市| 咸阳市| 赤城县| 潍坊市| 宣城市| 桑植县| 永新县| 南乐县| 嘉祥县|