Struts2 总结

前言:此总结是观看佟刚老师的Struts2 视频总结的,之前看过另一老师将的视频,有点模糊,然后网上查了一下,很多人说这个视频同好的,然后自己去看,的确很好 视频链接

关于获得 Web 资源

以下是应该注意的地方 :

 1. 所谓 WEB 资源是指,request,session,application,paraeters( 可以获得请求参数 )
 2. ActionContext 是 Action 的上下文,可以获的 Action 的一切所需要的信息
3.获取web资源有以下两种 :
    1. 由 ActionContext 获得
    2. 实现 XxxAware 接口

一. 获得与 Servlet 无关的Web 资源

I. 由 ActionContext 获得
public class TestActionContext {
    /**
        1.  ActionContext 是 Action的上下文,可以得到一切Action需要的信息
        2.  这个类TestActionContext 不用继承,或者是实现其他类
        3.  需要注意的是,这里的得到requestMap,sessionMap,applicationMap 和并不是HttpServletRequest,HttpSession... 但是 这些map封装的是request,session,application..域对象里面的键和值(.attribute(key,value) )
        4. 注意 parametersMap 这个比较特殊,因为Servlet 里面并没有这个相对应的对象,这个map表示请求参数的键值对 uri?age=100, key=age,valeu=100
        5. 
    */

    public String execute(){
        // ActionContext 是 Action的上下文,可以得到一切Action需要的信息
        ActionContext actionContext = ActionContext.getContext();   // 得到
        // 获得application 对应的 map
        Map<String,Object> applicationMap = actionContext.getApplication();
        applicationMap.put("applicationKey", "applicationValue");

        // 得到session 对应的 map
        Map<String,Object> sessionMap = actionContext.getSession(); 
        sessionMap.put("sessionKey", "sessionValue");
        // 获得 request对象的方法比较特殊,需要由 Action 的上下文调用方法获得,注意此时所有的 request,session ,application 都不是 Servlet里面的
        Map<String,Object> requestMap = (Map<String, Object>) actionContext.get("request");
        requestMap.put("requestKey", "requestValue");
        /**
         * actionContext.getParameters() 放回的是 Map<String,Object> 但实际上,Object 就是 String[]数组
         * 1. parameters 对象写入的数据,读不出,所以仅用于读键的值
         * 2. 注意其输出的时需要强转为 String[],然后按下标进行读取,
         * 3. 值为 Strig[] 数组的原因是,一个 key 可以对应多个值
         */
        Map<String ,Object> parameters = actionContext.getParameters();     // 得到请求参数的 map
        /**
         *  当访问 :  http://localhost:8089/Struts02/testActionContext.action?age=100
         *  request - > null
         *  parameters -> 100 
         *  // 这里表名 parameters 表示对参数的读取操作 
         */
        System.out.println("request : "+requestMap.get("name")); // 验证其输出的值,是否与 parameters 输出的相同 !! 验证表名不一致
        System.out.println("parameters : "+((String[])parameters.get("age"))[0]    );   // 通过请求参数读出键 
        return "success";
    }

}

II. 继承相对于的 XxxAware 接口
public class TestApplicationAware02 implements ApplicationAware,SessionAware,RequestAware,ParameterAware{// 可以同时 implements SessionAware,RequestAware,当一个类

    /**
     *  1. 会自动赋值,由框架内部调用函数进行操作 
     *  2. 所以可以在 execute 里面直接进行上面的操作
     */

    private Map<String,Object> applicationMap;
    private Map<String,Object> sessionMap;
    private Map<String,Object> requestMap;
    private Map<String, String[]> parameters; 

    public String execute(){

        return "success";
    }

    public void setApplication(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        applicationMap = arg0;
    }

    public void setSession(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
        sessionMap = arg0;
    }

    public void setRequest(Map<String, Object> arg0) {
        requestMap = arg0;
    }

    public void setParameters(Map<String, String[]> arg0) {

        parameters = arg0;
    }
}

二. 获得与 Servlet 相关的Web 资源

I. 利用 ServletActionContext 上下文获得

public class TesstHttpServlet {

    public String execute(){

        /**
         *  1. 由 ServletActionContext 可以得到与 Servlet相关的所有对象
         *  2, 可以得到 Servlet 的上下文
         */
        ServletContext servletContext = ServletActionContext.getServletContext();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session        = ServletActionContext.getRequest().getSession();
        HttpServletResponse response = ServletActionContext.getResponse(); 

        System.out.println(request);    
        System.out.println(session);
        System.out.println(response);

        return "success";
    }
}

II. 实现 XxxAware 接口

public class TestServlet02 implements ServletContextAware,ServletRequestAware,ServletResponseAware {

    /*
     * 通过实现 ServletXxxAware 为 Struts2 为其注入需要的 Servlet 相关的对象
     * ServletContextAware 注入 ServletContext  
     * ServletRequestAware 注入 ServleHttpServletRequest
     * ServletResponseAware 注入 ServletHttpServletResponse
     */

    private ServletContext servletContext;
    private HttpServletRequest req;
    private HttpServletResponse resp; 



    public String execute(){

        /**
         *  实现了 类的 aware 接口都能自动为其赋值
         */
        System.out.println(req);
        System.out.println(resp);
        System.out.println(servletContext);

        return "success";
    }

    public void setServletContext(ServletContext servletContext) {
        // TODO Auto-generated method stub
        this.servletContext = servletContext;

    }

    public void setServletRequest(HttpServletRequest req) {
        // TODO Auto-generated method stub
        this.req = req;
    }

    public void setServletResponse(HttpServletResponse resp) {
        // TODO Auto-generated method stub
        this.resp = resp;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值