您的位置:首页 > 编程语言 > Java开发

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

2017-10-11 16:46 477 查看
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;//清空sessionsMap.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框架)注入(方法的参数)@Overridepublic void setApplication(Map<String, Object> application) {//将注入的application对象赋值给全局变量applicationMap = application;// TODO Auto-generated method stubSystem.out.println("setApplication");}@Overridepublic void setParameters(Map<String, String[]> parameters) {// TODO Auto-generated method stub}@Overridepublic void setRequest(Map<String, Object> request) {// TODO Auto-generated method stub}@Overridepublic 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;@Overridepublic void setServletRequest(HttpServletRequest request) {// TODO Auto-generated method stubthis.request = request;}@Overridepublic void setServletContext(ServletContext context) {// TODO Auto-generated method stub}@Overridepublic void setServletResponse(HttpServletResponse response) {// TODO Auto-generated method stub}}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: