https://www.zhihu.com/question/54757013
链接:https://www.zhihu.com/question/54757013/answer/140992590
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
首先说明啊,下面说的东东有一些呢有多种方法,我不是写说明书(说的好像会写一样),嗯,你懂的,不懂也算了,这个不重要。。。
我的Tomcat装在这个鸟地方的:F:
esourceapache-tomcat-8.0.37
我们先搞一个web应用吧,一个pikaqiu,里面有一个aaa.jsp,啊,就是下面这样
![](https://pic2.zhimg.com/80/v2-7ba599c3533c12e6c6ff7be1420c274c_hd.jpg)
可以看到这个pikaqiu在桌面,也就是C:UsersxinxiDesktop
- 先来说一下虚拟目录
我们怎么才能访问这个aaa.jsp呢,直接把这个pikaqiu复制到tomcat安装目录下的webapps下就行了吧
![](https://pic4.zhimg.com/80/v2-7eada7eeccbe86462d8bf9c61bb79ce1_hd.jpg)
![](https://pic1.zhimg.com/80/v2-92bb21dd390568a3657a0c5531babb45_hd.jpg)
先把webapps下的删了啊,还有tomcat安装目录下的work目录也删了。去Tomcat安装目录conf[enginename][hostname]目录(我这里enginename是Catalina,hostname是localhost)下建立一个xml文件,注意文件名为映射的虚拟路径,就是你浏览器地址栏里面要写的
![](https://pic2.zhimg.com/80/v2-9449528346337613256ed349f033bcbd_hd.jpg)
![](https://pic1.zhimg.com/80/v2-44531fe38e8b181d881bcf1f44d00b01_hd.jpg)
我突然发现好像还得再说一种方法才行,我特么都写到下面eclipse了才发现,真是哔了狗了
![](https://pic3.zhimg.com/80/c94d321582e0d36998516261aa0f5193_hd.jpg)
这种方法就是修改Tomcat安装目录confserver.xml,在元素中增加一个子元素<Context path="/abc" docBase="C:/Users/xinxi/Desktop/pikaqiu"/>,然后再访问http://localhost/abc/aaa.jsp就行了,浏览器访问效果和上面一样。
![](https://pic1.zhimg.com/80/v2-2eae413bbe5b6deaf3493b8e1ba0a76c_hd.jpg)
- 现在来搞默认的目录
上面的访问都是http://localhost/[虚拟目录]/aaa.jsp,现在要直接http://localhost/aaa.jsp
webapps下有一个ROOT文件夹,他是干嘛的?他也是一个web应用啊,我们装好tomcat之后
![](https://pic3.zhimg.com/80/v2-d0c01f9d2e8b38ccc66e98b265923e19_hd.jpg)
现在把pikaqiu复制到webapps下,然后重命名为ROOT,当然你要把它原来的ROOT删了,或者改成其他名字。再把tomcat跑起来
![](https://pic4.zhimg.com/80/v2-eaf5fa9247988644692519d555b8137f_hd.jpg)
![](https://pic4.zhimg.com/80/v2-081395c1a334d254dc0a0e4480a23f48_hd.jpg)
再说一下另外一种方法
![](https://pic3.zhimg.com/80/c94d321582e0d36998516261aa0f5193_hd.jpg)
上面配置虚拟目录时,最后说的方法是在server.xml中增加一行,现在呢你把path="/abc"改成path=""就行了。然后访问http://localhost/aaa.jsp就可以了。
![](https://pic4.zhimg.com/80/v2-326b523f27b4254d238ec1ae1d68baca_hd.jpg)
- Tomcat多实例
除了装两个tomcat,还有没有办法跑两个呢,是有的,就是多实例啦。我现在的tomcat装在F: esourceapache-tomcat-8.0.37的,上面截图可以看到我没有指定端口,嗯,我想说的就是这个tomcat监听的端口是80。
现在我在桌面建一个文件夹,再把F: esourceapache-tomcat-8.0.37conf复制到这个文件夹中,然后把端口改一下(我改成了9090)
![](https://pic2.zhimg.com/80/v2-c350a7827113c6394001e41aa8014dd3_hd.jpg)
再在这个文件夹中新建一个bat文件,内容大致如下:
set "CATALINA_BASE=%cd%"
set "CATALINA_HOME=F:
esourceapache-tomcat-8.0.37"
set "EXECUTABLE=%CATALINA_HOME%incatalina.bat"
call "%EXECUTABLE%" start
嗯,就是下面这个样子了
![](https://pic4.zhimg.com/80/v2-fb5567e6fa3b940ef7fda949b236f981_hd.jpg)
![](https://pic1.zhimg.com/80/v2-0b7fbabcc1a1692b8c4e6ae23a4ad678_hd.jpg)
![](https://pic4.zhimg.com/80/v2-6122c40d1ab18d760003bf1c8026ecff_hd.jpg)
![](https://pic4.zhimg.com/80/v2-8adc71c1be7a8b7f0868f33c294b2455_hd.jpg)
![](https://pic2.zhimg.com/80/v2-f230bc7f509542e66e811e02fcfba35d_hd.jpg)
到现在为止,老哥,稳。
- MyEclipse中tomcat
他直接把你的应用复制到Tomcat安装目录下的webapps中,然后再把tomcat跑起来,没毛病。
![](https://pic3.zhimg.com/80/v2-6978a6cdb0ff5bb5f93649ca407f6e5f_hd.jpg)
- eclipse中tomcat
这个和MyEclipse不一样啊,他不是复制到webapps下面的,题主说不知道它部署去了哪里,其实这个很好搞到啊。在eclipse中新建一个web应用,然后弄一个jsp文件,内容见图,跑起来就知道它部署到哪里去了
![](https://pic1.zhimg.com/80/v2-07014513a1916f16c2247c85b0b01252_hd.jpg)
![](https://pic2.zhimg.com/80/v2-78424790bbae2177a728abe8eacbaf06_hd.jpg)
![](https://pic4.zhimg.com/80/v2-b1d2f8117a526c1e6144a083702dfd64_hd.jpg)
现在有一个问题,我们到在wtpwebapps下瞧瞧
![](https://pic2.zhimg.com/80/v2-f6a4f9b3188bd50d9ce51c0e1aa804b0_hd.jpg)
![](https://pic3.zhimg.com/80/v2-e90f0060176d9b92ffd9ce1e3c0d3fcb_hd.jpg)
还有一个问题,eclipse是如何启动这个tomcat实例的,上面我们自己手动弄tomcat实例的时候弄了一个startup.bat文件,里面最主要就是配置了CATALINA_BASE对吧,那eclipse又是怎么搞的呢?这个问题先留着后面一起说。
- Intellij IDEA中的Tomcat
和上面一样的办法可以搞到它部署到哪里去了
![](https://pic3.zhimg.com/80/v2-9eef0f14feda9dfdc87da4a5e79c9ac9_hd.jpg)
![](https://pic4.zhimg.com/80/v2-038ce86a92e8354b6ea34146c929bc12_hd.jpg)
![](https://pic1.zhimg.com/80/v2-f5498ca71023ad669d6d332a58a128e5_hd.jpg)
![](https://pic4.zhimg.com/80/v2-f66ab24b17fde0b6cd81a7956128def2_hd.jpg)
![](https://pic3.zhimg.com/80/v2-4284b167c6605da69449448785c403aa_hd.jpg)
上面eclipse是怎么搞的,在server.xml下增加Context元素对吧,IDEA不是这样的,它是在conf[enginename][hostname]目录下增加xml文件。看上面的截图,我直接访问http://localhost就可以了,这说明,他把我的这个名叫JavaWeb的应用弄成了默认的,按照上面说的,应该在conf[enginename][hostname]目录下增加一个ROOT.xml吧。啊,它就是这么搞的
![](https://pic1.zhimg.com/80/v2-99f5fca547f7a0a6c60ece5ec3d2aff8_hd.jpg)
- IDE是如何启动tomcat实例的
set "CATALINA_BASE=%cd%"
set "CATALINA_HOME=F:
esourceapache-tomcat-8.0.37"
set "EXECUTABLE=%CATALINA_HOME%incatalina.bat"
call "%EXECUTABLE%" start
这是在干嘛啊,设置了CATALINA_HOME和CATALINA_BASE,然后用catalina.bat去吧tomcat跑起来。
![](https://pic4.zhimg.com/80/v2-54de13f5a19aacc4056e2147beb299d1_hd.jpg)
好,双击我们自己写的startup.bat把我们自己的tomcat实例跑起来,使用jps工具看一看启动参数,tomcat本身是一个Java程序,运行在Java虚拟机上的,所以你懂的。
![](https://pic1.zhimg.com/80/v2-c6477218a19b203c52aaba30a153be45_hd.jpg)
在eclipse中启动tomcat
![](https://pic3.zhimg.com/80/v2-986d0648cfdea4ae620af58d5056215f_hd.jpg)
![](https://pic4.zhimg.com/80/v2-e93827549ca8c942eed5612c381415c8_hd.jpg)
![](https://pic3.zhimg.com/80/v2-bac1a5f56f895da459469636208cdc73_hd.jpg)
![](https://pic2.zhimg.com/80/v2-4ed91afd6d239cbf9f201b1c0bf1ade4_hd.jpg)
![](https://pic1.zhimg.com/80/v2-290da888297e00d01645694c906f3583_hd.jpg)
![](https://pic3.zhimg.com/80/v2-be21f8e6cc8711313c1ac978fd2da734_hd.jpg)
![](https://pic4.zhimg.com/80/bd189d21d8e56bc35d5f8342b5673435_hd.jpg)
- 配置 CATALINA_BASE
- 启动 Tomcat
CATALINA_BASE是 tomcat 配置目录,具体可以看Tomcat官方文档 Apache Tomcat 8 (8.5.9) - Introduction,题主的问题也可以在里面得到解答,详情请看下面实例。
![](https://pic1.zhimg.com/80/v2-62346de845695584d8e78ecc70f4d627_hd.jpg)
==============================分割线================================
- 下载一个全新的 tomcat 放在C:JavaTomcat-8080,不作任何修改,启动,默认端口8080
此时webapps下的项目如下 - 在 idea 配置刚刚下载的 tomcat:
部署项目并更改端口为8111: - 启动 tomcat,观察启动日志(此时 tomcat 使用端口已经变成8111):
这时候咱们打开 CATALINA_BASE这个目录看一下:
没发现webapps,再回到 tomcat 的 webapps 目录,这时候可以看到原来的 ROOT 项目已经被配置换成实例中的 monitor 项目了
============================又一个分割线============================
所以,根据实例观察咱们可以得出以下结论:
idea 在启动 tomcat 的时候通过 CATALINA_BASE 修改了logs、conf和work的配置,webapps没动,如果没配置子域名就会自动覆盖原有的ROOT项目
最近写了一个tomcat的插件,支持社区版,特点就是不需要拷贝项目的web资源到其他目录,通过修改server.xml来配置contexpath和classpath。在不改变方法签名都可以做到热部署,不需要重启服务器。修改jsp也会自动更新的。
插件名叫smart tomcat,可以尝试一下,有问题可以反馈一下。1. 在java文件夹下面的资源文件,如properties xml文件之类的资源 idea打war包部署的时候默认并不会加载,在article里面可以配置加载
2. tomcat配置的时候把两个更新都设置成update class and source 否则修改jsp文件或者freemarker之类的模板文件刷新浏览器不会有任何卵用
3. 对于maven项目,如果super pom文件中写了profile,直接启动会加载第一条,gradle项目同理会加载第一条task
4. 如果是maven或者gradle项目打jar包的时候别从article中配置,它会把所有的依赖也打进去,让你的jar包非常的大。正确的姿势是直接使用idea中相对应的插件,或者用批处理命令。
5. 用手机打这么多字,如果觉得有用请点个赞,有问题想咨询可以私信。
6. 以上