分享servlet源码里面的一段

servlet里面的一段代码:

 

public class HttpServlet extends GenericServlet implements Serializable{

  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String method = req.getMethod();
    if(method.equals("GET")) {
        long lastModified = getLastModified(req);
        if(lastModified == -1L) {
            doGet(req, resp);
        } else {
            long ifModifiedSince = req.getDateHeader("If-Modified-Since");
            if(ifModifiedSince < (lastModified / 1000L) * 1000L) {
                maybeSetLastModified(resp, lastModified);
                doGet(req, resp);
            } else {
                resp.setStatus(304);
            }
        }
    }
   
}


public interface HttpServletRequest extends ServletRequest {

    public abstract String getMethod();
   
}


public class HttpServletRequestWrapper extends ServletRequestWrapper
    implements HttpServletRequest{
   
  public String getMethod() {
    return _getHttpServletRequest().getMethod();
  }
 
  private HttpServletRequest _getHttpServletRequest() {
    return (HttpServletRequest)super.getRequest();
  }
 
}


public class ServletRequestWrapper implements ServletRequest {

    public ServletRequestWrapper(ServletRequest request) {
        if(request == null) {
            throw new IllegalArgumentException("Request cannot be null");
        } else {
            this.request = request;
            return;
        }
    }

    public ServletRequest getRequest() {
        return request;
    }

    public void setRequest(ServletRequest request) {
        if(request == null) {
            throw new IllegalArgumentException("Request cannot be null");
        } else {
            this.request = request;
            return;
        }
    }

}

 

今天深究下servlet的底层代码,发现HttpServlet类里面的service(...)会调用HttpServletRequest类里面的getMethod()

但找到底发现getMethod()的实现在HttpServletRequestWrappe类里面的_getHttpServletRequest()里面,由此我来到

ServletRequestWrappe类,仔细观看上面的三个方法,却不明白ServletRequest这个对象怎么来。

从来没有见过自己实现ServletRequest类然后自己在构造方法应用构造注入模式的用法。望路过的大虾给指点。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值