两段代码的关系是如下这样
代码一package javax.servlet.http;
import java.security.Principal;
import java.util.Enumeration;
import javax.servlet.ServletRequestWrapper;public class HttpServletRequestWrapper extends ServletRequestWrapper
  implements HttpServletRequest
{
  public HttpServletRequestWrapper(HttpServletRequest request)
  {
    super(request);
  }  private HttpServletRequest _getHttpServletRequest() {
    return ((HttpServletRequest)super.getRequest());
  }  public String getAuthType()
  {
    return _getHttpServletRequest().getAuthType();
  }
}代码二package javax.servlet;import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;public class ServletRequestWrapper
  implements ServletRequest
{
  private ServletRequest request;  public ServletRequestWrapper(ServletRequest request)
  {
    if (request == null)
      throw new IllegalArgumentException("Request cannot be null");    this.request = request;
  }  public ServletRequest getRequest()
  {
    return this.request;
  }  public void setRequest(ServletRequest request)
  {
    if (request == null)
      throw new IllegalArgumentException("Request cannot be null");    this.request = request;
  }
}问题:两段代码的构造关系是什么逻辑啊????我的理解是HttpServletRequestWrapper从ServletRequestWrapper继承,构造方法中传递一个自身对象还是实现了ServletRequestWrapper对象啊?ServletRequestWrapper类中的构造方法又传递的是自身对象还是HttpServletRequestWrapper对象(后者实现了ServletRequest接口,前者又实现了后者)呢?你实现我我实现你,你传我我传你,那不成了无限传递吗?特别是标红色那段......牛人来啊~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    对了,两段代码都是J2EEAPI中的原代码!
      

  2.   

    HttpServletRequestWrapper 构造方法传进来一个 HttpServletRequest 对象,自己没做什么事,又传给父类了。
    父类是ServletRequestWrapper 得到HttpServletRequest 就创建了一个实例引用用来引用到这个对象。
    没什么复杂的啊,他们都实现了ServletRequest接口,是因为他们自己本身就是ServletRequest的一个包装类嘛,这里用的应该是代理模式。
      

  3.   

    HttpServletRequestWrapper是构造方法传递的是HttpServletRequest的对象,谁调用HttpServletRequestWrapper的构造方法,谁就要传递HttpServletRequest的对象给他,ServletRequestWrapper的构造方法传递的是ServletRequest的对象,谁调用它谁就在传给他, 
    至于this.request = request; 这句是把传进来的变量变成类的成员变量,好供其他方法调用
      

  4.   

    HttpServletRequestWrapper是构造方法传递的是HttpServletRequest的对象,谁调用HttpServletRequestWrapper的构造方法,谁就要传递HttpServletRequest的对象给他,ServletRequestWrapper的构造方法传递的是ServletRequest的对象,谁调用它谁就在传给他, 
    至于this.request = request; 这句是把传进来的变量变成类的成员变量,好供其他方法调用