一、前言
TomCat作为一款由Java语言所开发的Web Container,在很多应用场景中经常遇到,其特点也符合Java语言“一次编译到处使用”的优势,在介绍TomCat之前,首先需要对Java的技术体系有一定的了解。
二、Java介绍
Java与Python、PHP、C#等一样属应用级开发语言,不同于C等系统及开发语言,应用级开发语言在同一平台下所写的代码在其他平台上无法运行,这在早期让许多应用程序不得不针对每一种平台单独做一次开发。在计算机领域,出现任何两层之间无法衔接时都会引入中间层来解决此问题,Java也不例外,它在系统和应用之间又添加了一个中间层来解决该问题,中间层负责与不同的底层系统打交道,对外输出为统一的Java类库(也成为Java API,形式为XXX.class),主机只要安装了该中间层后就可以运行所有Java语言所开发的应用程序。
三、JRE、JVM与JDK
通过前文得知,中间层实际上是为Java语言所开发的程序提供了一个可以让其运行的环境,该环境通常被称为JRE(Java Run Environment),其核心是由一个Java虚拟机JVM(Java Virtual Machine)组成,JVM提供了Java程序运行时所需要的类文件,但仅有JVM并不一定能够能执行Java程序,这需要从Java程序的运行过程说起,Java程序的运行步骤为:
1.将使用Java语言开发的代码(通常Java代码被打包在.jar目录下)通过编译后生成程序的类文件
2.位于JVM中的类加载器(calss loader)将编译好的类文件和调用的类文件(类似于C语言,Java语言也有很多公共类文件)完成加载后交由执行引擎执行
初识TomCat之1——Java体系理解
3.执行引擎的作用是将Java程序转换为本地库调用,从而实现Java程序在本地的运行
初识TomCat之1——Java体系理解
而仅拥有JVM不一定能执行Java程序是因为Java程序在执行过程中有时需要调用其他的库,所以说JVM是JRE的一个子集,而JDK是在JRE的基础上多了开发工具,即JRE是JDK的一个子集
初识TomCat之1——Java体系理解
四、Java的分类及CGI规范
Java本身又分为三个流派:J2SE(Java 2 Standard Edition)、J2EE(Java 2 Enterprise Edition)、J2ME(Java 2 Mobile Edition),除了J2ME鲜有人用之外,J2SE和J2EE已应用于广大生产环境。
随着动态内容的兴起,CGI规范应用到了几乎所有的Web场景,CGI是Web服务器运行时外部程序的规范,按照CGI编写的程序可以扩展服务器的功能,CGI程序还能与浏览器进行交互。
早期客户端在发起Java动态内容请求时,服务器端会将Java applet小程序作为一个单独文件与网页一起发给客户端,Java applet通常在客户端本地运行后将最终结果呈现给用户,此时称为客户端动态。该技术的优点是降低了服务器的负载,缺点是如果返回的是恶意程序,客户端面临很大的风险。
正是因为客户端动态存在着诸多隐患,取而代之的是服务器端动态,此时客户端发起Java动态内容请求,服务器接收到请求后交由服务器端Java Servlet程序运行,Java Servlet再将运行后的结果返回给服务器端最后呈现给用户,这样就避免了客户端动态的情况。
不同于php可以直接嵌入html文档,Servlet的结果最初只能以硬编码的方式格式化为html文档,这要求开发者需要同时掌握Java和html语言,所以为了降低开发者难度,通过JSP程序将运行后的结果格式化成html文档格式,从而降低了开发者的门槛。Servlet在处理完之后先交由JSP程序格式化成html后再交由服务器反馈给用户。
五、J2SE与J2EE的区分
从功能上大体可以这么认为:J2SE仅实现了JDK的功能,他为Java应用程序提供了一个容器。而在此之上拥有JSP、Servlet、EJB、JMS、JavaMail等功能的J2EE提供了一个Web容器,从而可以接收来自客户端的CGI或是http请求。
Sun在被Oracle收购前将JDK开源,但相关的JSP、Servlet等组件并没有开源,很多商业或社区组织由此提供了众多的Web容器技术,如:websphere,weblogic,tomcat。