struts2获取requestd session 等web元素的四种方式

1.通过ActionContext来访问Map类型 request session application对象

2通过 RequestAware SessionAware ApplicationAware 接口来访问Map类型的request session application对象(IOC方式)

3通过ServletActionContext来访问Servlet API类型的HttpServletRequest HttpSession ServletContext对象(依赖于Servlet API方式)

4通过ServletRequestAware接口来访问Servlet API类型的HttpServletRequest HttpSession ServletContext对象(IOC方式)

其中,前两种方式与Servlet API解耦合 后两种方式与Servlet API耦合 

以下是其简单用法案例

package com.struts2.action;

import java.util.Date;
import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;

import com.opensymphony.xwork2.ActionContext;

public class ActionContextAction {
	/**
	 * 			*如何获取web资源*
	 * 	1.什么是web资源
	 * 		HttpServletRequest,ServletContext(application),HttpSession等,即servlet API
	 * 	2.为什么要获取web资源
	 * 		B/S的应用,所以必然要访问到web资源:1.域对象取值赋值,获取realPath,使session失效....
	 *  3.如何获取
	 *  	1>解耦的方式获取web资源
	 *  		解耦:struts2把原生的servletAPI转化成其对应的Map集合,所以我们可以通过操作Map集合
	 *  		达到访问web资源的目的。
	 *  			因为web资源是服务器(tomcat)提供的,所以我们使用Map集合操作web资源,则不必须
	 *  			启动服务器,可以
	 *  			直接利用main方法或者JUnit(单元测试)进行测试,但是一般我们还要启动服务器
	 *  		1)通过actionContext对象获取
	 * 		    2)通过实现接口获取
	 * 			两种方式在什么情况下使用:一般情况下使用action上下文对象获取
	 * 			如果处理请求的多个方法都需要获取web资源,那么用aware接口比较合适
	 * 		2>耦合的方式获取:使用servlet原生api
	 * 			1)通过ServletActionContext(action的servlet上下文)获取
	 * 			2)通过aware接口实现
	 */
	public String execute(){
		//ActionContext:action上下文对象,我们可以从中获取一切action所需要的资源,包括web资源(Map集合)
		ActionContext actionContext = ActionContext.getContext();
		//获取application对应的Map对象
		Map<String,Object> applicationMap = actionContext.getApplication();
		//赋值
		applicationMap.put("applicationKey", "applicationValue");
		//在jsp页面中用el表达式取得applicationscope下key对应的value
		//${applicationScope.applicationKey }或${applicationKey }
		//取index.jsp页面在application中存储的日期
		Date nowDate = (Date)applicationMap.get("date");
		System.out.println(nowDate);
		//获取session对应的Map对象
		Map<String,Object>sessionMap = actionContext.getSession();
		System.out.println("sessionMap的类型为"+sessionMap.getClass());
		sessionMap.put("sessionKey", "sessionValue");
		//sessionMap对象实际为SessionMap类对象 该类提供了invalidate方法
		if (sessionMap instanceof SessionMap) {
			SessionMap sMap = (SessionMap) sessionMap;
			//清空session
			sMap.invalidate();
		}
		//获取request对应的Map对象   *****通过get(“request”)方式获取
		Map<String,Object>requestMap = (Map<String,Object>)actionContext.get("request");
		requestMap.put("requestKey", "requestValue");
		//获取parameters对应的Map对象
		Map<String, Object>parametersMap = actionContext.getParameters();
		//不能存 但存了不报错
		//parametersMap.put("parametersKey", "parametersValue");
		//对应的url请求:http://localhost:8081/struts2-4-GetServletApi/actionContext-result.action?name=aaa
		//el取值方式 (因为value为数组所以):parameters: ${parameters.name[0]}
		return "success";
	}
}


package com.struts2.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

public class AwareAction implements ApplicationAware,SessionAware,RequestAware,ParameterAware{
	Map<String, Object> applicationMap;
	public String execute(){
		System.out.println("execute");
		System.out.println("date="+applicationMap.get("date"));
		return "success";
	}
	public String result(){
		System.out.println("result");
		return "success";
	}
	public String result2(){
		System.out.println("result2");
		return "success";
	}
	public String result3(){
		System.out.println("result3");
		return "success";
	}
	//依赖注入
	//(程序员)依赖(struts2框架)注入(方法的参数)
	@Override
	public void setApplication(Map<String, Object> application) {
		//将注入的application对象赋值给全局变量
		applicationMap = application;
		// TODO Auto-generated method stub
		System.out.println("setApplication");
	}
	@Override
	public void setParameters(Map<String, String[]> parameters) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void setRequest(Map<String, Object> request) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void setSession(Map<String, Object> session) {
		// TODO Auto-generated method stub
		
	}
}

package com.struts2.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

public class ServletActionContextAction {
	private static ServletActionContextAction sacaction;

	public String getServeltApiWithServeltAC(){
		//ServletActionContext
		//得到request
		HttpServletRequest request = ServletActionContext.getRequest();
		//得到session
		HttpSession session = request.getSession();
		//得到application
		ServletContext application = ServletActionContext.getServletContext();
		System.out.println("date:"+application.getAttribute("date"));
		return "success";
	}
}

package com.struts2.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

public class ServletAwareAction implements ServletContextAware,ServletRequestAware,ServletResponseAware{
	
	public String execute(){
		return "success";
	}
	HttpServletRequest request;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request = request;
	}

	@Override
	public void setServletContext(ServletContext context) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setServletResponse(HttpServletResponse response) {
		// TODO Auto-generated method stub
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值