zoukankan      html  css  js  c++  java
  • tomcat部署问题

    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,啊,就是下面这样


    可以看到这个pikaqiu在桌面,也就是C:UsersxinxiDesktop



    • 先来说一下虚拟目录

    我们怎么才能访问这个aaa.jsp呢,直接把这个pikaqiu复制到tomcat安装目录下的webapps下就行了吧

    然后把这个tomcat跑起来,访问,后面我就不说了,浏览器地址栏里有
    现在,我不想把这个pikaqiu复制到webapps目录下,让它留在桌面,这要怎么搞呢?
    先把webapps下的删了啊,还有tomcat安装目录下的work目录也删了。去Tomcat安装目录conf[enginename][hostname]目录(我这里enginename是Catalina,hostname是localhost)下建立一个xml文件,注意文件名为映射的虚拟路径,就是你浏览器地址栏里面要写的
    再把tomcat跑起来
    再说一遍啊这玩意儿少说也有4~5种方法,嗯,一定是这样的。
    我突然发现好像还得再说一种方法才行,我特么都写到下面eclipse了才发现,真是哔了狗了

    这种方法就是修改Tomcat安装目录confserver.xml,在元素中增加一个子元素<Context path="/abc" docBase="C:/Users/xinxi/Desktop/pikaqiu"/>,然后再访问就行了,浏览器访问效果和上面一样。



    • 现在来搞默认的目录

    上面的访问都是http://localhost/[虚拟目录]/aaa.jsp,现在要直接http://localhost/aaa.jsp
    webapps下有一个ROOT文件夹,他是干嘛的?他也是一个web应用啊,我们装好tomcat之后

    这个东西就是那个ROOT了。
    现在把pikaqiu复制到webapps下,然后重命名为ROOT,当然你要把它原来的ROOT删了,或者改成其他名字。再把tomcat跑起来
    还和上面一样,我还想把pikaqiu留在桌面怎么办呢(还是和上面一样先把webapps下的与皮卡丘有关的都删了啊,再把work也删了),上面不是建了一个abc.xml,把它重命名为ROOT.xml就ok了,把Tomcat跑起来

    再说一下另外一种方法

    上面配置虚拟目录时,最后说的方法是在server.xml中增加一行,现在呢你把path="/abc"改成path=""就行了。然后访问就可以了。




    • Tomcat多实例
    一般是不是就跑了一个tomcat啊,可以多跑几个吧,你在C盘下装了一个tomcat,在D盘下也装了一个tomcat,把这两个都跑起来,是不是就是两个tomcat了(当然端口不能冲突啊)
    除了装两个tomcat,还有没有办法跑两个呢,是有的,就是多实例啦。我现在的tomcat装在F: esourceapache-tomcat-8.0.37的,上面截图可以看到我没有指定端口,嗯,我想说的就是这个tomcat监听的端口是80。
    现在我在桌面建一个文件夹,再把F: esourceapache-tomcat-8.0.37conf复制到这个文件夹中,然后把端口改一下(我改成了9090)

    再在这个文件夹中新建一个bat文件,内容大致如下:
    set "CATALINA_BASE=%cd%"
    set "CATALINA_HOME=F:
    esourceapache-tomcat-8.0.37"
    set "EXECUTABLE=%CATALINA_HOME%incatalina.bat"
    call "%EXECUTABLE%" start
    

    嗯,就是下面这个样子了

    简单解释一下,CATALINA_HOME就是你的Tomcat安装的位置,CATALINA_BASE就是你的这个实例的位置,默认的话这两个值是一样的。%cd%是什么东东呢
    现在双击这个startup.bat
    看到已经启动成功了,t1目录下也多了几个文件夹,现在t1就是一个tomcat实例了(现在访问是没有东西的,因为t1/webapps下什么都没有),你把web应用放到t1/webapps下一样的
    再比如最上面我们在Tomcat安装目录conf[enginename][hostname]目录下弄了一个abc.xml,现在是不是应该到t1conf[enginename][hostname]目录下弄啦,嗯,一定是这样的。




    到现在为止,老哥,稳。




    • MyEclipse中tomcat

    他直接把你的应用复制到Tomcat安装目录下的webapps中,然后再把tomcat跑起来,没毛病。

    默认这个Web Content-root和你的项目名是一样的,可以自己改,然后,唉,没有然后了,这图该有的都有了。
    • eclipse中tomcat

    这个和MyEclipse不一样啊,他不是复制到webapps下面的,题主说不知道它部署去了哪里,其实这个很好搞到啊。在eclipse中新建一个web应用,然后弄一个jsp文件,内容见图,跑起来就知道它部署到哪里去了

    啊,没错,它就在这个目录里面
    然后再向上一点
    是不是熟悉的面孔?我们把皮卡丘复制到这个webapps下面你说能访问不,很明显能啊对不对。这就是一个tomcat的实例嘛。
    现在有一个问题,我们到在wtpwebapps下瞧瞧
    可以看到这里面有两个,一个是我们的foo,还有一个ROOT,不过这个ROOT里面基本上什么都没有。如果我们的foo在webapps下,那没什么说的对吧,问题就在于它在wtpwebapps下啊,我们是如何访问到它的呢?去看一下这个tomcat实例的server.xml就知道了
    这些东西都是eclipse的插件自己给我们搞的,这个问题完啦。
    还有一个问题,eclipse是如何启动这个tomcat实例的,上面我们自己手动弄tomcat实例的时候弄了一个startup.bat文件,里面最主要就是配置了CATALINA_BASE对吧,那eclipse又是怎么搞的呢?这个问题先留着后面一起说。



    • Intellij IDEA中的Tomcat

    和上面一样的办法可以搞到它部署到哪里去了

    然后和eclipse一样,也搞了一个tomcat的实例,在下面这个地方
    我这里最后一个目录叫Unnamed_JavaWeb,这个名字目测是这样的(具体我不知道),下划线后面的是项目的名字,啊,我建的这个项目就叫JavaWeb然后下划线前面的应该是配置Tomcat时给起的名字,默认是Unnamed然而我已经改成Tomcat8了啊,唉,不理了,反正不重要。
    上面eclipse是怎么搞的,在server.xml下增加Context元素对吧,IDEA不是这样的,它是在conf[enginename][hostname]目录下增加xml文件。看上面的截图,我直接访问就可以了,这说明,他把我的这个名叫JavaWeb的应用弄成了默认的,按照上面说的,应该在conf[enginename][hostname]目录下增加一个ROOT.xml吧。啊,它就是这么搞的


    • IDE是如何启动tomcat实例的
    在说eclipse的时候留的这个问题,Intellij IDEA也是一样的,它们是如何启动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跑起来。

    可以看到这个CATALINA_BASE没有的话,它默认的值就是CATALINA_HOME对吧。
    好,双击我们自己写的startup.bat把我们自己的tomcat实例跑起来,使用jps工具看一看启动参数,tomcat本身是一个Java程序,运行在Java虚拟机上的,所以你懂的。

    在eclipse中启动tomcat
    用jps看一看
    在Intellij IDEA中启动tomcat
    最开始也有输出啊
    这个东西是catalina.bat里面输出的,后面红色的是Java日志输出的,然而eclipse那个控制台就显示了Java输出的东东。
    再用jps看一眼吧
    啊,写完了
    其实 idea 启动的 tomcat 的过程很简单,看一下启动日志就都明白了,题主会有这样的疑惑主要是对 tomcat 不熟悉:
    1. 配置 CATALINA_BASE
    2. 启动 Tomcat

    CATALINA_BASE是 tomcat 配置目录,具体可以看Tomcat官方文档 Apache Tomcat 8 (8.5.9) - Introduction,题主的问题也可以在里面得到解答,详情请看下面实例。



    ==============================分割线================================
    1. 下载一个全新的 tomcat 放在C:JavaTomcat-8080,不作任何修改,启动,默认端口8080

      此时webapps下的项目如下
    2. 在 idea 配置刚刚下载的 tomcat:

      部署项目并更改端口为8111:
    3. 启动 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. 以上
    你在idwea里新建tomcat的时候,已经把tomcat的映射目录建好了,你可以用idea启动tomcat的时候,最开始的启动日志会打印你的tomcat新建目录,可以去看看配置!就算是eclipse/myeclipse 也不是直接拷贝你的项目到webapp目录下吧,我没有记错的话!很久没用这两个东西了。
  • 相关阅读:
    [luoguP2486] [SDOI2011]染色(树链剖分)
    [POJ3162]Walking Race(DP + 单调队列)
    [HDU3586]Information Disturbing(DP + 二分)
    [luoguP1280] 尼克的任务(DP)
    [luoguP1282] 多米诺骨牌(DP + 背包)
    AOJ 0558 Cheese【BFS】
    POJ 3009 Curling 2.0【带回溯DFS】
    AOJ 0033 Ball【DFS】
    AOJ 0118 Property Distribution【DFS】
    POJ 1979 Red and Black【DFS】
  • 原文地址:https://www.cnblogs.com/ziq711/p/8358809.html
Copyright © 2011-2022 走看看