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", "赵雅芝");
相关文章
|
29天前
|
SQL Java 应用服务中间件
使用Servlet上传多张图片——访问提示
使用Servlet上传多张图片——访问提示
10 0
|
3月前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
87 1
|
6月前
|
API
05JavaWeb基础 - Servlet的相关API
05JavaWeb基础 - Servlet的相关API
19 0
|
6月前
|
安全 Java API
解决 Swagger API 未授权访问漏洞:完善分析与解决方案
Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 Swagger API 未授权访问漏洞问题。
|
1月前
|
存储 分布式计算 API
adb spark的lakehouse api访问内表数据,还支持算子下推吗
【2月更文挑战第21天】adb spark的lakehouse api访问内表数据,还支持算子下推吗
107 2
|
1月前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API
|
3月前
|
JSON Java 应用服务中间件
|
3月前
|
安全 API 网络安全
Github不再支持基于密码的API访问
Github不再支持基于密码的API访问
41 0
|
4月前
|
Kubernetes API 网络架构
k8s学习-CKS真题-启用API Server认证,禁止匿名访问
k8s学习-CKS真题-启用API Server认证,禁止匿名访问
65 0
|
4月前
|
API Windows
解决echarts.apache.org官网不能访问的问题(主要是用于查看配置项API参数细节说明)
解决echarts.apache.org官网不能访问的问题(主要是用于查看配置项API参数细节说明)