Tomcat是开源的实现了部分Java EE规范的Java Web应用服务器。除了J2EE,还有其他技术也通过容器来实现,比如:EJB,Java Mail,JPA,JTA,JMS。
值得注意的是,目前经常接触的java容器,tomcat和jetty只是实现了J2EE的部分规范,比如Servlet和JSP。像XML,JMS,JTA,JTS,JAF,JDBC,JNDI,EJB,RMI,CORBA等其他规范会在Jboss,Glassfish等新兴容器中首先实现。所以像Glassfish这种开源的的容器,是研究Java EE最新技术的第一选择。
下面针对Tomcat支持的Java EE的规范做个简单的介绍:
Servlet:扩展了Web服务器功能的小型的Java程序。
JSP:在HTML代码中嵌入JAVA代码,服务器在接收到客户端的请求后对JAVA代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
Servlet容器
从tomcat的配置文件中可以看出,Servlet容器由Server,Service组成,其中Service又包含了很多的组件。
值得注意的是tomcat中conf路径中的server.xml体现的Server就是指的Tomcat服务器,负责管理各个Service,同时监听shutdown钩子。
Service就是Tomcat封装的支持WEB服务的组件,它包含许多的组件,其中有Connector和Container这两个重要组件,和Loader(类加载器),Realm(权限管理),JMX(提供远程监控tomcat的功能),Jasper(JSP解析引擎),Pipeline(请求的管道),Naming(即JNDI命名服务)等组件。
Container组件
Container由Engine(Servlet的主容器),Host(虚拟主机,负责部署web应用和Context的创建),Context(负责配置解析,管理Web资源),Wrapper(也就是每个Servlet的封装)组成,Engine又由多个Host组成,一个Host包含多个Wrapper。
Servlet的生命周期
- 初始化调用init()方法:当请求到达Server,会被映射到相对应的Servlet,如果不存在对应的Servlet实例,则加载和实例化,此时调用init()方法
- service()即是主方法,提供请求与返回
- 销毁方法destory():当Server不再需要Servlet时,Server调用Servlet的destory()方法。
JSP规范
JSP引擎的工作流程
- servlet容器编译servlet源文件,生成相应的类
- 加载与JSP对应的servlet类,创建实例,并调用它的初始化方法,对应_jspInit()
- 执行servlet实例的服务方法,对应_jspService()
- 销毁servlet实例的销毁方法,销毁servlet实例,对应_jspDestory()