前言
本文适合有一定开发经验的Java Web开发者,对Java Web世界好奇的人。本文是我的个人感悟,如果不妥或者不对的地方,欢迎大家指出!
Servlet
对于网络上的一个http请求,到达我们的程序,我们应该怎样形象的用代码表示它,包括其中的请求头、cookie、url等,最好写一个对象将其封装,请求的响应同样如此。我们可以用面向对象大法自己来写一套,但是如果A公司写了一个RequestA,B公司又写了一个RequestB,张三从A公司跳槽到B公司又得重新学习适应新的写法,十分混乱效率低下。
这时候servlet应运而生。简而言之,servlet就是一套接口,或者说规范。它规定好了,一个http请求就对应一个HttpServletRequest
,响应就对应一个HttpServletResponse
,请求必须在Servlet
中处理。这样呢,不管张三在哪个公司,直接拿到request就能写业务代码了。但是这样还有问题,servlet只是一系列的接口(就是我们代码中的interface),没有具体的实现。那么请求是怎样封装成HttpServletRequest
的呢,具体的实现类咋写?然后这个请求又是该找哪个Servlet
处理呢?这时候就该用到我们的tomcat啦。
Tomcat
tomcat,简而言之,就是web容器,一个存放并管理servlet的大池子。我们写的Servlet
交给它管理,它会监听网络上指定端口的请求,将其封装成我们想要的HttpServletRequest
,然后送到某个Servlet
处理即可。
作个不太形象的比喻,我们把tomcat比作一个工厂,其中servlet就是有着不同功能的车间,http请求就是运输车,请求中的数据就是运输车运输的原材料。假如一个运输车运了一个用户id开到tomcat工厂大门口,tomcat工厂放行运输车,将其包装成车间能识别的模样,然后路由到对应的servlet车间,该servlet取下原材料加工出一个用户放回车上,车子再经过tomcat工厂大门离开。很显然,这里tomcat及servlet分工明确,前者要负责servlet的创建管理和销毁,如果请求过来要将请求包装成servlet能识别的request,并分发到指定的servlet;后者则是要负责完成请求的任务。
总结
servlet是一套规范,它定义了http的格式、请求处理方式等;tomcat是对servlet的具体实现,能够完成请求封装分发返回等功能。