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");
// ...
}
}
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";
}
}
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>
现在,当客户端发起跨域请求时,服务器会正确处理并返回相应的响应。