转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html
我们知道,除了可以从值栈中获取信息,还可以从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") |