总结:

这篇文章主要反思了Tomcat的作用。本文主要是自己的一个思考过程,不是严谨地介绍和详细总结Tomcat使用方法的文章。最后尝试利用tomcat的知识,以URL的形式来访问文件夹(在浏览器的地址栏直接黏贴文件的路径也可以访问,但是这里可以不用实际的路径进行访问)。该例子实用意义不大,主要是加深对tomcat的理解。

教材上说,Tomcat是Apache组织的Jakarta项目的一个重要子项目,它是Sun公司推荐的运行Servlet和JSP的容器。也就是说它是一个容器,但随处也可见“Tomcat服务器”的说法。

事实上,Tomcat即是容器也是服务器。不过本文主要涉及Tomcat发挥容器功能的部分。Tomcat是用Java语言编写的,需要运行在Java虚拟机上,所以一般需要先安装JDK,以提供运行环境。

上面说过Tomcat是一个容器,但为什么开发出来的应用需要装进Tomcat这个容器呢。忽略各个文件之间的跳转,web应用本质只是一个装有很多资源(java/html/jsp/js/css等各种格式文件)的文件夹。假如我们有一个web应用projectA,我们在某台计算机A把这些文件写好后,就希望其他设备能够通过一些方式来访问我们的资源。一种方法是通过在浏览器地址栏输入URL来实现资源的访问。

那么从我们在计算机A上写好某个文件夹到文件夹能够被其他计算机所访问,需要什么呢。首先需要我们的互联网。计算机B先通过互联网找到计算机A。

而这样做的前提是你这个电脑必须在互联网这个网络里面,这样别人才能访问到你。也就是说一台电脑必须要有IP地址才能称为服务器。但这样也只是找到了IP地址而已,我们还需要找到对应的主机(注:一般主机是指一台电脑,但在tomcat中,虚拟主机指的是计算机中的某个文件夹)。但就算找到了计算机A,我们怎么知道要去哪里寻找web应用projectA呢。Tomcat容器就是来解决这个问题的。在我看来,Tomcat的一个重要的功能就在于“映射”(通过配置文件实现)。


虚拟主机名的配置

首先确定一个虚拟的主机名。Tomcat默认使用localhost作为虚拟主机名,并映射到webapps文件夹。在Tomcat安装目录下的server.xml文件夹的内容如下所示:

<Host appBase= "webapps" autoDeploy="true" name="localhost" unpackWARs="True">

如果也想要同时能够访问计算机A中的不同路径下的文件,这时候就可以添加一个<Host>元素,把这个新的路径添加进去,然后给它起一个虚拟的主机名字(关于虚拟主机名和路径的配置,因为是根据虚拟目录来指定要访问的路径,如果虚拟目录的路径是绝对路径,那么这里的路径没有意义,但是如果采用相对路径的方式,那么这里的路径就有意义。而虚拟的主机名除了在这里进行设置外,还需要在hosts中进行设置,并且需要在catalina文件夹下新建一个同名的文件夹,虚拟目录可以在这里进行配置,这些内容会在下面具体展开)。

<Engine name="Catalina" defaultHost = "localhost">
...
<Host name= "newhost" appBase="d:\newhost">
...
</Host>
</Engine>

(注:还需要到Windows系统中hosts进行注册,这样ip地址才能映射到这个虚拟主机)


虚拟目录的配置

然后就是配置虚拟目录。例如想在url为localhost/chapter01时跳转到特定的目录下。就需要在<Tomcat安装目录>\conf\Catalina\localhost目录下新建一个chapter01.xml(命名任意)。输入:

<Context path="/chapter01" docBase="d:\chapter01">

也就是说,从表面上来看,url中的localhost/chapter01貌似是指向localhost下面的chapter01文件夹,但其实上并非如此,这两者仍然要分开进行指定。并且不一定存在父子文件夹的关系。除此以外,还可以指定默认页面(例如指定welcome.html)。打开<Tomcat根目录>\conf目录下的web.xml文件。这时候需要在chapter01目录中创建WEB-INF目录,并在该目录下创建一个web.xml文件。配置方法如下:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app ...>
<welcome-file-list>
<welcome-file>welcome.html</welcome-file>
</welcome-file-list>
</web-app>

(也可以在<Tomcat安装目录>/conf目录下的server.xml文件进行配置,但是需要进行重启后才生效)

而tomcat的管理平台又起到什么作用呢。它列出了所有的web应用及其状态。并且提供每个web的启动、停止和卸载的功能。这意味着它可以选择电脑中哪部分资源有效,哪部分资源无效。那么这样来看的话,其实tomcat就像酒店前台,给你门卡让你去找到对应的房间(web资源),并且决定哪些房间不能进,哪些可以进去

然后执行了startup.bat启动Tomcat。启动后其实就是把这些映射激活了。关闭后就相当于酒店前台走了,来访者(URL请求)不知如何是好。网上有人说启动了tomcat后,CATALINA_PATH & CATALINA_BASE will refer to the resource location.也就是说知道去哪里找我们的资源了。如果仔细看上面虚拟主机的配置内容,就会发现<Host>元素是放在<Engine>元素里面的。而Engine的name就是Catalina。一旦启动tomcat,就表明我们的配置能够生效。文件夹projectA就不是简单的一个文件夹了,而是变成了一个可以通过URL访问得到的一个文件夹。按照这种思路的话,我们其实可以自己定义一些路径(下文给出一个例子)。

所以tomcat像是一个桥梁,外界访问服务器(某台计算机)资源的时候,tomcat能够找到对应的文件夹。所以当我们访问localhost://index.html,他就知道去这台电脑的哪个位置寻找资源index.html。当然,tomcat也有它力所难及的地方,例如编写有组织的web应用就不是它的强项了。这也是我们后面要不停地用Eclipse等进行整合开发的原因。

一个简单的案例(用URL请求访问本地文件夹中的视频)

假如我有视频放在文件夹(E:\jpvideo)中,其中有一个文件名为1.mp4,如果我想通过URL(例如:video/jpvideo/1.mp4)来访问电脑上的这个文件夹的资源。那么要怎么做呢。方法如下:

a、首先来到tomcat安装目录下,找到server.xml。添加一个名为“video”的虚拟主机。

  <Host appBase="e:\" name="video">
</Host>

b、然后更改了hosts文件:(添加如下代码)

127.0.0.1   video

c、配置虚拟目录,方法是在<Tomcat安装目录>\conf\Catalina下面新建一个video文件夹,在video文件夹下面新建一个xml文件(名字任意),输入如下内容。

<Context path = "/jpvideo" docBase="E:\jpvideo"/>
  • 注:由于此处使用的是绝对路径,所以Host的appBase路径的设置对实验结果没有影响

d、最后通过cmd输入startup.bat来启动tomcat,激活这些配置。

e、(验证)在地址栏中输入video/jpvideo/1.mp4,结果如下,可以直接打开视频并播放。

Tomcat的用途的更多相关文章

  1. 如何在tomcat安装部署php项目

    java开发者都知道,tomcat是用来部署java web项目的.前几天老k偶然得知PHP/Java Bridge,通过它可以实现在jsp和php之间共享session,详见<如何实现jsp和 ...

  2. Tomcat的目录结构及用途

    目录结构及用途 目录 用途 bin 包含启动/关闭脚本 conf 包含不同的配置文件,包括 server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件we ...

  3. Docker用途 & 和tomcat的区别

    两者不是同一种类型.1.docker 是容器,tomcat是jsp应用服务器2.tomcat可以安装在物理机上,虚拟机上,也可以安装在Docker上.所以从这个角度讲,Docker也可以看做是一种超轻 ...

  4. 在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

    contex指上下文,实际上就是一个web项目:path是虚拟目录,访问的时候用127.0.0.1:8080/welcom/*.jsp访问网页,welcome前面要加/;docBase是网页实际存放位 ...

  5. 使用tomcat manager 管理和部署项目

    在部署tomcat项目的时候,除了把war文件直接拷贝到tomcat的webapp目录下,还有一种方法可以浏览器中管理和部署项目,那就是使用tomcat manager. 默认情况下,tomcat m ...

  6. tomcat相关问题

    动态资源:需要转换成静态资源后再响应给客户端,例如:jsp.servlet,其他语言的动态资源有:asp.php 静态资源:无需转发即可直接响应给客户端,例如:html.css.javascript ...

  7. tomcat结合nginx使用小结

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...

  8. tomcat 性能优化

    tomcat 性能优化tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. tomcat内存优化linux修改TOMCAT_HOME/bin/ ...

  9. tomcat触发ServletContext初始化监听事件的源码(原创)

    tomcat 8.0.36 知识点: 动态监听器的好处可以根据环境条件进行选择性添加. 静态监听器有七类. ServletContextAttributeListener ServletRequest ...

随机推荐

  1. MAN VGEXTEND

    VGEXTEND(8)                                                        VGEXTEND(8) NAME/名称       vgexten ...

  2. selenium 自动化的坑(5)

    这次要说的自动化坑是关于<a>标签的,话不多说,先上图: 这个表面上看起来是个输入框,操作的时候需要鼠标先悬停,才会出来下面的选项,刚开始我尝试直接点击,结果当然是失败的了. 注意:我的操 ...

  3. [LeetCode] 238. 除自身以外数组的乘积 ☆☆☆(左积*右积)

    描述 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: ...

  4. python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)

    01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...

  5. 170817关于AJAX的知识点

    1.AJAX                  [1] AJAX简介                        全称: Asynchronous JavaScript And XML        ...

  6. [CSP-S模拟测试]:X国的军队(贪心)

    题目描述 $X$国和$Y$国开战了! 作为$X$国的军事参谋,你了解到事态的严峻性.为了更好地应付敌人,你收集到了$Y$国城市中$n$个据点的信息,你打算攻破这$n$个据点! 每个据点$i$的信息由火 ...

  7. Jenkins搭建(by tomcat)

    Jenkins官网https://jenkins.io/download/下载最新版本jenkins.war 把jenkins.war放到tomcat-jenkins的webapps下 修改tomca ...

  8. VS code 同步设置与插件

    准备工作:拥有一个github账户,电脑上需安装VSCode.实现同步的功能主要依赖于VSCode插件 "Settings Sync"第一步:安装同步插件Settings Sync ...

  9. js中return;、return true、return false的区别

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  10. mooc-IDEA 应用快捷键自动创建测试类--010

    十六.IntelliJ IDEA -应用快捷键自动创建测试类 Step1:在类或接口上,按ctrl+shift+t 选择Create New Test... 则在相应测试包下.创建该测试类. 测试类: