struts2中访问ServletAPI的方式

1、使用struts2提供的一个ServletActionContext工具类,在该类中包含了一系列相对应的静态方法,可以直接获取。

 

该类包含了一下几个静态方法:

  1. static PageContext getPageContext():取得Web应用的PageContext对象。

  2. static HttpServletRequest getRequest():取得Web应用的 HttpServletRequest对象。

  3. static HttpServletResponse getResponse():取得Web应用的HttpServletResponse对象。

  4. static ServletContext getServletContext():取得Web应用的ServletContext对象。

/**
 * 在struts2框架中有三种方式可以获取到ServletAPI对象
 * ServletAPI对象包含了:
 * 		request,response,HttpSession,ServletContext
 * 第一种方式:
 * 	使用的是ServletActionContext对象,它里面提供了一些静态方法,可以让我们获取到ServletAPI
 * 此种方式,使我们实际开发中采用最多的方式
 * 此时我们还要记住一件事:
 * 	这四个对象,有一个已经变了,和其他三个不一样,找出来,记住。
 * 
 * 	org.apache.struts2.dispatcher.StrutsRequestWrapper@1577071		它是那个不一样的
	org.apache.catalina.connector.ResponseFacade@1973ca4
	org.apache.catalina.session.StandardSessionFacade@e4d72
	org.apache.catalina.core.ApplicationContextFacade@fe7e93
 * 
 */
public class HelloAction extends ActionSupport{

	private HttpServletRequest request;
	private HttpServletResponse response;
	private HttpSession session;
	private ServletContext application;
	/**
	 * @return
	 */
	public String sayHello(){
		request = ServletActionContext.getRequest();
		response = ServletActionContext.getResponse();
		session = request.getSession();
		application = ServletActionContext.getServletContext();
		
		System.out.println(request);
		System.out.println(response);
		System.out.println(session);
		System.out.println(application);
		return SUCCESS;
	}
}

2、通过在业务控制类action实现相应的接口

  1. 实现ServletRequestAware可以获得request域 
  2. 实现ServletResponseAware可以获得response域 
  3. 实现ServletContextAware可以获得Application域

另外session是通过request中来进行获取的。

/**
 * 在struts2框架中有三种方式可以获取到ServletAPI对象
 * ServletAPI对象包含了:
 * 		request,response,HttpSession,ServletContext
 * 第二种方式:
 * 	采用实现接口的方式,来获取对象
 * 能够使用对象的原因:
 * 	是因为在我们的sayHello方法执行之前,已经有一些拦截器执行了。
 *  通过struts-default.xml我们能知道默认的拦截器栈defaultStack,
 *  在我们的动作配置时,默认就会有该拦截器栈中的所有拦截器执行。先正序,再倒序。
 *  
 *  帮我们给对象赋值全靠一个名称为servletConfig的拦截器
 *  
 *  拦截器的重要性:
 *  	他可以在不改变我们动作方法的代码基础上,对我们的动作方法进行增强。
 */
public class Hello3Action extends ActionSupport 
		implements ServletRequestAware,ServletResponseAware,ServletContextAware{

	private HttpServletRequest request;
	private HttpServletResponse response;
	private HttpSession session;
	private ServletContext application;
	/**
	 * @return
	 */
	public String sayHello(){
		
		session = request.getSession();
		
		System.out.println(request);
		System.out.println(response);
		System.out.println(session);
		System.out.println(application);
		return SUCCESS;
	}
	
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}
	@Override
	public void setServletContext(ServletContext application) {
		this.application = application;
	}
	
	
}

3、通过ActionContext类
Struts2提供了ActionContext类,struts2可以通过该类来实现与Servlet API的访问。

ActionContext类提供了如下几种方法:

  1. Object get(Object key):类似于调用HttpServletRequest的getAttribute(String name)方法
  2. Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。
  3. static ActionContext getContext():这是个静态方法 获取系统的ActionContext实例
  4. Map getParameters():获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap()方法
  5. Map getSession() 返回一个Map对象,该对象模拟了HttpSession 实例
  6. void setApplication(Map application):传入一个Map实例,将Map实例的key-value转换成application的属性名-值。
  7. void setSession(Map session):传入一个Map实例,将Map实例的key-value转换成application的属性名-值。
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值