Servlet我们到底能走多远系列.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Servlet我们到底能走多远系列

Servlet的核心类图如下: 上面的servlet只是接口,相当于描述了servlet的标准,也就是说与协议无关。而HttpServlet的实现是根据Http协议来完成的。看下面的截图:   打开源码看后发现大多数接口和抽象类,那么真正的实现都在哪呢?在servlet容器源代码里,即类似Tomcat这样的servlet容器。   所以我觉得可以这样理解Servlet的作用:它提供了操控的按钮,这些按钮一旦被安装到Servlet容器里面, 我们就可以通过这些按钮操控servlet容器,从而管理我们自己的Servlet实例。   这一点很重要。所以阅读Servlet源码其实就是了解他的基本结构和API,我们真正要读的是Tomcat的源码! ? Servlet的运行结构和API: 首先看下一次Http请求-响应的过程:   A,首先客户端通过浏览器向服务器发送Http请求;   B,Tomcat监听服务器的8080端口,当有Http请求发过来之后,解析出项目名称,然后到webapps目录下搜索到该项目文件夹。   C,Tomcat作为servlet的容器,实例化第一次请求调用的的servlet实例(以后再有相同的servlet的请求,使用第一次的实例)。   D,调用init()方法,初始化工作。   E,调用HttpServlet的service方法,中间会更加请求,调用doGet或doPost方法,执行核心逻辑代码。   F,执行完servlet后,返回响应,客户端浏览器根据响应呈现效果。 然后我们看下基本的运行机制: 从图上可以看出,不同的用户请求并发使用同一个Servlet实例,这是一个比较重要的基础机制。 Container解析Http请求后,实例化Servlet,因为是Http请求,会执行HttpServlet的代码: 首先会执行HttpServlet中的service(ServletRequest req, ServletResponse res)方法: public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request; HttpServletResponse response; try { request = (HttpServletRequest) req;//请求转换成Http请求 response = (HttpServletResponse) res;//响应转换成Http响应 } catch (ClassCastException e) { throw new ServletException(non-HTTP request or response); } service(request, response);//调用处理Http的service方法 } 然后会调用service(HttpServletRequest req, HttpServletResponse resp)方法: protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod();//取得req中的方法类型 if (method.equals(METHOD_GET)) {//根据方法类型来决定执行后续的方法,我们只关注doGet和doPost long lastModified = getLastModified(req); if (lastModified == -1) { doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); if (ifModifiedSince (lastModified / 1000 * 1000)) { maybe

文档评论(0)

ipad0d + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档