struts2在Action中访问WEB资源
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接口
————我愿乘风破浪,踏遍黄沙海洋