码迷,mamicode.com
首页 > Windows程序 > 详细

struts2框架学习笔记3:获取servletAPI

时间:2018-02-21 12:50:26      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:cep   servlet   ssi   cal   let   ram   scope   set   except   

Struts2存在一个对象ActionContext(本质是Map),可以获得原生的request,response,ServletContext

还可以获得四大域对象(Map),以及param参数(Map)等等

ActionContext生命周期:每次请求都会创建一个与请求对应的ActionContext对象

绑定当前线程(ThreadLocal),直接从ThreadLocal中获得即可

请求处理完后,ActionContext对象销毁

 

第一种获得方式:

    public String execute() throws Exception {
        //request域=> map (struts2并不推荐使用原生request域)
        //不推荐
        Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
        //推荐
        ActionContext.getContext().put("name", "requestTom");
        //session域 => map
        Map<String, Object> sessionScope = ActionContext.getContext().getSession();
        sessionScope.put("name", "sessionTom");
        //application域=>map
        Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
        applicationScope.put("name", "applicationTom");
        
        return SUCCESS;
    }

注意:直接调用put方法在jsp中取值时候直接取即可${name},其他的(例如session):${sessionScope.name}

 

第二种获取方式(不推荐):

    //不推荐
    public String execute() throws Exception {
        //原生request
        HttpServletRequest request = ServletActionContext.getRequest();
        //原生session
        HttpSession session = request.getSession();
        //原生response
        HttpServletResponse response = ServletActionContext.getResponse();
        //原生servletContext
        ServletContext servletContext = ServletActionContext.getServletContext();
        return SUCCESS;
    }

看过源码发现,这里还是调用了ActionContext中的方法

不推荐的原因:Struts2创造的目的就是避免原生的servlet

 

第三种:

实现接口

package api;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

//如何在action中获得原生ServletAPI
public class Demo extends ActionSupport implements ServletRequestAware {
    
    
    private HttpServletRequest request;

    public String execute() throws Exception { 
        
        System.out.println("原生request:"+request);
        return SUCCESS;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    
}

response等等都是实现相应的接口即可

原理:servletConfig拦截器的intercept方法中获取了原生的servletAPI,本质上还是调用了ActionContext中的方法

 

实际开发中,常用的其实是第一种方式

struts2框架学习笔记3:获取servletAPI

标签:cep   servlet   ssi   cal   let   ram   scope   set   except   

原文地址:https://www.cnblogs.com/xuyiqing/p/8456434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!