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

————我愿乘风破浪,踏遍黄沙海洋
原文地址:https://www.cnblogs.com/wb1993/p/5610633.html