通过和 ServletAPI 耦合的方式获取 WEB 资源
直接访问 Servlet API 将使 Action 与 Servlet 环境耦合在一起, 测试时需要有 Servlet 容器, 不便于对 Action 的单元测试,但是可以访问一些原生的ServletApi.
- 直接获取 HttpServletRequest 对象:
- ServletActionContext.getRequest()
- 直接获取 HttpSession 对象
- ServletActionContext.getRequest().getSession()
- 直接获取 ServletContext 对象
- ServletActionContext.getServletContext()
- 通过实现 ServletRequestAware, ServletContextAware 等接口的方式
1.通过ServletActionContext来获取
public String test() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = ServletActionContext.getRequest().getSession();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext context = ServletActionContext.getServletContext();
return "success";
}
2.通过实现ServletXXXAware接口,通过注入来获取
package com.qbz.struts2_03_03;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
public class ServletXXXAwareTest implements ServletContextAware,ServletRequestAware,ServletResponseAware{
private HttpServletRequest request ;
private HttpSession session = request.getSession();
private HttpServletResponse response ;
private ServletContext context ;
public String test(){
return "success";
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}