本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.HttpServlet介绍(具体方法可参考:java WEB学习笔记08:HttpServletRequest & ServletRequest) HttpServletResponse

  1)public   abstract  class   HttpServlet     extends  GenericServlet    implements   java.io.Serializable  是继承GenericServlet 的一个针对HTTP 协议定制的Servlet。

  2)在service()方法中直接把ServletRequest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse,并且调用了重载的service(HttpServletRequest req, HttpServletResponse resp)

     获取请求方式:request.getMethod().根据请求方式又创建了doXxx()方法(xxx 为具体的请求方式,比如doGet, doPost)

  @Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException { HttpServletRequest request;
HttpServletResponse response; try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response); protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) {
long lastModified = getLastModified(req);
if (lastModified == -1) {
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
} catch (IllegalArgumentException iae) {
// Invalid date header - proceed as if none was set
ifModifiedSince = -1;
}
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
// If the servlet mod time is later, call doGet()
// Round down to the nearest second for a proper compare
// A ifModifiedSince of -1 will always be less
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
} } else if (method.equals(METHOD_HEAD)) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp); } else if (method.equals(METHOD_POST)) {
doPost(req, resp); } else if (method.equals(METHOD_PUT)) {
doPut(req, resp); } else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp); } else {
//
// Note that this means NO servlet supports whatever
// method was requested, anywhere on this server.
// String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
}

3.一般在实际开发中,直接继承HttpServlet,并根据请求方法doXxx() 方法接口

 优点:直接针对性的覆盖doXxx() 方法;直接使用 HttpServletRequest 和  HttpServletResponse

4.关于Servlet小结

  1)了解GenericServlet 原理和实现

  2)掌握 HttpServlet 实现的原理 及 源码

最新文章

  1. GMap.NET使用一
  2. sql server 2008笔记
  3. apply和call
  4. Mybatis保存数据时事务问题
  5. Python字符转换
  6. 【转】深入研究java.lang.Runtime类
  7. hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
  8. python成长之路11
  9. VMware vSphere 服务器虚拟化之十六 桌面虚拟化之VMware Horizon View
  10. HTML5笔记3——Web Storage和本地数据库
  11. c语言中标识符的作用域
  12. SpringSecurity自定义AuthenticationProvider和AuthenticationFilter
  13. 元素定位之Ui-Automator-Viewer的使用
  14. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. com/mongodb/util/JSON
  15. Java7 新特性: try-with-resources
  16. RabbitVCS - Ubuntu VCS Graphical Client
  17. JSP复习
  18. Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面
  19. jquery, jquery-ui, requirejs, bootstrap 的关系理解
  20. 到底该用img还是background-image?

热门文章

  1. Database returned an invalid value in QuerySet.datetimes(). Are time zone definitions for your datab
  2. zabbix监控客户端本地网络的延时状态
  3. Install RabbitMQ server in CentOS 7
  4. MongoDB查询条件常用设置
  5. db2 error
  6. Linux中crontab下scp文件传输的两种方式
  7. The following classes could not be found: - android.support.v7.internal.widget.ActionBarOverlayLayout
  8. mysql如何监测是否命中索引?
  9. Collective Mindsets (easy)(逻辑题)
  10. 3.二级接口HierarchicalBeanFactory