struts2在Action中访问WEB资源

时间:2022-08-03 13:40:33

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接口