java api servlet_访问ServletAPI方式

[TOC]

# 原理

![](https://box.kancloud.cn/fd7cf72c34136698a84a6f5c70ef149e_1468x662.png)

Struts2框架在运行时,请求会被StrutsPrepareAndExecuteFilter拦截,会根据请求,去strtus.xml文件中查找到匹配的action,在action执行前,会走一些interceptor

默认执行的拦截器是struts-default.xml文件中定义的。

在默认执行的拦截器中有一个

![](https://box.kancloud.cn/0dd38403df9c8d514fedb1fe59350106_1746x150.png)

查看一下ServletConfigInterceptor源代码

以下是部分源代码

![](https://box.kancloud.cn/c9b15fb29b979517e52e5cac272d0317_1714x542.png)

ServletRequestAware, 实现这个接口可以获取HttpServletRequest

ServletResponseAware ,实现这个接口可以获取HttpServletResponse

ServletContextAware 实现这个接口可以获取ServletContext

# 通过ActionContext

推荐

~~~

// request域 => map (struts2并不推荐使用原生request域)

// 不推荐

//import java.util.Map;

Map requestScope = (Map) ActionContext.getContext().get("request");

// 推荐

ActionContext.getContext().put("name", "requestTom");

// session域 => map

Map sessionScope = ActionContext.getContext().getSession();

sessionScope.put("name", "sessionTom");

// application域=>map

Map applicationScope = ActionContext.getContext().getApplication();

applicationScope.put("name", "applicationTom");

System.out.println(ActionContext.getContext().get("name"));

System.out.println(sessionScope.get("name"));

System.out.println(applicationScope.get("name"));

~~~

# 通过ServletContext

不推荐

~~~

// import javax.servlet.ServletContext;

// import javax.servlet.http.HttpServletRequest;

// import javax.servlet.http.HttpServletResponse;

// import javax.servlet.http.HttpSession;

// 不推荐

// 原生request

HttpServletRequest request = ServletActionContext.getRequest();

// 原生session

HttpSession session = request.getSession();

// 原生response

HttpServletResponse response = ServletActionContext.getResponse();

// 原生ServletContext

ServletContext servletContext = ServletActionContext.getServletContext();

~~~

# 通过实现接口方式

想要什么就实现什么接口,ServletXXXXXAware

~~~

package domain;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

public class HelloAction implements ServletRequestAware {

private HttpServletRequest request;

public String hello() {

System.out.println("原生request: " + request);

return "success";

}

@Override

public void setServletRequest(HttpServletRequest arg0) {

// TODO Auto-generated method stub

this.request = arg0;

}

}

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值