Struts2 访问 Servlet API 的四种方式

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;
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值