IDEA部署tomcat原理小解

ぐ巨炮叔叔 提交于 2020-02-21 10:09:17

IDEA部署tomcat原理小解
最近看到一个视频对IDEA部署启动tomcat有了新的理解。下面和大家分享一下。 
1.tomcat部署项目的三种方式 
在纯tomcat环境下,不使用开发工具tomcat部署项目有三种方式。

①把html放到tomcat的webapps目录下的hello文件夹中,如下图。 

启动tomcat访问http://localhost:8080/hello/hello.html就能够连接到hello.html了。 
这里稍微提一下虚拟路径即web项目中ContextPath,servlet中配置的是ServletPath。上面这种方式配置的虚拟路径”/hello”和项目路径是相等的。但是这个方法配置的web项目都要在webapps的目录下。eclipse的web项目部署方法应该就是这种。 
②第二种方式如下图: 

区别与第一种方式,第二种的项目放在了d盘,没有在webapps的目录下。那么tomcat如何访问里面的资源呢?见下图 

在tomcat的conf下有一个server.xml文件打开编辑文件在上图所圈位置加入了一段代码

<Context docBase = "D:\hello" path = "/hi" />
1
不难发现,其中docBase指的是项目路径,path为虚拟路径。这里项目路径就和虚拟路径不一致了。大家可以联想到一个点:request有一个很常用的方法,就是request.getContextPath(),其实获取的就是这里的Context标签中属性名为path的值。启动tomcat,访问http://localhost:8080/hi/hello.html即能正确连接资源hello.html。使用eclipse的同学不妨去看一下自己的conf下的server.xml,会发现之前的web项目都有在context标签内配置。 
③以上两种都不是idea的部署方式,idea的部署方式是第三种.。 
在tomcat的conf\Catalina\localhost新建一个xml文件如下图 

 
还是熟悉的配置,但是不需要在server.xml中修改,防止手残,把主要配置改了。 
访问http://localhost:8080/hey/hello.html即可访问到资源。这里要说明一下,第三章方法的虚拟路径为xml文件名字,而不是xml中配置的path,当你修改xml文件中的path与xml文件名字不一致时,以xml文件名字作为虚拟路径可以访问到资源,而用path中配置作为虚拟路径则访问不到资源。 
2.idea的部署方式 
在idea中启动tomcat时会看到下面这段日志 

这里使用的是之前做的小demo,不用在意。我们把路径复制在计算机中打开 

打开下图的xml文件 


可以从配置中看出虚拟路径配置的和xml文件的名称一致。这个虚拟路径是我在idea的tomcat配置中的部署选项中配置的如下图 
而项目的文件路径则在D:\ideawork\mycrm\out\artifacts\mycrm_war_exploded。

这里有一个点蛮有意思: 
idea采用的是上面说的第三种部署方式,而第三种部署的虚拟路径其实是xml文件名就算不配置Context标签中的Path也能访问到资源,那么idea为什么多此一举配置了 
path而且path中的值和xml文件名一致,是单纯的巧合吗,有什么意义? 
其实很简单,前面提到request.getContextPath获得的是Context标签中属性名为path的值。但是第三种部署的虚拟路径其实是xml文件名,保持一致可以认为获得的COntextPath就是虚拟路径。这样就可以访问到资源页面

END!
————————————————
版权声明:本文为CSDN博主「314程序员」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41116058/article/details/81435084

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!