本篇接上一篇《Tomcat详细用法学习(三)》,主要讲解配置虚拟主机、打包web应用成war包和Tomcat的体系结构

  

  对于Tomcat服务器,可以放置多个网站(多个web应用),这就是讲配置多个虚拟主机,可以看成好像有多个主机,而每个主机上有一个web应用。如同之前的文章所说的,对于Tomcat服务器来讲,在server.xml文件中,一个<Host>标签就代表着一台虚拟主机,之前的文章所用的都是默认的虚拟主机,这个在server.xml文件中是这样定义的:

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

可以看到这个已有的虚拟主机的名称(“localhost”)正好是浏览器访问本机的回环地址的主机名,appBase属性是存放web应用的目录(正好是Tomcat详细用法学习(二)中虚拟目录映射的第三种方式将web应用放置的位置),autoDeploy指是否自动部署,unpackWARs指是否自动解压war包,如果为false则不解压直接从war包中运行应用程序。

  而我们想配置多个虚拟主机也是这样,在server.xml文件中添加<Host>标签,指定name属性和appBase属性之后,再添加web应用,添加web应用已经在《Tomcat详细用法学习(二)》详细说明,使用哪种方法都可以。

  通常配置虚拟主机方式与网站域名比较相关,而我没有有域名的网址,因此直接修改hosts文件将域名重定向作为学习在服务器中虚拟主机的添加和配置。

  修改Tomcat服务器中的server.xml文件,添加<Host>标签,name属性采取“域名”的方式,并将该虚拟主机存放web应用的目录【fjdingsd】放在非Tomcat所在的【D】盘下:

<Host name="www.fjdingsd.com" appBase="D:\fjdingsd" autoDeploy="true" unpackWARs="true">
</Host>

   【news】目录中:  

当在server.xml中添加好虚拟主机之后,这里我采用《Tomcat详细用法学习(二)》中的第三种方式,直接将web应用放置在对应的虚拟主机存放web应用目录,注意,这里是由<Host>标签中appBase定义的D盘下【fjdingsd】目录,而我的web应用【news】就应该放这其中,在我的web应用所在目录中有自定义的home.html文件。

现在就是需要将定义的虚拟主机名和ip绑定,因为没有向DNS服务器注册,所以我就使用hosts文件中将我的虚拟主机名与本机ip地址绑定:

  

这样启动Tomcat服务器,在浏览器中输入,可以看到:

  

这样就配置好了一个虚拟主机,并且在这虚拟主机中还有web应用。

  这里只是小试一下对Tomcat服务器的虚拟主机配置,而如果想真正让外界访问我们配置的虚拟主机(网站),应该向DNS服务器注册域名才行。

  不管在Tomcat服务器中添加了多少个虚拟主机,最终都是转为ip地址向服务器访问。这里就会有一个问题,如果每个web应用都设置了首页,而又不在浏览器中输入域名,而是直接通过ip地址打开,那么服务器怎么知道应该是去哪个虚拟主机寻求资源呢?

  答案就在Tomcat服务器的引擎<Engine>上,由server.xml文件中的<Engine>标签定义了Tomcat服务器的默认虚拟主机:

<Engine defaultHost="localhost" name="Catalina">
...
<Host name="localhost" ...> </Host>
<Host name="www.fjdingsd.com" ...> </Host>
...
</Engine>

因此如果我想改变Tomcat服务器的默认虚拟主机,就修改<Engine>标签中的“defaultHost”属性。

================================================================

  如果要将开发好的web应用部署到远程服务器中,可以将web应用进行压缩成war格式,再进行传输,在Tomcat服务器运行的过程中,如果在其存放web应用的目录中检测到新增的war包,则会进行自动解压并部署(<Host>中的unpackWARs属性和autoDeploy属性)。这种方式最适合向远程服务器进行新的web应用传递并管理。

  那么如何对开发好的web应用进行war打包呢:

      在cmd中键入 “jar -cvf  应用名.war  应用名”。

如我的web应用为D盘下【fjdingsd】目录中的【news】目录,那么我在cmd中就该这么输入:jar  -cvf  news.war  news

  

并得到了war文件:

  

然后将这个news.war往Tomcat的【webapps】目录中一放,过几秒后Tomcat就会对其自动解压,Tomcat服务器一定要先打开才会看到自动解压的过程。

  过3、4秒后: 

如果在Tomcat运行的过程中,将已经自动解压的war包删除,则过几秒Tomcat也会自动将解压后的web应用删除,这点请注意。

  如果是在Tomcat服务器未启动之前,将war包放入【webapps】目录中,那么Tomcat启动后会自动解压并部署。

  如果在是Tomcat解压的war包,而在将Tomcat关闭后再删除war包,那么在此启动Tomcat后之前由war包解压出来的web应用不会被删除。

================================================================

Tomcat的体系结构  

  Tomcat的体系结构可以从其最重要的server.xml文件中进行结构分析,下图是一张Tomcat的体系结构图:

  

结合server.xml文件可以看到:

  

  Tomcat启动后,也就是服务器(<Server>标签),启动后也会启动一些监听器(<Listener>)和一些全局命名资源(<GlobalNamingResources>)。

  除了服务器(<Server>标签)被启动后,还会启动“服务”(<Service>),正如在cmd中键入的“services.msc”的那种。

  

  在服务(<Service>)下会有各种连接器(<Connector>),如上面体系结构图所示,其中和浏览器打交道的连接器(<Connector>)定义了连接协议(protocol),连接端口(port),连接超时(connectionTimeout)等等属性,当然还要别的用途的连接器。

  

  在服务(<Service>)下除了各种连接器(<Connector>),还有一个引擎(<Engine>),当浏览器将一些请求发来时就通过连接器(<Connector>)交给引擎(<Engine>),引擎(<Engine>)中可以包含一个或多个虚拟主机(<Host>),而引擎也规定了哪个虚拟主机是默认访问的。

  

  引擎(<Engine>)通过寻找指定的虚拟主机(<Host>)将请求交给它,然后由虚拟主机(<Host>)来寻找是哪个web应用,虚拟主机(<Host>)定义了浏览器需输入的主机名称、web应用存放的位置,和别的一些属性等等

  

  而至于何种web应用就要看采用哪种虚拟目录映射了,如果是添加<Context>,那么一个<Context>标签就代表一个web应用

  

  或者是直接将web应用所在目录放在<Host>标签指定的路径,那么就没有<Context>标签来代表该web应用。

  

Tomcat详细用法学习(四)的更多相关文章

  1. Tomcat详细用法学习(五)

    本篇接上一篇<Tomcat详细用法学习(四)>,主要讲解Tomcat服务器的管理平台 我们可能会将很多web应用交给Tomcat,那么Tomcat服务器就要对我们这些载入的web应用进行管 ...

  2. Tomcat详细用法学习(三)

    本篇接上一篇<Tomcat详细用法学习(二)>,主要讲解服务器所要求的web应用的组织结构. 上一篇说到了如何使用服务器将自己的web应用映射成虚拟目录,以便于在浏览器中可以对自己开发的w ...

  3. Tomcat详细用法学习(二)

    本篇接上一篇<Tomcat详细用法学习(一)>,主要讲解服务器的虚拟目录映射的几种方式. 先来看几个概念: web应用的概念:一个web应用包含了许多我们做好的web资源,里面或许包括了多 ...

  4. Tomcat详细用法学习(一)

    在之前有关Tomcat的随笔<Tomcat免安装版的环境变量配置以及Eclipse下的Tomcat配置和测试>和<其他主机连接本地主机Tomcat会出现的防火墙问题>中已经详细 ...

  5. AI (Adobe Illustrator)详细用法(四)

    本节主要是介绍和形状相关的操作. 一.外观面板的使用 熟悉外观面板的使用很重要. 1.新增描边 外观面板可以让我们增加多个描边. 点击“新增描边”,系统自动添加一个描边. 选中文字,新增描边,可以修改 ...

  6. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  7. Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法

    一.需求背景     因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...

  8. How Tomcat Works(十四)补充

    在How Tomcat Works(十四)中,本人并没有对javax.servlet.Filter及javax.servlet.FilterChain做详细的描述,本文在这里做一下补充 FilterC ...

  9. css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法

    Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...

随机推荐

  1. 使用copy函数完成数据库迁移

    最近在该一个迁移工具的迁移方式,从ora8迁移到postgresql使用原来的插入迁移速度太慢了,老板说让使用缓存迁移,即使用postgresql的copy函数,因此去pg官网查阅了相关资料,我们需要 ...

  2. windows无效字符名导致的错误及解决办法

    今天用file_put_content($fileName,$data)产生错误:内容如下: Warning: file_put_contents(images/7d5636992a7395f9174 ...

  3. yii_wiki_204_using-cjuidialog-to-edit-rows-in-a-cgridview(通过CJuiDialog在CGridView中修改行数据)

    /*** Using CJuiDialog to edit rows in a CGridView http://www.yiiframework.com/wiki/204/using-cjuidia ...

  4. 2013年最好的Python开源项目汇总

    2013年Python社区诞生了很多实用的开发工具,这些工具 在一定程度上 可以帮助你节省更多的时间.本文为你汇总了这些工具,它们大部分都是开源的,你还可以通过源码来学习更多的Python开发知识. ...

  5. 数据结构读书笔记(三)(C语言)

    栈 顺序实现: 存储结构: #define STACK_INIT_SIZE 10 // 存储空间初始分配量 #define STACK_INCREMENT 2 // 存储空间分配增量 struct S ...

  6. MVC与WebForm的简单的比较

    MVC与WebForm的简单的比较 ASP 强制程序员将业务逻辑和展示页放到一个文件中 WebForm 允许程序员将业务逻辑与页面展示分开到不同的文件中,并且提供强大的开发平台来写  业务逻辑代码  ...

  7. 常见tcp端口

    TCP端口 7 = 回显 9 = 丢弃 11 = 在线用户 13 = 时间服务 15 = 网络状态 17 = 每日引用 18 = 消息发送 19 = 字符发生器 20 = ftp数据 21 = 文件传 ...

  8. 基于visual Studio2013解决面试题之1003字符串逆序

     题目

  9. CSDN-Code平台使用过程中的5点经验教训

    昨天又创建了一个项目,fucms,可是本地一直没有权限提交,搞了非常久,试了几十次,都不行,我是非常的灰心和郁闷.  刚刚,和CSDN-Code的官方客服咨询了非常久非常久,最终摸索出来了一些心得体会 ...

  10. ASP.NET - 在线编辑器(FreeTextBox)

    1.首先下载FreeTextBox程序集,再次使用3.3.1 · 官网:http://freetextbox.com/ · 百度云: 2.在程序中引入程序集 3.在工具箱中添加控件. 4.之后拖动控件 ...