1.访问Map类的request,session,application
第一种方式:依赖于Struts
a.编写action
package com.bjsxt.struts2.user.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction1 extends ActionSupport { //取得Map类型的request,session,application private Map request; private Map session; private Map application; public LoginAction1() { /*ActionContext.getContext()获取action执行环境,这个环境中有Map类型的request,session,aplication *problem1:ActionContext是单例吗?不是,每个请求都会生成一个ActionContext,request对象不可能所有的用户都使用同一个 *problem2:Map类型的request,session,application与HttpServletRequest,HtppSession,ServletContext是一样吗? Map类型的request中内容会copy到HttpServletRequest对象当中去,因此在页面当中也可以使用 */ request = (Map)ActionContext.getContext().get("request");//与Stack Context中的request对应 session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication(); } public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } }
b.在页面当中访问Map类型的request,session,application
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> User Login Success! <br /> 使用OGNL表达式访问Map类型的request|使用原始的方式访问HttpServletRequest中的内容 <!--获取Stack Context中的request中的内容--> <s:property value="#request.r1"/>| <%=request.getAttribute("r1") %> <br /> <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br /> <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br /> <s:debug></s:debug><!--查看Value stack contents与Stack Context中的内容--> <br /> </body> </html>
第二种方式(最常用):使用DI(依赖注入)方式获得Map类型Request,session,application
package com.bjsxt.struts2.user.action; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; //需要实现 RequestAware,SessionAware, ApplicationAware接口 public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware { private Map<String, Object> request; private Map<String, Object> session; private Map<String, Object> application; //DI dependency injection //IoC inverse of control public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } @Override public void setApplication(Map<String, Object> application) { this.application = application; } }