Struts2与Servlet解耦

来源:互联网 发布:淘宝图片护盾怎么设置 编辑:程序博客网 时间:2024/05/16 08:31

与Servlet API解耦的访问方式

为了避免与 Servlet API耦合在一起,方便 Action单元测试,Struts2HttpServletRequest,HttpSessionServletContext进行了封装,构造了 3Map对象来替代这 3个对象,Action中可以直接使用 HttpServletRequest,HttpSession,ServletContext对应的Map 对象来保存和读取数据.

访问request/session/application对象

方法一:通过ServletActionContext类直接获取

ActionContextAction执行的上下文对象,ActionContext中保存了Action执行所需要的所有对象,包括parameters, request, session,application.

获取HttpServletRequest对应的Map对象:

public Object get(Object key): ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象.要得到HttpServletRequest对应的Map对象,可以通过为get() 方法传递 “request”参数实现

获取HttpSession对应的Map对象

public Map getSession()

获取ServletContext对应的Map对象:

public Map getApplication()

publicString test(){

HttpServletRequestrequest=ServletActionContext.getRequest();

HttpServletResponse response=ServletActionContext.getResponse();

HttpSession session=request.getSession();

ServletContextservletContext=ServletActionContext.getServletContext();

return"success";

 }

如果你只是想访问session的属性(Attribute),

你也可以通过ActionContext.getContext().getSession()获取

@Overridepublic String execute() throws Exception {HttpServletRequest request=ServletActionContext.getRequest();HttpServletResponse response=ServletActionContext.getResponse();Map  sessionMap=ServletActionContext.getContext().getSession();ServletContext sc=ServletActionContext.getServletContext();request.setAttribute("username", "username_request");sessionMap.put("username", "username_session");sc.setAttribute("username", "username_application");System.err.println("ssssssssssss");return "attr";}


方法二:实现指定接口,由struts框架运行时注入:

Action类通过可以实现某些特定的接口,Struts2 框架在运行时向 Action 实例注入parameters, request, sessionapplication 对应的 Map 对象:


importorg.apache.struts2.interceptor.ServletRequestAware;

importorg.apache.struts2.interceptor.ServletResponseAware;

importorg.apache.struts2.interceptor.SessionAware;

importorg.apache.struts2.util.ServletContextAware;


publicclass ContextAction02extendsActionSupport  implementsServletRequestAware,

                                                          ServletResponseAware,ServletContextAware,SessionAware {

privateHttpServletRequestrequest;

privateServletContextservletContext;

privateHttpServletResponseresponse;

privateMap<String, Object> session;

publicString test(){

System.out.println(" request "+request);

System.out.println("servletContext "+servletContext);

System.out.println(" response "+response);

System.out.println(" session "+session);

       return "success"; }

publicvoidsetServletRequest(HttpServletRequest request) {

   this.request=request;}

publicvoidsetServletResponse(HttpServletResponse response) {

   this.response=response;}

publicvoidsetServletContext(ServletContext context) {

    this.servletContext=context;}

publicvoidsetSession(Map<String, Object> session){

       this.session=session;}

}

public class ContextAction02 extends ActionSupport implements ServletRequestAware, ServletResponseAware, ServletContextAware, SessionAware{HttpServletRequest request;HttpServletResponse response;Map sessionMap;ServletContext sc;public String test(){System.out.println("ContextAction *********** test()");request.setAttribute("username", "username_request");sessionMap.put("username", "username_session");sc.setAttribute("username", "username_application");return "attr";}public void setSession(Map<String, Object> session) {this.sessionMap = session;}public void setServletContext(ServletContext context) {this.sc = context;}public void setServletResponse(HttpServletResponse response) {this.response = response;}public void setServletRequest(HttpServletRequest request) {this.request = request;}}


访问request/session/application对象中的属性

Action

publicclassContextActionAttrextendsActionSupport {

    publicString test(){

          ServletActionContext.getServletContext().setAttribute("username", "username_servletContext");

          ServletActionContext.getRequest().setAttribute("username", "username_requst");

          ServletActionContext.getContext().getSession().put("username", "username_sesson");

    return"attr";

 }

}

JSP页面:

 <body>

    ${applicationScope.username} <br>

    ${sessionScope.username}<br>

    ${requestScope.username}<br>

 </body>


0 0
原创粉丝点击