作者:Javdroider Hong
链接:https://www.zhihu.com/question/21416727/answer/339012081
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个提问的最大一个bug,就是以为servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!


所以,提问中说的网络协议、http什么的,servlet根本不管!也管不着!

那servlet是干嘛的?很简单,接口的作用是什么?规范呗!

servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:

  • 你初始化时要做什么
  • 你销毁时要做什么
  • 你接受到请求时要做什么

这是Java给的一种规范!就像阿西莫夫的机器人三大定律、行尸走肉里Rick的那三个问题一样,规范!

servlet是一个规范,那实现了servlet的类,就能处理请求了吗?

答案是,不能。

你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,相信我,你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!

那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的tomcat,同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。

tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

以上。

参考文献(看完你就知道Tomcat/Servlet/Spring MVC之间的矫情关系了):

An Introduction to Tomcat Servlet Interactions​www.mulesoft.com

How Spring MVC Really Works​stackify.com

最新文章

  1. *HDU1150 二分图
  2. html 以及JavaScript 转义
  3. 【转】keil+stm32+jlink利用swd方式进行printf输出
  4. HTTP狀態碼
  5. ZOJ3791 An Easy Game(DP)
  6. rsync 排除指定目录或文件进行同步
  7. js中判断json是否为空
  8. [转载]html5直接在网页上播放视频音频兼容所有浏览器
  9. [Mime] MediaTypes--电子邮件类型类 (转载)
  10. bzoj 1088: [SCOI2005]扫雷Mine
  11. c++中编译器的作用
  12. centos7 docker安装详解
  13. 【技术解密】SequoiaDB分布式存储原理
  14. 八、Hadoop学习笔记————调优之Hive调优
  15. python批量修改文件内容及文件编码方式的处理
  16. 本科理工男如何学习Linux
  17. 上传第三方jar包至maven私服,以geotools为例
  18. python学习笔记--文件重命名,删除及文件夹
  19. jenkins X实践系列(3) —— jenkins X 安装拾遗
  20. SQL Server新建登录名,实现SQL Server身份验证模式

热门文章

  1. 我的python面试简历
  2. Hellc
  3. Python——9函数式编程②
  4. HTML标签学习总结(2)
  5. 关于scanf与gets的区别
  6. Hibernate和Mybatis的工作原理以及区别
  7. AOP面试知识整理,^_^-包括spring Aop
  8. 《数字信号处理》课程实验1 – FFT的实现
  9. ajax+lazyload时lazyload失效问题及解决
  10. 玩转 React(五)- 组件的内部状态和生命周期