08 Struts2 访问Servlet API

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710008 Struts2 提供了三种方式访问本地Servlet API 1.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710008

Struts2 提供了三种方式访问本地Servlet API
1. ActionContext【推荐、非耦合】
2. XxxAware接口【推荐、非耦合】
3. ServletActionContext【不推荐、耦合】

1. ActionContext

ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。

方法声明 方法描述
void put(String key,Object object) 将key-value键值对存放在ActionContext种。模拟Servlet API种HttpServletRequst种的setAttribute()方法。
Object get(String key) 通过key来查找当前ActionContext中的值
static ActionContext getContext() 获取当前线程的ActionContext对象
voide setSession(Map<String,Object> session) 设置一个Map类型的Session值
Map<String Object> getParamters() 返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String,Object> getSession() 返回一个Map类型类型的HttpSession对象
Map<String,Object> getApplication() 返回一个Application级的Map对象
void setApplication(Map<String,Object> application) 设置Applicaton上下文

ActionContext类访问Servlet API的常用方法,要访问Servlet API,可以通过如下方式进行,具体示例代码如下:

ActionContext context = ActionContext.getContext();
context.put("name", "张三");
context.getApplication().put("name", "李四");
context.getSession().put("name", "王五");

2. XxxAware 接口

XxxAware 接口获取的对象分两种,一种Servlet和非Servlet

2.1 非耦合Servlet

  • RequestAware 接口
  • SessionAware 接口
  • ApplicationAware 接口

实现RequestAware,SessionAware,ApplicationAware 三个接口需要重写下面三个方法:

setRequest(Map<String, Object> request)  
setSession(Map<String, Object> session)  
setApplication(Map<String, Object> application)  

这三个方法给我们注入了一个Map 集合,我们只需要把数据存储在对应Map集合中就可以了。

public class UserinfoAction implements RequestAware, SessionAware, ApplicationAware {

    Map<String, Object> application;
    Map<String, Object> session;
    Map<String, Object> request;

    public String userLogin() {
        request.put("awareRequest", "赵云");
        session.put("awareSession", "黄盖");
        application.put("awareApplaction", "周瑜");
        return "success";
    }

    @Override
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }
    @Override
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }
}
${requestScope.awareRequest }<hr/>
${sessionScope.awareSession }<hr/>
${applicationScope.awareApplaction }<hr/>

2.2 耦合方式访问Servlet

Struts2 虽然提供了 RequestAware,SessionAwareApplicationAware 接口来访问 Servlet API。虽然这种方法可以访问Servlet API,但是无法直接获得Servlet API实例。为了在Action中直接访问Servlet API,Struts2还提供了下面三个接口:
- ServletRequestAware:实现该接口的Action可以直接访问Web应用的HttpServletRequest实例。
- ServletResponseAware:实现该接口的Action可以直接访问Web应用的HttpServletResponse实例。
- SessionAware:实现该接口的Action可以直接访问Web应用的HttpSession实例。
- ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例。

public class UserinfoAction implements ServletRequestAware, ServletResponseAware, ServletContextAware, SessionAware {

    HttpServletRequest request;
    Map<String, Object> session;
    ServletContext context;
    HttpServletResponse response;

    public String userLogin() {

        request.setAttribute("servletResponseAware", "貂蝉");
        request.getSession().setAttribute("sessionKey", "吕布");

        session.put("sessionMap", "董卓");

        context.setAttribute("contextMap", "项羽");

        response.setCharacterEncoding("UTF-8");

        return "success";
    }
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
}

3. ServletActionContext

为了直接访问Servlet API,Struts2框架还提供了ServletActionContext类,该类包含了几个常用的静态方法,具体如下:

  • static HttpServletRequest getRequest():获取Web应用的HttpServletRequest对象
  • static HttpServletResponse getResponse():获取Web应用的HttpServletResponse对象
  • static ServletContext getServletContext():获取Web应用的ServletContext对象
  • static PageContext getPageContext():获取Web应用的PageContext对象

3.1 HttpServletRequest

HttpServletRequest request = ServletActionContext.getRequest();

3.2 HttpServletResponse

HttpServletResponse response = ServletActionContext.getResponse();

3.3 ServletContext

ServletContext context = ServletActionContext.getServletContext();

3.4 PageContext

PageContext pageContext = ServletActionContext.getPageContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
request.setAttribute("requesttKey","千年等一回")
session.setAttribute("userName", "赵雅芝");
相关文章
|
27天前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
29天前
|
API 开发者
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
|
28天前
|
Web App开发 缓存 小程序
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
|
23天前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之海外是否可以访问人物动漫化的api版本
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
34 0
|
27天前
|
存储 安全 API
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account
|
27天前
|
API C#
【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
|
27天前
|
API Python
【Azure API 管理】API Management 访问限制策略[quota-by-key] 中参数 [renewal-period] 的实验和理解
【Azure API 管理】API Management 访问限制策略[quota-by-key] 中参数 [renewal-period] 的实验和理解
|
27天前
|
API 开发者
【Azure API 管理】API Management service (APIM) 如何实现禁止外网访问
【Azure API 管理】API Management service (APIM) 如何实现禁止外网访问
|
27天前
|
安全 API
【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
|
28天前
|
API
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误