在 Java Action 中获取到 HttpServletResponse 对象可以通过以下几种方式实现。

方式一:通过 ActionContext 获取 HttpServletResponse 对象

ActionContext 是 Struts2 提供的用于存储请求和响应相关信息的上下文对象。我们可以使用 ActionContext 对象来获取 HttpServletRequest 和 HttpServletResponse 对象。

import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class MyAction extends ActionSupport {
    public String execute() {
        ActionContext context = ActionContext.getContext();
        HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);
        
        // 使用获取到的 response 对象进行操作
        response.setStatus(HttpServletResponse.SC_OK);
        
        return SUCCESS;
    }
}

在上面的代码中,我们首先通过 ActionContext.getContext() 方法获取到 ActionContext 对象,然后通过 get() 方法获取到 HttpServletResponse 对象。需要注意的是,在获取 HttpServletResponse 对象时,我们需要使用com.opensymphony.xwork2.ServletActionContext.HTTP_RESPONSE作为 key。

方式二:通过实现 ServletResponseAware 接口获取 HttpServletResponse 对象

在 Struts2 中,我们可以让 Action 类实现 ServletResponseAware 接口,这个接口包含了一个 setServletResponse() 方法,通过该方法可以获取到 HttpServletResponse 对象。

import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletResponseAware;

public class MyAction extends ActionSupport implements ServletResponseAware {
    private HttpServletResponse response;
    
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    
    public String execute() {
        // 使用获取到的 response 对象进行操作
        response.setStatus(HttpServletResponse.SC_OK);
        
        return SUCCESS;
    }
}

在上面的代码中,我们首先实现了 ServletResponseAware 接口,并重写了 setServletResponse() 方法,该方法会在 Struts2 框架中自动调用,通过该方法我们可以将 HttpServletResponse 对象保存到成员变量中,从而在 execute() 方法中使用。

方式三:通过使用 Struts2 的 HTTP 过滤器获取 HttpServletResponse 对象

Struts2 提供了一个名为 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 的 HTTP 过滤器,该过滤器会在请求进入 Struts2 框架之前进行处理。我们可以通过该过滤器间接获取 HttpServletResponse 对象。

import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionSupport;

public class MyAction extends ActionSupport {
    public String execute() {
        HttpServletResponse response = ServletActionContext.getResponse();
        
        // 使用获取到的 response 对象进行操作
        response.setStatus(HttpServletResponse.SC_OK);
        
        return SUCCESS;
    }
}

在上面的代码中,我们使用了 ServletActionContext.getResponse() 方法来获取 HttpServletResponse 对象。需要注意的是,为了能够正确地获取到 HttpServletResponse 对象,我们需要保证该代码在 StrutsPrepareAndExecuteFilter 过滤器处理请求之后执行。

综上所述,以上是获取到 HttpServletResponse 对象的几种方式。我们可以根据具体的需求选择合适的方式来获取 HttpServletResponse 对象,并在 Action 中进行操作。