总结:

这篇文章主要反思了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. CF dp 题(1500-2000难度)

    前言 从后往前刷 update 新增 \(\text{\color{red}{Mark}}\) 标记功能,有一定难度的题标记为 \(\text{\color{red}{红}}\) 色. 题单 (刷过的 ...

  2. git & gerrit & shell

    g公司使用Gerrit改善评审流程. 比较麻烦.gerrit提交后会触发vertifyCI, 实施代码扫描. 这一堆过程, 打印出一堆信息, 都在log中, 所以处理log就需要自己写shell了. ...

  3. linux下将一系列.o文件打包成.a文件

    参考链接:https://www.cnblogs.com/joshtao/p/7380627.html

  4. 大白话vue——slot的作用与使用

    这篇内容本来是不打算放在首页上的,因为内容实在是比较简单,但是在查找slot的使用讲解时发现相关的讲解比较少,要么像官方文档一样简单讲解(看过任然一脸懵逼),也许是自己理解能力比较差...所以在此讲述 ...

  5. BUUCTF | [De1CTF 2019]SSRF Me

    解法一字符串拼接: 1.得到签名sign http://8fa4531c-1164-49b7-a700-70e77e6aacb7.node3.buuoj.cn/geneSign?param=flag. ...

  6. html5: postMessage解决跨域通信的问题

    效果图 postmessage解析 HTML5提供了新型机制PostMessage实现安全的跨源通信. 语法 otherWindow.postMessage(message, targetOrigin ...

  7. video.js播放rtmp

    项目中要用到rtmp直播和点播.要求:点播能够调整播放进度 开始用腾讯提供的播放器,老卡,画质差,很多时候播不出来,rtmp点播还不能快进. 后来用Wowza自带的flash rtmp播放器,有源码 ...

  8. 初识HTTP状态码。

    HTTP状态码被分成了五类.100-199 用于指定客户端应相应的某些动作.200-299 用于表示请求成功.300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息.400-49 ...

  9. SqlServer 事物

    Ø 事务 在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整体要么全部成功,要么全部失败,这就需要用到事务. 1. 事务的特点 事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提 ...

  10. Altium Designer chapter4总结

    原理图设计进阶中需要注意如下: (1)多电路原理图的设计:图纸连接符是连接各个电路图的电器连接:VCC GND属于特殊的网络标号,在多电路原理图中不需要添加. (2)层次式电路原理图设计:注意自上而下 ...