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", "赵雅芝");
相关文章
|
1月前
|
SQL Java 应用服务中间件
使用Servlet上传多张图片——访问提示
使用Servlet上传多张图片——访问提示
25 0
|
4天前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
|
16天前
|
机器学习/深度学习 数据采集 文字识别
印刷文字识别产品使用合集之需要对子用户加什么权限,才能通过API访问
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
13天前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之SD API模式可以通过什么方式进行访问
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
Java 关系型数据库 MySQL
Servlet 教程 之 Servlet 数据库访问 2
本教程讲解如何在Servlet中实现数据库访问。首先确保了解JDBC并配置MySQL驱动(如mysql-connector-java-5.1.39-bin.jar),在Eclipse Web项目中需将驱动放入Tomcat的lib目录。创建名为`websites`的数据库表,插入测试数据。之后展示了一个Servlet示例,该示例连接到数据库,执行SQL查询以获取`websites`表中的`id`、`name`和`url`,并将结果输出到HTML响应中。要运行Servlet,需在web.xml中配置并访问指定URL。
20 4
|
1月前
|
JSON 自然语言处理 Dart
私有化部署 Llama3 大模型, 支持 API 访问
通过 ollama 本地运行 Llama3 大模型其实对我们开发来说很有意义,你可以私有化放服务上了。 然后通过 api 访问,来处理我们的业务,比如翻译多语言、总结文章、提取关键字等等。 你也可以安装 enchanted 客户端去直接访问这个服务 api 使用。
531 0
私有化部署 Llama3 大模型, 支持 API 访问
|
1月前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
1月前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。
|
1月前
|
存储 分布式计算 API
adb spark的lakehouse api访问内表数据,还支持算子下推吗
【2月更文挑战第21天】adb spark的lakehouse api访问内表数据,还支持算子下推吗
114 2
|
1月前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API