Struts2中在action访问Web资源,例如域对象的操作的相关方式
1 Action与Servlet解耦合的方式
1)使用ActionContext类获取
public class TestActionContext { public String execute() { // 1.获取ActionContext对象 // ActionContext是Action的上下文,可以从中获取当前Action的一切信息 ActionContext actionContext = ActionContext.getContext(); // 2.获取application对应的Map,并向其中添加一个属性 Map<String, Object> applicationMap = actionContext.getApplication(); applicationMap.put("applicationKey", "applicationValue"); // 3.获取session对应的Map,并向其中添加一个属性 Map<String, Object> sessionMap = actionContext.getSession(); //session sessionMap.put("sessionKey", "sessionValue"); System.out.println(sessionMap.getClass()); if(sessionMap instanceof SessionMap){ SessionMap sm = (SessionMap) sessionMap; sm.invalidate(); System.out.println("session失效了"); } // 4.获取request对应的Map Map<String, Object> requestMap = (Map<String, Object>) actionContext .get("request"); requestMap.put("requestKey", "requestValue"); // 5.获取parametersMap //注意:这个Map的值是字符串数组 //这个Map只能读,不能写入数据,若要写,则不出错,也不起作用 //getParameters()返回值是Map(String,Object),而不是Map(String,String[]); Map<String, Object> parametersMap = actionContext.getParameters(); System.out.println(((String[])parametersMap.get("name"))[0]); parametersMap.put("age", 100); return "success"; } }
2) 使用接口注入方式
public class TestAware implements ApplicationAware, SessionAware, RequestAware, ParameterAware { public String execute() { application.put("applicationKey", "applicationValue"); request.put("requestKey", "requestValue"); session.put("sessionKey", "sessionValue"); System.out.println(session.getClass()); if (session instanceof SessionMap) { SessionMap sm = (SessionMap) session; sm.invalidate(); System.out.println("session失效了"); } System.out.println(parameters.get("name")[0]); String[] age = { "23", "24", "26", "32", "22", "32" }; parameters.put("age", age); System.out.println(parameters.get("age")[0]); return "success"; } private Map<String, Object> application; public void setApplication(Map<String, Object> application) { // TODO Auto-generated method stub this.application = application; } private Map<String, Object> request; public void setRequest(Map<String, Object> request) { // TODO Auto-generated method stub this.request = request; } private Map<String, Object> session; public void setSession(Map<String, Object> session) { // TODO Auto-generated method stub this.session = session; } private Map<String, String[]> parameters; public void setParameters(Map<String, String[]> parameters) { // TODO Auto-generated method stub this.parameters = parameters; } }
2. Action与Servlet耦合的方式
1)使用ServletActionContext方式
public class TestServletActionContext { public String execute() { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = ServletActionContext.getRequest().getSession(); ServletContext servletContext = ServletActionContext .getServletContext(); System.out.println("execute..."); return "success"; } }
2)实现接口注入方式
public class TestServletAware implements ServletRequestAware, ServletContextAware, ServletResponseAware { public String execute() { context.setAttribute("contextKey", "contextValue"); System.out.println(context.getAttribute("date")); return "success"; } //ServletContext 对应Application private ServletContext context; public void setServletContext(ServletContext context) { this.context = context; } private ServletRequest request; public void setServletRequest(HttpServletRequest request) { // TODO Auto-generated method stub this.request = request; } private ServletResponse response; public void setServletResponse(HttpServletResponse response) { // TODO Auto-generated method stub this.response = response; } }
简单的写了相关测试代码