java的JSR规范和Servlet规范
1 JSR规范
转自https://blog.csdn.net/u013182960/article/details/90257159
2 Servlet规范
最新的Servlet规范是Servlet 4.0,对应JSR369,我们可以在https://www.jcp.org/en/jsr/platform?listBy=3&listByType=platform中下载规范查看,有两个文件,
第一个是一个pdf,有240多页。第二个是一个jar包:javax.servlet-api-4.0-FINAL-javadoc.jar,解压后是html文档,详细介绍了接口和类的结构和功能,但是没有实现代码。
由上面的pdf文档和html文档可以看到,Servlet规范不仅定义了Servlet相关的类和接口,还定义了Filter以及web.xml的格式和规范。
Servlet规范的其中一个实现:javax.servlet-api-4.0.1.jar。在该jar包中定义了Servlet接口,以及GenericServlet和HttpServlet实现类,以及所有规范中提及的类和接口。
Tomcat和Jetty等容器是Servlet容器,负责Servlet的实例化,初始化,调用,销毁等生命周期过程。其完全遵循Servlet规范,本身不定义Servlet相关的类和接口,也不定义web.xml格式,完全遵照Servlet规范。当我们引入和使用javax.servlet-api-4.0.1.jar中的类和接口开发出一个war包后,我们把它部署到Tomcat。Tomcat其使命只是管理和运行war包中的这些类,或者说只是个Servlet容器。负责接收请求,并把请求转发给Servlet,响应请求。如果我们愿意,我们完全可以自己写一个Servlet容器。
jdk的api或者jdk中的新增api也是对应一个JSR规范,也需要JCP委员会审批才能发布。与Servlet规范不同的是,jdk规范相关的具体实现将由jdk厂商实现并发布在java安装包中,而Servlet规范则不在java安装包中,而是由第三方实现(比如javax.servlet-api.jar)。
我们要对Servlet规范、Servlet具体实现、Servlet容器概念的界限十分清楚。
Servlet规范:只是定义了Servlet应该长啥样,有哪些配置,如何处理请求
Servlet具体实现:依照规范实现具体的东西
Servlet容器:Servlet存放的位置