Stust2的Servlet的API

在Struts2框架中,虽然Action与Servlet API默认未解耦合,但可以通过ActionContext、ServletActionContext静态方法或接口注入来访问Servlet对象,如Session、Request和Application。ActionContext提供对Servlet对象Map值的访问,ServletActionContext则提供HttpServletRequest、HttpServletResponse、ServletContext和PageContext的静态获取方法,而接口注入允许将Servlet实例注入到Action中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Struts2中,Action并没有直接和ServletAPI进行解耦合,不能传递参数,也就是说在Strusts2下是不能直接访问Servlet的API的。但是我们在实际的实现业务逻辑时,要经常访问Servlet对象,如Session,request和application
在Seruts2中,访问Servlet API 有三种方法

通过ActionContext类访问 — 完全解耦合方式

actionContext类访问Servlet API 执行所需要的所有对象,包括parameters,request,session。application

方法声明功能描述
void put(String key,Object value)将key-value 键值对放入ActionContext 中,模拟Servlet API 中的HttpServlet Request的setAttribute()方法
Object get(String key )通过参数key来查找当前ActionContext中的值
Map<String , Object >返回一个application 级的Map对象
static ActionContext getContext()获取当前线程的ActionContext对象
Map<String,Object> getParameters()返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String,Object> getSession()返回一个Map类型的HttpSession对象
void setApplication(Map<String,Object> application)设置Application
void setSession (Map<String,Object> session )设置一个Map类型的Session值

如何使用举例

//接收数据
Action context = ActionContext.getContext();
Map<String ,Object> map = context.getParameters();

//数据插入
ActionContext context = ActionContext.getContext();
context.put("name","java");//request对象的setAttribute()方法
context.getApplication().put("name","java");//Application对象
context.getSession().put("name","java");//

注意通过ActionContext拿到的不是该对象而是对象的Map值 所以对象的方法都是Map的方法

使用Servlet的API的原生方式

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

  • static HttpServletRequest.getRequest() : 获得Web应用的HttpServletRequest对象
  • static HttpServletResponse():获得Web应用的HttpServletResponse对象
  • static ServletContext getServletContext():获得web应用的ServletContext对象
  • static PageContext getPageContext():获得Web应用的PageContext对象

实例

//获取数据
HttpServletRequest request =  ServletActionContext.getRequest();
Map<String,String[]> map = request.getParameterMap();
//保存数据
request.setAttribute("name","value");
request.getSession.setAttribute("name","value");
ServletActionContext.getServletContext().setAttribute("name","value");
通过接口注入的方式

在这里插入图片描述

  • Servlet 是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例。Action是多例的,一次请求,创建一个Action的实例(不会出现线程安全的问题)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值