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

    ————我愿乘风破浪,踏遍黄沙海洋
  • 相关阅读:
    将SqlServer的数据导出到Excel/csv中的各种方法 .
    SqlServer: 单用户模式下查杀相关进程实现单/多用户转换 .
    SQL Server游标的使用【转】
    由几行代码浅析C#的方法参数传递
    脑力风暴之小毛驴历险记(1)好多胡萝卜(下)
    关于sql_mode=only_full_group_by问题的解决方法
    如何同一个controller下添加新页面
    UNIAPP全局变量的实现方法
    Ztree点击节点选中复选框的相关操作
    一沙框架(yishaadmin) 前端引入VUE的实现方法
  • 原文地址:https://www.cnblogs.com/wb1993/p/5610633.html
Copyright © 2020-2023  润新知