作者: 陈宇超          纪念卓越班的日子


  初次用idea的小白可能会很感到很神奇,intellij idea部署web项目在浏览器不需要输入项目名就可以直接访问,很是方便啊。那么 intellij 是如何实现这一功能的呢?在了解其原理之前需要掌握一定的知识哦。

第一步 : 在本机上配置tomcat服务器,小白看看吧

首先:添加系统变量 CATALINA_HOME : C:\apache-tomcat-8.0.41
其次:添加环境变量 path : %CATALINA_HOME%\bin
--------------------------------------------------------------
启动 tomcat 服务器,打开你的cmd,输入以下命令
catalina  run    启动,在原窗口启动
catalina  start   启动,会打开一个新的dos窗口启动
catalina  stop   停止tomcat服务器

第二步 : 看看简短的启动信息,对于理解intellij的tomcat很关键

C:\Users\chenyuchao>catalina start
Using CATALINA_BASE: “C:\apache-tomcat-8.0.42”
Using CATALINA_HOME: “C:\apache-tomcat-8.0.42”
Using CATALINA_TMPDIR: “C:\apache-tomcat-8.0.42\temp”
Using JRE_HOME: “C:\Java\jdk1.8.0_101”

我们需要关注的是CATALINA_BASE与CATALINA_HOME的区别,这里虽然表示的路径是一样的,配置tomcat多实例的时候就会不一样了(后面会说).

【官方解释】
Throughout the docs, you’ll notice there are numerous references to CATALINA_HOME. This represents the root of your Tomcat installation. When we say, “This information can be found in your CATALINA_HOME/README.txt file” we mean to look at the README.txt file at the root of your Tomcat install. Optionally, Tomcat may be configured for multiple instances by defining CATALINA_BASE for each instance. If multiple instances are not configured, CATALINA_BASE is the same as CATALINA_HOME.

意思为 : CATALINA_HOME是Tomcat的安装目录,CATALINA_BASE是Tomcat的工作目录
目的在于 : 当你需要在一台机器上面部署多个Tomcat实例,但是你又不想创建多个Tomcat的副本,换句话说就是让这些Tomcat副本拥有自己的工作目录但是共享Tomcat的代码。(举个简单的例子,就好比你装了qq影音播放视频,你可以同时用QQ影音打开多个视频同时观看,这就是多实例,他们共享QQ影音这个主程序)

第三步 : Intellij idea 的基于我们给tomcat创建了新的实例

在Intellij中我们给web工程部署到tomcat服务器的时候,我们会有几个疑惑?
1. 为什么我们在tomcat的安装目录的webapps文件下找不到我们的工程 ?
2. 为什么我们明明在tomcat安装目录下的conf/server.xml中配置了虚拟目录,部署项目后仍然找不到路径。(文件上传的时候需要配置虚拟目录接收上传的文件,否则浏览器是无法访问我们上传的文件如图片等) 在intellij中应当如何配置虚拟目录呢?两种方式,后面会说
3. 如何去配置intellij在浏览器中的访问路径?

首先解决第一个问题----------------------------------------------
一般来说,intellij 会默认将web工程的输出到本工程目录下为out目录中, 原理后面说。
对于第二个问题  ----------------------------------------------
intellij idea中自己生成的tomcat实例存储路径如下:
C:\Users\{Username}\.IntelliJIdea2017.1\system\tomcat\Unnamed_{Product}_2\conf"
{Username}是你本机名,{Product}是你的工程名

你每次建的web项目都会分配一个独立的tomcat的实例,这里面conf文件夹下同样有一份tomcat配置文件,intellij在运行的时候用的就是这里的配置文件,这也是为什么你在tomcat安装目录中配置虚拟目录不起作用的原因了,吼吼!intellij 运行tomcat时只会依赖你安装目录中的lib和bin这两个文件夹中文件。

下面的是从intellij中部署项目到tomcat中所截取的一段日志
[2017-08-01 09:42:15,873] Artifact smvc:war exploded: Server is not connected. Deploy is not available.Using CATALINA_BASE:
"C:\Users\chenyuchao\.IntelliJIdea2017.1\system\tomcat\Unnamed_springmvc_2"

注意 ! ! !这里的catalina_base指向的不再是tomcat的安装目录了,而是我们项目所配置的tomcat实所在的目录。

第四步 : 为了更好的理解,自己动手配置一个tomcat实例

首先在桌面上新建一个文件夹tomcat-ins,然后从tomcat的安装目录中复制一些必要的文件到我们的文件夹,因为libbin这两个文件夹内容是所有tomcat实例共享的,不需要复制。

复制过来的文件稍微修改一下,清空一下webappslogwork目录内容,并手动创建三个启动tomcat实例的批处理文件

这些批处理文件内容如下

runCatalina.bat的代码如下 ,,,,,在当前控制台启动 %cd%代表当前目录

set “CATALINA_BASE=%cd%”
set “EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat”
call “%EXECUTABLE%” run
----------------------------------------------------------
startCatalina.bat的代码如下,,,,,新开dos窗口启动

set “CATALINA_BASE=%cd%”
set “EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat”
call “%EXECUTABLE%” start
----------------------------------------------------------
stopCatalina.bat的代码如下,,,,,关闭tomcat服务器

set “CATALINA_BASE=%cd%”
set “EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat”
call “%EXECUTABLE%” stop
pause

Tip :启动前在配置文件中修改一下相关的端口,这样多个tomcat启动就不会冲突
最后,部署一个项目到我们的tomcat服务器上去,当然这里部署方式有很多种,最简单的就是部署到tomcat-ins/webapps目录下,但是貌似在浏览器访问就必须加项目名,吼吼!所以我们还是学习intellij部署项目的方式吧,那样我们自己也可以随便改变访问根路径了!!!

第五步 :学习intellij,部署一个项目到我们的tomcat实例

在tomcat-ins/conf/Catalina/localhost文件夹下(如果没有该目录,手动新建)新建一个xml文件

如果你想部署工程在跟目录下,url访问形同 http://localhost:8080/ 就可以直接访问index.jsp,这个xml文件的名字必须为ROOT.xml, 着重强调,这里的root四个字母必须全大写
文件内容如下

说明 : path在这里必须为空字符,如果不是空字符串也没关系,不会有影响,建议按照规范来!指的是浏览器访问的uri,docBase 指的是我们项目所在的文件夹。
既然这里的docBase只要指向的是我们的工程目录就可以随意设置,也就验证了intellij的项目输出目录没有部署到webapps下的原因了

----------------------------------------------------------

如果你想部署工程在dir1下,url访问形同 http://localhost:8080/dir1就可以直接访问index.jsp,这个xml文件的名字必须为dir1.xml,也就是说xml的文件名与你的访问路径直接挂钩
文件内容如下

注意:这里的path规范化要与你的文件名一致,如果不一致,tomcat8仍会以文件名作为访问路径,忽略此path

----------------------------------------------------------

如果你想部署工程在dir1/dir2下,url访问形同 http://localhost:8080/dir1/dir2就可以直接访问index.jsp,这个xml文件的名字必须为dir1#dir2.xml,注意以#号分隔多层目录
文件内容如下

接着双击startCatalina.bat就可以启动我们建立的tomcat实例了。

看看Intellij的localhost目录有什么,你就知道原因了,intellij就是这样做的

附加 : Intellij idea上部署虚拟目录,解决文件上传问题

错误的做法:上面我们讲到,每个web工程都配置了自己的tomcat配置文件夹,那么我们去改它里面的conf/server.xml,在其host节点中添加一个

这样的虚拟目录配置。
结果自然也是无效的,因为每次intellij部署项目对应的tomcat实例就重新生成一边,图片中的文件全部删除再重建,所以我们修改配置文件无效。

正确的做法:
方法一、intellij中添加虚拟目录


,纠正一下,图片中的服务器改为浏览器,看看结果

方法二、修改tomcat安装目录中server.xml文件,添加一条虚拟目录配置,再勾选如下配置

勾选上图,intellij就会在每次部署项目到tomcat上前,将对比自己生成的server.xml文件与tomcat安装目录下的server.xml文件不同之处,两个文件合二为一,作为最终的tomcat配置文件

附加 : 多个项目部署在相同路径访问的是哪一个项目?没事不要这么干!!

<1>现在有一种情况就是在webapps中有一个项目A ,文件夹名smvc

<2>在conf\catalina\localhost中有个smvc.xml配置文件,加载的是项目B,

<3>在conf\server.xml有个context配置,path为/smvc,加载的是项目C,

那么我们在浏览器中输入http://localhost:8080/smvc 访问的是哪一个项目呢 ?

答案:访问的是项目C,

三种方式拥有的优先级顺序是 <3>大于<2>,<2>大于<1>

Intellij idea 的tomcat原理讲解相关推荐

  1. IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?

    文章目录 前言 一.将 Tomcat 集成到 IDEA 中 1.1.进入 IDEA Tomcat 配置页面 1.2.配置并集成 Tomcat 1.3.配置完成说明 1.4.集成检查 1.4.1.检查主 ...

  2. Tomcat原理系列之四:Tomat如何启动spring(加载web.xml)

    Tomcat原理系列之四:Tomat如何启动spring 熟悉的web.xml ContextLoaderListener Tomcat的初始化StandardContext.startInterna ...

  3. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解

    PHP 伪静态实现技术原理讲解 发布于 2015-01-18 23:52:58 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  4. nginx反向代理原理讲解

    一 .概述                  反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果 ...

  5. Tomcat 原理篇

    TOMCAT 原理篇 一.Tomcat 组成(Tomcat 由以下组件组成) 1.server a) Server是一个Catalina Servlet容器: b) Server 可以包含一个或多个s ...

  6. 微信小游戏开发教程-2D游戏原理讲解

    微信小游戏开发教程-2D游戏原理讲解 原理 为了更加形象的描述,这里先上一张图: 背景 a. 首先,我们看到背景好像是一张无限长的图片在向下移动.实际则不然,这是一张顶部和底部刚好重叠的图片.这是一种 ...

  7. 解密汽车全景行车安全系统的前世和今生——第二讲:原理讲解

    解密汽车全景行车安全系统的前世和今生--第二讲:原理讲解 来源:深圳市汽车电子行业协会 作者:姜卫忠 发布时间:2013-3-7  浏览(4648)次 解密汽车全景行车安全系统的前世和今生 第二讲:全 ...

  8. IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页

    IntelliJ IDEA启动Tomcat后,却无法访问Tomcat首页? 如下: 可以访问web项目 却无法访问Tomcat主页!!!! 为什么呢? 我们的项目的工件输出目录在图一红框框出来的地方, ...

  9. intelliJ Idea 添加 Tomcat部署(详细步骤)

    使用 IDEA 编辑器开发项目十分便捷,这里介绍使用 IDEA 编辑器添加 Tomcat 详细的记叙了intelliJ Idea中Tomcat的部署,主要是在Tomcat部署的时候一些细节性的东西. ...

最新文章

  1. Linux从零开始(二、基础命令)
  2. Vivado中RTL封装IP流程
  3. 如果再这么玩下去,中国的科研就没戏了
  4. 学计算机的如何学英语,怎么在电脑上学习英语
  5. 第三章 熟悉常用的HDFS操作
  6. IT项目管理-----给年轻工程师的十大忠告
  7. flex include和import
  8. Android Binder实战开发指南之开篇
  9. pdg转pdf的正确方法!!
  10. Axure原型图(以微信作为参考)
  11. 定时器之多层级时间轮
  12. html电子名片,HTML5 精美的双面电子名片
  13. 如何安装Win10/Ubuntu双系统
  14. linux 7 查看网卡配置文件,如何查询centos网卡配置文件
  15. chan算法 matlab,TDOA定位的Chan算法MATLAB源代码
  16. 后端框架flask学习小记
  17. 腾讯云HiFlow场景连接器
  18. 计算机基础知识-进制的运算
  19. GetElementById
  20. c++之 std::tie

热门文章

  1. csgo下方各种数据都是意思_CSGO中的经典名梗众多,但是你知道它们的来历吗?...
  2. VisionMaster脚本调试(VS)
  3. TK教主:和玄武实验室有关的几个故事 | 人物志
  4. Windows(2003/2008/2012)弹性云系统盘扩容方法
  5. cocostudio导出数据在代码中加载
  6. PartMaker 走心机车削 车铣编程视频教程 PartMaker资料
  7. 两个自变量和一个因变量spss_SPSS学习笔记:因变量二分类资料的logistic回归分析...
  8. win10控制面板里没java_win10安装java以及java配置遇到的坑
  9. 自学用——移动端布局(要点)
  10. Android应用程序开发以及背后的设计思想深度剖析(4)