我们知道,除了可以从值栈中获取信息,还可以从Stack Context中获取信息,只是要加上#,下面我们通过scope对象来演示。首先是在LoginAction中增加如下字段:

Map myRequest;

Map mySession;

随后再用前面提到的“在Action中获取Scope对象”的方式二来完成这些对象的初始化。即实现RequestAware和SessionAware接口。然后再在execute方法中增加如下内容:

myRequest.put("req", "Req属性");

mySession.put("ses", "Ses属性");

最后在loginSuc.jsp中增加如下代码:

获取Request属性:<s:property value="#request.req"/><br>

获取Session属性:<s:property value="#session.ses"/><br>

获取parameters属性:<s:property value="#parameters.mes"/>

说明:我们获取这些对象都用了#,因为这些对象都是存在一般的Context Map中,而不是存在值栈中。别最后一个信息的获取是因为我们在login.jsp中增加了如下代码:

<input type="hidden"name="mes" value="the message is transfer by hidden">

关于这些scope的更多信息可以参看下表:

 


名称



作用



例子



parameters



包含当前HTTP请求参数的Map



#parameters.id[0]作用相当于request.getParameter("id")



request



包含当前HttpServletRequest的属性(attribute)的Map



#request.userName相当于request.getAttribute("userName")



session



包含当前HttpSession的属性(attribute)的Map



#session.userName相当于session.getAttribute("userName")



application



包含当前应用的ServletContext的属性(attribute)的Map



#application.userName相当于application.getAttribute("userName")



Attr



用于按request > session > application顺序访问其属性



#application.userName相当于application.getAttribute("userName")