分享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类然后自己在构造方法应用构造注入模式的用法。望路过的大虾给指点。
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类然后自己在构造方法应用构造注入模式的用法。望路过的大虾给指点。
相关文章推荐
- 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
- 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
- CodeForge源码分享
- 分享45个android实例源码
- 微信公众号(一键互粉)增粉平台的源码分享
- 我的Android笔记(十二)——分享一个自己写的cnBeta客户端源码
- 【分享】仿东软OA协同办公服务管理源码
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- Spring源码中的一段设计
- 我爱分享----百万商业圈C语言实现的倒排索引算法(含全部源码)
- 爱心树表白动画源码——免费分享
- 如何移植Android源码里面的东西到NDK
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享
- 分享编译Android源码的全过程
- 分享45个android实例源码,很好很强大
- SpringMVC DispatcherServlet执行流程及源码分析
- [源码分享]驱动级带界面AntiArp防火墙源代码
- 语音分享应用源码项目
- Servlet基本结构的源码解析
- SharePoint 2007 采用表单验证 一段源码