1、简介

在了解tomcat之前我们需要了解一些基本的概念。

1.1 web应用

所谓Web应用,就是指需要通过编程来创建的Web站点。Web应用中不仅包括普通的静态HTML文档,还包含大量可被Web服务器动态执行的程序。用户在Internet上看到的能开展业务的各种Web站点都可看作Web应用,例如,网上商店和网上银行都是Web应用。此外,公司内部基于Web的Intranet工作平台也是Web应用。

Web应用与传统的桌面应用程序相比,具有以下特点:

  • 以浏览器作为展示客户端界面的窗口。
  • 客户端界面一律表现为网页形式,网页由HTML语言写成。
  • 客户端与服务器端能进行和业务相关的动态交互。
  • 能完成与桌面应用程序类似的功能。
  • 使用浏览器—服务器架构(B/S),浏览器与服务器之间采用HTTP协议通信。
  • Web应用通过Web服务器来发布。

web应用的一大好处就是可以轻易地跨平台运行,不论是windows、mac、ios、android还是linux,只要安装了浏览器,一般都可以使用web应用,而浏览器在各个平台都是标配的软件,因此给web应用的普及提供了非常良好的条件。同样的,web应用使用的是B/S架构,即Browser/Server架构,主要的计算任务都交给Server端进行,因此都客户端的性能要求较低,同时也推动了服务端的负载均衡、高可用等技术的发展。

Context:在tomcat中一般指web应用

1.2 Servlet

Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类别,一般情况下,我们说的Servlet为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。也就是说Web服务器可以访问任意一个Web应用中所有实现Servlet接口的类。而Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。既然servlet和java关系密切,那么servlet接口的标准制定毫无疑问也是由甲骨文公司来主导。

Servlet规范把能够发布和运行Java Web应用的Web服务器称为Servlet容器。Servlet容器最主要的特征是动态执行Java Web应用中Servlet实现类的程序代码。由Apache开源软件组织创建的Tomcat是一个符合Servlet规范的优秀Servlet容器。

1.3 jsp

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导建立的一种动态网页技术标准。JSP是HttpServlet的扩展。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP在首次被访问的时候被应用服务器转换为servlet,在以后的运行中,容器直接调用这个servlet,而不再访问JSP页面。JSP的实质仍然是servlet。

1.4 tomcat

Tomcat是在Oracle公司的JSWDK(JavaServer Web DevelopmentKit,是Oracle公司推出的小型Servlet/JSP调试工具)的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java语言编写。作为一个开源软件,Tomcat除了运行稳定、可靠,并且效率高之外,还可以和目前大部分的主流Web服务器(如IIS、Apache、Nginx等)一起工作。

tomcat的版本实际上比较复杂,目前有7、8、9、10四个版本并行发布,具体的各个版本的兼容信息我们可以通过官网查询

2、Tomcat的目录结构

我们先来看一下tomcat8.5和tomcat9中的home目录中的文件:

可以看到除掉一些说明文件之后,还有7个目录:

实际上除了主目录里有lib目录,在webapps目录下的web应用中的WEB-INF目录下也存在一个lib目录:

两者的区别在于:

● Tomcat主目录下的lib目录:存放的JAR文件不仅能被Tomcat访问,还能被所有在Tomcat中发布的Java Web应用访问
● webapps目录下的Java Web应用的lib目录:存放的JAR文件只能被当前Java Web应用访问

既然有多个lib目录,那么肯定就有使用的优先顺序,Tomcat类加载器的目录加载优先顺序如下:

Tomcat的类加载器负责为Tomcat本身以及Java Web应用加载相关的类。假如Tomcat的类加载器要为一个Java Web应用加载一个类,类加载器会按照以下优先顺序到各个目录中去查找该类的.class文件,直到找到为止,如果所有目录中都不存在该类的.class文件,则会抛出异常:

  • 在Java Web应用的WEB-INF/classes目录下查找该类的.class文件
  • 在Java Web应用的WEB-INF/lib目录下的JAR文件中查找该类的.class文件
  • 在Tomcat的lib子目录下直接查找该类的.class文件
  • 在Tomcat的lib子目录下的JAR文件中查找该类的.class文件

原创文章,转载请注明出处:http://b.nwumba.cn/article/116/