(七)Struts2Action访问Servlet API
第一种方式:
Struts2提供了一个ServletActionContext对象可以访问ServletAPI。 例如 HttpServletRequest request=ServletActionContext.getRequest(); HttpServletResponse response=ServletActionContext.getResponse(); ServletContext context=ServletActionContext.getServletContext(); HttpSession session=request.getSession();
第二种方式,实现ServletContextAware,ServletRequestAware,ServletResponseAware三个接口
public class VcodeAction extends ActionSupport implements ServletContextAware,ServletRequestAware,ServletResponseAware { //定义三个参数 private HttpServletRequest request; private HttpServletResponse response; private ServletContext context; public String execute() throws Exception { return null; } //实现接口中设置参数的方法 @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; } } 执行流程是什么,谁调用了set方法? struts的内建拦截器有一个ServletConfig的拦截器。 它会先得到我们的动作类的引用, 然后通过instanceof方法判断我们动作类是否属于ServletContextAware,ServletRequestAware,ServletResponseAware类型 因为我们实现了这个接口,当然属于这个类型 然后获取request,response等 然后调用我们动作类实现的接口方法 setServletResponse,setServletRequest,setServletContext等为我们的request,response赋值。