Action访问Servlet API

Posted 跃小云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Action访问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赋值。

  

  

以上是关于Action访问Servlet API的主要内容,如果未能解决你的问题,请参考以下文章

Action访问Servlet API的三种方法

Struts2笔记--Action访问Servlet API

action访问servlet的API并且获取到MAP类型的application,session,request

struts2 servlet api 访问方式

Struts2系列:与Servlet API解耦(Servlet相关对象访问)

Struts2 与Servlet API解耦,耦合的访问方式