什么是web资源:web资源就是指requestresponsesessionservletapi

为什么需要访问web资源:因为图片上传,需要获取图片的目录,就需要通过action来访问web资源,向作用域读写数据。。。。。。等等

怎么访问web资源:

  servlet解耦的方式访问:有限的访问servletapi对象,有限的方法

    使用ActionContext去访问

    实现XXXAware这个接口

  servlet耦合的方式访问:可以访问更多(全部)的servlet的API

 

    使用ServletActionContext去访问

    实现ServletXXXAware这个接口

    

  1.解耦合和方式使用ActionContext获取web资源 

/**
     * 获取Application作用域
     * @return
     */
    public String execute(){
        //获取Action的上下文,就是action的一些运行信息,环境等等
        ActionContext actionContext=ActionContext.getContext();
        //得到封装过的application
        Map<String, Object> application=actionContext.getApplication();
        //把数据放到application的作用域
        application.put("name", "小白");
        return "success";
    }
    /**
     * 获取session作用域
     * @return
     */
    public String execute2(){
        //获取Action的上下文,就是action的一些运行信息,环境等等
        ActionContext actionContext=ActionContext.getContext();
        //得到封装过的session
        Map<String, Object> session=actionContext.getSession();
        //把数据放到session的作用域
        session.put("name2", "小白2");
        return "success";
    }
    /**
     * 获取Request作用域
     * @return
     */
    public String execute3(){
        //获取Action的上下文,就是action的一些运行信息,环境等等
        ActionContext actionContext=ActionContext.getContext();
        //得到封装过的request
        Map<String, Object> request=(Map<String, Object>) actionContext.get("request");
        //把数据放到request的作用域
        request.put("name3", "小白3");
        return "success";
    }

    /**
     * 获取请求参数(不推荐使用,Struts会封装)
     * @return
     */
    public String params(){
        //获取Action的上下文,就是action的一些运行信息,环境等等
        ActionContext actionContext=ActionContext.getContext();
        //获取请求参数,得到参数的对象
        Map<String, Object> params= actionContext.getParameters();
        String name=((String[])params.get("name"))[0];
        String sex=((String[])params.get("sex"))[0];
        System.out.println(name+":"+sex);
        return "success";
    }
    

  2.解耦合和方式使用XXXAware获取web资源

/**
 * 只要实现对应的ApplicationAware接口,或者SessionAware等就可以
 * @author Administrator
 *
 */
public class ApplicationDemo implements ApplicationAware{
    Map<String, Object> application;
    
    public String execute(){
        application.put("xx","xx");
        return "success";    
    }
    public void setApplication(Map<String, Object> application) {
        this.application=application;    
    }
}

  3.耦合和方式使用ActionContext获取web资源(其他的使用方式类似)

    public String execute(){
        //通过ServletActionContext可以获取需要的Servlet api相关的对象
        HttpServletRequest request=ServletActionContext.getRequest();
        String name =request.getParameter("name");
        request.setAttribute("name", "小白");
        HttpSession session= ServletActionContext.getRequest().getSession();
        session.setAttribute("name2", "小白2");
        return "success";
    }