两段代码的关系是如下这样
代码一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接口,前者又实现了后者)呢?你实现我我实现你,你传我我传你,那不成了无限传递吗?特别是标红色那段......牛人来啊~~~~~~~~~~~~~~~~~
代码一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接口,前者又实现了后者)呢?你实现我我实现你,你传我我传你,那不成了无限传递吗?特别是标红色那段......牛人来啊~~~~~~~~~~~~~~~~~
父类是ServletRequestWrapper 得到HttpServletRequest 就创建了一个实例引用用来引用到这个对象。
没什么复杂的啊,他们都实现了ServletRequest接口,是因为他们自己本身就是ServletRequest的一个包装类嘛,这里用的应该是代理模式。
至于this.request = request; 这句是把传进来的变量变成类的成员变量,好供其他方法调用
至于this.request = request; 这句是把传进来的变量变成类的成员变量,好供其他方法调用