struts2在Action中访问WEB资源有两种方式:
这两种方式都是通过获得WEB资源对应的Map对象来实现对WEB资源操作的,在一个Action类中如果多个方法需要调用WEB资源,建议使用实现XxxAware接口的方式
一.与ServletApi解耦的方式:只能访问有限的ServletAPI的方法
1.使用ActionContext
package com.TestActionContext;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
public class AcctionContext {
public String execute(){
//获取AcctionContext对象
ActionContext actioncontext=ActionContext.getContext();
//1.获取Application对应的Map
Map<String,Object> map=actioncontext.getApplication();
map.put("Key", "ApplicationValue");
//2.获取session对应的Map
Map<String,Object> sessionmap=actioncontext.getSession();
sessionmap.put("Key", "SessionValue");
//3.获取request对应的Map
//ActionContext中没有直接提供获取request对应map的方法,而是需要用get()方法传入参数获取对应的Map对象
Map<String,Object> requestmap=(Map<String, Object>) actioncontext.get("request");
requestmap.put("key", "RequestValue");
//4.获取parameters对应的map对象
//注意: 1.getParameters的返回值是Map<String,Object>而不是Map<String,String[]>
// 2.Parameters的这个Map只能读不能写,如果写入不出错,也不起作用
Map<String,Object> parammap=actioncontext.getParameters();
System.out.println(((String[])parammap.get("name"))[0]);
return "success";
}
}
2.实现XxxAware接口
package com.TestAware;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
/**
* 通过调用Aware接口的方法来获取相应的Map对象
* @author Administrator
*
*/
public class TestAware implements ApplicationAware,SessionAware,RequestAware,ParameterAware{
private Map<String,Object> application;
private Map<String,Object> request;
private Map<String,String[]> parameter;
private String name;
public String execute(){
System.out.println("request:"+request.get("names"));
String []str=parameter.get("name");
System.out.println(str[0]);
System.out.println(getName());
application.put("ApplicationKey", "ApplicationValue");
return "success";
}
@Override
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
@Override
public void setApplication(Map<String, Object> arg0) {
this.application=arg0;
}
@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameter=parameters;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request=request;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
二.与ServletApi耦合的方式:可以访问更多的ServletAPI的方法
1.使用ServletActionContext
2.实现ServletXxxAware接口