在Struts2中,可以用以下两种方式来获取HttpServletResponse对象。
1. ServletActionContext
通过 ServletActionContext 类来访问 HttpServletResponse 。
package com.xuhuhu.common.action;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
public class LocaleAction{
//business logic
public String execute() {
HttpServletResponse response = ServletActionContext.getResponse();
return "SUCCESS";
}
}
2. ServletResponseAware
通过实现 ServletResponseAware 接口并覆盖 setServletResponse()方法来访问HttpServletResponse。
注意
当Struts2的“servlet-config”拦截器是看到一个Action类实现ServletResponseAware接口,它会通过一个HttpServletResponse的引用Action类通过setServletResponse()方法请求。
当Struts2的“servlet-config”拦截器是看到一个Action类实现ServletResponseAware接口,它会通过一个HttpServletResponse的引用Action类通过setServletResponse()方法请求。
当然,也可以创建自定义 getServletResponse()来获得 HttpServletResponse。
package com.xuhuhu.common.action;
import java.util.Locale;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
public class LocaleAction implements ServletResponseAware{
HttpServletResponse response;
//business logic
public String execute() {
Locale locale = getServletResponse().getLocale();
return "SUCCESS";
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getServletResponse() {
return this.response;
}
}
这两个机制都可以得到同样 HttpServletResponse 对象,但 Struts2 文档推荐使用 ServletResponseAware,请参见下面的参考资料:
