1.依赖容器
主动的从容器中获取web元素。
1.创建map类型的属性。
2.调用ActionContxt.getContext()方法。
创建的字段是map类型。所以用put方法将值加入到相应的web元素中。
public class LoginAction1 extends ActionSupport{
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
public LoginAction1(){
request = (Map) ActionContext.getContext().get("request");
session = (Map) ActionContext.getContext().getSession();
application = (Map) ActionContext.getContext().getApplication();
}
@Override
public String execute() throws Exception {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
将web元素中的值获取出来。使用Struts2标签库中的<s:property value="#request.r1"/>,可以用井号来获取web元素中的值,即获取
Stack Context中的request属性中的键为r1所对应的值r1。
也可以使用request.getAttribute(“r1”)方法来获取当初设置的值。
<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/>
2.IoC(控制反转)
1.实现RequestAware,SessionAware,ApplicationAware接口。
2.重写其中的方法.
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
//ToC 控制反转
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
@Override
public String execute() throws Exception {
request.put("r1", "r2");
session.put("s1", "s2");
application.put("a1", "a2");
return SUCCESS;
}
IoC实现过程简述
context把request,session,application对象注给我们。我们不用主动去获取,所以叫做控制反转。
当Struts2创建Action对象时,发现Action已经实现了RequestAware接口,
Struts2会自己把request对象打包成map类型传给我们。