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类然后自己在构造方法应用构造注入模式的用法。望路过的大虾给指点。