Struts2访问Servlet的三种方式

  

<>强基本介绍
  

  

在Struts2中,行动并没有直接和Servlet API耦合。虽然Struts2中行动的访问Servlet API麻烦一些,但是这却是Struts2中行动的重要改良之一,方便行动进行单元测试。
  

  

尽管行动和Servlet API解耦会带来很多好处,然而在行动中完全不访问Servlet API几乎是不可能的,在实现业务逻辑时,经常要访问Servlet中的对象,如请求、会话和应用程序等。
  

  

在Struts2中,访问Servlet API有3种方法,分别是实现特定接口,通过ServletActionContext类,通过ActionContext类。

  

<>强思维导图

  

 Struts2访问Servlet的三种方式

  

<>强实现特定接口访问

        包com.pc.web.action;   进口javax.servlet.ServletContext;   进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;      进口org.apache.struts2.interceptor.ServletRequestAware;   进口org.apache.struts2.interceptor.ServletResponseAware;   进口org.apache.struts2.util.ServletContextAware;      进口com.opensymphony.xwork2.ActionSupport;/* *   *使用特定接口访问Servlet对象   * @author开关   *   * org.apache.struts2.dispatcher.StrutsRequestWrapper@461aa2   * org.apache.catalina.connector.ResponseFacade@7e83df   * org.apache.catalina.core.ApplicationContextFacade@3b102   * org.apache.catalina.session.StandardSessionFacade@5a214b   *是由一个名称为servletConfig的拦截器为我们封装的   */公共类ActionTest7 ActionSupport延伸实现ServletRequestAware、ServletResponseAware ServletContextAware {      私人HttpServletRequest请求;   私人HttpServletResponse反应;   私人ServletContext应用;/* *   * @return   */公共字符串演示(){   System.out.println(请求);   System.out.println(响应);   System.out.println(应用程序);   System.out.println (request.getSession ());   返回成功;   }      @Override   公共空间setServletRequest (HttpServletRequest请求){   这一点。请求=请求;   }      @Override   公共空间setServletResponse (HttpServletResponse响应){   这一点。响应=响应;   }      @Override   公共空间setServletContext (ServletContext应用程序){   这一点。应用=应用;   }   }      之前      

<强>通过ServletActionContext类

        包com.pc.struts2.web.action;   进口javax.servlet.ServletContext;   进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;   进口javax.servlet.http.HttpSession;      进口org.apache.struts2.ServletActionContext;      进口com.opensymphony.xwork2.ActionSupport;/* *   *访问ServletAPI的方式   *   *使用Struts2框架提供了一个工具类:   * ServletActionContext   *它里面提供了对应的静态方法,可以直接获取ServletAPI   *   *有一个需要注意的问题:   * org.apache.struts2.dispatcher.StrutsRequestWrapper@4637b3   * org.apache.catalina.connector.ResponseFacade@1f2f2f7   * org.apache.catalina.session.StandardSessionFacade@12d77c1   * org.apache.catalina.core.ApplicationContextFacade@1133ff   *   * requet对象已经不是原tomcat来提供的了,而是被struts2框架包装过了。   *包装使用的是装饰者模式。   *装饰者模式的作用是对方法进行增强。   *   * @author开关   */公开课ActionAPITest延伸ActionSupport {/* *   *在Struts2框架中使用ServletAPI   * @return   */公共字符串useServletAPI () {   HttpServletRequest请求=ServletActionContext.getRequest ();   HttpServletResponse响应=ServletActionContext.getResponse ();   HttpSession会话=request.getSession ();   ServletContext应用=ServletActionContext.getServletContext ();   System.out.println(请求);   System.out.println(响应);   System.out.println(会话);   System.out.println(应用程序);   返回“成功”;   }   }      之前      

<强>通过ActionContext类

        包com.pc.web.action;   进口java.util.Map;   进口javax.servlet.ServletContext;   进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;   进口javax.servlet.http.HttpSession;      进口org.apache.struts2.ServletActionContext;   进口org.apache.struts2.StrutsStatics;      进口com.opensymphony.xwork2.ActionContext;   进口com.opensymphony.xwork2.ActionSupport;/* *   * ActionContext类介绍   *它是Struts2框架为我们提供的一个工具类。   *该类可以通过方法直接获取请求,响应,servletContext对象   * @author开关   *   * context.getParameters ();==request.getParameterMap ();获取的是请求参数   */公共类ActionTest8 ActionSupport延伸实现StrutsStatics {      私人HttpServletRequest请求;   私人HttpServletResponse反应;   私人ServletContext应用;/* *   *使用ActionContext访问ServletAPI   * @return   */公共字符串演示(){   ActionContext上下文=ActionContext.getContext ();      请求=(HttpServletRequest) context.get (HTTP_REQUEST);   响应=(HttpServletResponse) context.get (HTTP_RESPONSE);   应用=(ServletContext) context.get (SERVLET_CONTEXT);   System.out.println(请求);   System.out.println(响应);   System.out.println(应用程序);   System.out.println (request.getSession ());/* org.apache.struts2.dispatcher.StrutsRequestWrapper@112e422   org.apache.catalina.connector.ResponseFacade@13f8b4c   org.apache.catalina.core.ApplicationContextFacade@d244dd   org.apache.catalina.session.StandardSessionFacade@a711cb */返回成功;   }/* *   *使用原始ServletAPI对象,往会话域和应用程序域中存入数据   *会话域中存入键=sessionAttr值会话attr=https://www.yisu.com/zixun/hello   *应用程序域中存入键=applicationAttr值=attr hello应用程序   * @return   */公共字符串以及接下来(){   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Struts2访问Servlet的三种方式