从ServletRequest出发

       接口javax.servlet.ServletRequest声明了相当多的方法。其中值得关注的方法有:

            一对set/getAttribute方法以及removeAttribute

            getContentType方法

            getParameter方法

            getRequestDipatcher方法

            getServletContext方法

        子接口HttpServletRequest额外新声明了很多方法,其中值得关注的方法有:

            getCookies方法

            getHeader方法

            getQueryString方法

            getSession方法

            getPart方法

        和ServletConfig一样,HttpServletRequest及ServletRequest的实现类是由Servlet容器自己决定生成。但是为了便于其他另外的框架改写(Http)ServletRequest实现类,又提供了对应的包装类:(Http)ServletRequestWrapper。

        ServletRequestWrapper实例域有一成员变量,类型为ServletRequest。它仅有一个构造函数。

从ServletRequest出发_第1张图片
成员变量持有容器生成的ServletRequest实现类

        ServletRequestWrapper也实现接口ServletRequest,但它的实现方法内部均是通过内部持有的servletRequest调用。如:

实际上仍是通过Servlet容器生成的ServletRequest实现类

        ServletRequestWrapper真正意义在于其他任何框架都可以通过它再包装,从而与任何Servlet容器解耦。当然,其他框架也可以仿照ServletRequestWrapper,自己提供一个包装类实现ServletRequest接口,而不是继承ServletRequestWrapper,但是继承ServletRequestWrapper的好处在于ServletRequestWrapper是一个实现类,框架开发者只需重写自己感兴趣的方法。尽管这里讨论的是ServletRequest,但HttpServletRequest也是如此。

你可能感兴趣的:(从ServletRequest出发)