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", "赵雅芝");
相关文章
|
21天前
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
48 1
|
22天前
|
API
如何申请微店的API访问权限?
申请微店API访问权限需先注册账号并完成实名认证,随后提交开发申请,学习API接口,实现功能和数据传输,申请授权获取API Key,测试接口,最后正式上线并持续维护优化。
|
1月前
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{&quot;code&quot;:200,&quot;ip&quot;:&quot;175.154.88.178&quot;,&quot;browser&quot;:&quot;Chrome&quot;,&quot;os&quot;:&quot;Windows 10&quot;}。详情见官网文档。
|
2月前
|
编解码 中间件 API
API实现跨平台访问的方式
【10月更文挑战第16天】API实现跨平台访问的方式
53 2
|
2月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
241 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
3月前
|
API iOS开发 开发者
Snapchat API 访问:Objective-C 实现示例
Snapchat API 访问:Objective-C 实现示例
|
3月前
|
SQL 安全 Java
探索研究Servlet 数据库访问
【9月更文挑战第28天】
36 0
|
4月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之海外是否可以访问人物动漫化的api版本
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
55 0
|
4月前
|
存储 安全 API
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account
【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account
|
4月前
|
API C#
【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求
【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求