以往理解Servlet只是一个特定规范的Java类,JSP页面在Servlet容器中运行时也会被编译成Servlet执行。
但Servlet规范中定义的内容更广泛,涉及Servlet本身、Servlet容器、Web Application等多项内容。
Servlet是基于Java的一种Web组件,用来动态生成内容。
Servlet容器用来部署Web应用,提供对于Servlet的管理及外部服务调用。
Web应用是由Servlets、HTML pages、classes和其它资源组成的一个完整的应用程序。
Servlet容器可以作为Web服务器或者应用服务器的一部分来使用(通过插件的方式),但常见的使用场景是使用Apache或Nginx作为Web服务器,通过反向代理的模式将对Servlet的访问跳转到后台的Tomcat这个Servlet容器执行。
Servlet规范定义,对于Servlet容器和Web应用来说至关重要。
Servlet容器需要根据规范定义,对于外部的TCP/IP的链接进行管理,对HTTP&HTTPS的报文进行解析并生成ServletRequest,根据容器内部各个应用的配置信息进行服务映射,找到对应的Servlet进行处理,并将ServletResponse再以报文的形式返回出去。
部署在Servlet容器的Web应用,也是需要根据规范定义,获取请求信息并进行业务逻辑处理并返回结果。
我个人认为,了解Servlet规范便了解了HTTP报文、Servlet容器、Web应用程序各自的边界在哪里,通过什么方式以什么规范来进行对接。
参考:Java Servlet Specification Version 3.1