Struts2获取HttpServletResponse实例
精华
小牛编辑
182浏览
2023-03-14
在Struts2中,可以用以下两种方式来获取HttpServletResponse对象。
1. ServletActionContext
通过 ServletActionContext 类来访问 HttpServletResponse 。
package com.yiibai.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.yiibai.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,请参见下面的参考资料:
参考
- http://struts.apache.org/2.x/docs/how-can-we-access-the-httpservletresponse.htmll
- http://struts.apache.org/2.1.2/struts2-core/apidocs/org/apache/struts2/interceptor/ServletResponseAware.htmll