页面中的请求如何流转到后台程序,后台程序又是如何将数据转发给页面?
为了避免于Servlet API耦合在一起,方便Action做单元测试,Struts2对HttpServletRequest HttpSession ServletContext进行了封装,构造了三个Map
架构如下图所示:
页面请求
<a href="TestActionContext.action?name=actioncontext">Test ActionContext</a>
struts.xml
<action name="TestActionContext" class="com.atguigu.struts2.actioncontext.TestActionContext">
<result>/test-actionContext.jsp</result>
</action>TestActionContext
public String execute() {
ActionContext actionContext = ActionContext.getContext();
//1.获取application对应的Map,并向其添加一个属性
Map<String, Object> application = actionContext.getApplication();
application.put("applicationKey", "applicationValue");
//从页面中获取值
Object date = application.get("date");
System.out.println(date);
//2.session
Map<String, Object> session = actionContext.getSession();
session.put("sessionKey", "sessionValue");
//3.request
Map<String,Object> request = (Map<String,Object>) actionContext.get("request");
request.put("requestKey", "requestValue");
//4.获取请求参数对应的Map,并获取指定的参数值
Map<String, Parameter> parameters = actionContext.getParameters();
System.out.println(parameters);//{name=actioncontext}
System.out.println(parameters.get("name"));
return "success";
}页面jsp获取
<body>
application:${applicationScope.applicationKey}
<br>
session:${sessionScope.sessionKey}
<br>
request:${requestScope.requestKey}
<br><br><br>
application2:${applicationScope.applicationKey2}
<br>
session2:${sessionScope.sessionKey2}
<br>
request2:${requestScope.requestKey2}
</body>第二种方式:
类通过实现aware接口的方式
若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用接口的方式
public class TestAwareAction implements ApplicationAware,SessionAware,RequestAware {
public String execute() {
application.put("applicationKey2", "applicationValue2");
Object date = application.get("date");
System.out.println(date);
return "success";
}
private Map<String, Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setRequest(Map<String, Object> request) {
// TODO Auto-generated method stub
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
}
}
京公网安备 11010502036488号