Stust2的Servlet的API

在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的实例(不会出现线程安全的问题)。

猜你喜欢

转载自blog.csdn.net/qq_40435621/article/details/88376833
今日推荐