您的位置:首页 > 其它

分享servlet源码里面的一段

2010-04-27 18:33 375 查看
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类然后自己在构造方法应用构造注入模式的用法。望路过的大虾给指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: