阅读量:0
ActionContext
是 Struts2 框架中的一个核心组件,它封装了与当前请求相关的所有信息。在处理跨域请求时,可以使用 ActionContext
来设置和获取请求的头部信息、参数等。
以下是一个简单的示例,说明如何使用 ActionContext
处理跨域请求:
首先,确保你的项目中已经引入了 Struts2 相关的依赖。
在你的 Struts2 动作类中,获取
ActionContext
实例:
import com.opensymphony.xwork2.ActionContext; public class MyAction { public String execute() { // 获取 ActionContext 实例 ActionContext actionContext = ActionContext.getContext(); // ... } }
- 设置跨域请求的头部信息。例如,设置
Access-Control-Allow-Origin
:
import javax.servlet.http.HttpServletResponse; public class MyAction { public String execute() { // 获取 ActionContext 实例 ActionContext actionContext = ActionContext.getContext(); // 获取 HttpServletResponse 对象 HttpServletResponse response = (HttpServletResponse) actionContext.get("request").getResponse(); // 设置跨域请求的头部信息 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); // ... } }
- 如果需要处理预检请求(OPTIONS 请求),可以在动作类中添加一个处理预检请求的方法:
public class MyAction { public String execute() { // ... } public String options() { // 获取 ActionContext 实例 ActionContext actionContext = ActionContext.getContext(); // 获取 HttpServletResponse 对象 HttpServletResponse response = (HttpServletResponse) actionContext.get("request").getResponse(); // 设置跨域请求的头部信息 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); // 返回成功响应 return "success"; } }
- 配置 Struts2 动作映射,将预检请求映射到
options
方法:
<struts> <package name="default" extends="struts-default"> <action name="myAction" class="com.example.MyAction"> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/success.jsp</result> <result name="input">/input.jsp</result> <param name="method">options</param> </action> </package> </struts>
现在,当客户端发起跨域请求时,服务器会正确处理并返回相应的响应。