(七)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赋值。

  

  

posted @ 2018-08-08 23:19  跃小云  阅读(218)  评论(0编辑  收藏  举报