简单部署流程:

1,解析域名关联到服务器ip

2,配置服务器jre运行环境

3,安装tomcat

4,项目打war包,放入tomcat根目录下webapps(tomcat默认加载的项目目录)目录下

5,启动运行

Tomcat增加Context配置导致启动的时候项目加载两次

转自:https://segmentfault.com/a/1190000002985203

Tomcat排雷笔记

1. 出现场景
eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/
现在需要改成这样访问http://localhost
修改tomcat的server.xml文件,增加如下配置<Context path="" docBase="myapp" reloadable="false"/>,修改后host部分如下:

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

        <!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
--> <!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context path="" docBase="myapp" reloadable="false"/> </Host>

此时每次启动tomcat观察日志都会发现应用加载了两次,什么原因呢?

2. 问题原因

虚拟目录引起的问题,我们在Host标签里配置了appBase="webapps",tomcat加载一次应用。在里配置了一次docBase,tomcat又去加载一次应用。

3. 解决办法

将appBase="webapps"置为appBase="",docBase="myapp"置为docBase="webapps/myapp"。配置如下:

<Host name="localhost"  appBase=""
unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
--> <!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context path="" docBase="webapps/myapp" reloadable="false"/> </Host>

说明:如果你的项目中的链接或者图片写的都是绝对路径的话,那么带有项目名称的绝对路径是不可以使用的。作者这句话不明白什么意思,不懂这句话和上文有什么关联,一般情况下没人会在web项目中使用绝对路径吧,,如果本地绝对路径上的资源和服务器上保持同步的话应该可以使用吧。

tomcat 部署多个项目的技巧  

转自:https://segmentfault.com/a/1190000005942191

方法一、在tomcat的根目录下的 conf文件夹下的server.xml文件中的<Host>标签中加入:

//docBase: 项目的webRoot  path:访问路径  reloadable:是否每次都重新加载
<Context path="/PD_Microportal" docBase="E:\WorkSpace\PD_Microportal\WebContent" debug="0" reloadable="false"/>

然而上面对于多个项目的频繁切换就需要注释来注释去的很麻烦有木有!往下看还有更简单的....

方法二、在tomcat的根目录下的 conf\Catalina\localhost文件下新建xml文件,文件名就是你项目的的path,可以随意起,就是在浏览器上访问的路径名称。你想同时部署几个工程就创建几个xml 注意文件名别重名。然后把这个:

<Context path="" docBase="E:\WorkSpace\项目名称\WebContent" debug="0" reloadable="false"/>

放到你新建的xml文件中。例如:我有以下三个工程: OA、CRM、ERP,那么就需要有oa.xml、crm.xml、erp.xml。然后再新建一个文件夹tep(名字随意),这个文件夹用来存放不需要部署的项目的xml文件。比如:我现在不想部署OA这个项目,那么直接把oa.xml放到tep文件夹下就ok了,下次想部署了在拿出来就是了,有木有很方便呢!

tomcat配置自己的ROOT项目

当path为空时,访问localhost默认指向docBase指向的项目目录(在tomcat自动解压war包时自动把项目名称改为了ROOT)

<Context path="" docBase="E:\WorkSpace\项目名称\WebContent" debug="0" reloadable="false"/>

或者直接修改项目名字为ROOT,效果同上

我的部署最佳实践

忽略webapps目录和name为localhost的Host标签,直接配置我们自己的Host。

以下可能是通用的配置方案。

一个域名,多个项目的情景:

假如域名为www.domain.com

假如在c盘建立文件夹a和文件夹b,b目录下存放一个名为demo的项目。

注意:文件夹a最好不要放任何项目(避免Context中指定了相同的项目导致项目重复加载),文件夹b下放我们要部署的项目war包或已经解压过的项目。

配置如下:

<Host name="www.domain.com"  appBase="c:\a"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="c:\b\demo" reloadable="true"/>
</Host>

这样一个配置,当启动tomcat时,它首先去Host标签的appBase属性指定的c:\a目录下检查是否存在项目,如果是war包则自动解压(解压的目录为当前目录)并加载,如果是目录则直接加载。之后检查Context标签的docBase属性指定的c:\b\demo路径是一个项目目录还是一个war包,如果是一个项目目录那么直接加载,如果是一个war包,那么解压到appBase指定的目录下,再加载。另外注意这里context标签的path属性配置为空,如果demo是个war包的话解压时会以ROOT的去命名解压后的目录(如果path不为空,那么以path指定的字符串去命名)。

配置完成后,浏览器输入www.domain.com将访问到demo这个项目,这是因为path配置是空的。

如果新增了一个项目demo2,那么我们插入一个Context就可以了:

<Host name="www.domain.com"  appBase="c:\a"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="c:\b\demo" reloadable="true"/>
    <Context path="demo2" docBase="c:\b\demo2" reloadable="true"/>
</Host>

注意path不要重复。

多个域名,多个项目的情景:

我基于上个例子新增了文件夹c和文件夹d:

<Host name="www.domain.com"  appBase="c:\a"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="c:\b\demo" reloadable="true"/>
    <Context path="demo2" docBase="c:\b\demo2" reloadable="true"/>
</Host>
<Host name="www.domain2.com" appBase="c:\c"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="c:\d\demo" reloadable="true"/>
    <Context path="demo2" docBase="c:\d\demo2" reloadable="true"/>
</Host>

这种把项目分开管理的配置很灵活并且避免了项目重复加载的问题(除非你不小心配置了两个相同的项目)。

演示一下为什么会重复加载:

例如c盘下有文件夹p,里面存在项目demo

可能我们的配置如下:

<Host name="www.domain.com"  appBase="c:\p"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="demo" reloadable="true"/>
</Host>

项目的base目录在c盘的p目录,然后配置p目录下的demo为ROOT项目,看起来这么配置好像没什么问题,但启动的时候你会发现,demo这个项目被加载了两次,这是因为Host标签appBase属性指向的目录下的所有项目都会被加载,然后Context标签配置的docBase指定的项目又加载了一次。这就导致了重复加载,只要分开部署就可以解决这种问题了。

我们的服务器目录结构:

tomcat下部署项目的流程和遇到的问题笔记的更多相关文章

  1. linux下tomcat下部署项目如何打包压缩备份

    范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩![root ...

  2. 在tomcat下部署工程

    xx系统第一期工程完成,今天老大要我去部署系统,从来就没有在tomcat下部署过,一直都是在myeclipse下部署.启动.运行即可,所以这次遇到了几个问题,记录下来. tomcat启动 在安装tom ...

  3. JFinal 项目 在tomcat下部署

    原文:http://my.oschina.net/jfinal/blog/353062 首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任 ...

  4. 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)

    在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...

  5. tomcat下部署了多个项目启动报错java web error:Choose unique values for the 'webAppRootKey' context-param in your web.xml files

    应该是tomcat下部署了多个项目且都使用log4j. <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root". ...

  6. 一个Tomcat下部署多个项目异常:org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean 的解决方法

    内容简介 在测试服务器上Tomcat下部署两个Spring boot项目,总是一个能启动成功,另一个启动不成功.这两个war包单独部署均能正常启动. 查看日志:启动时报出 org.springfram ...

  7. Java Web开发: Tomcat中部署项目的三种方法

    web开发,在tomcat中部署项目的方法: 可以参考http://m.blog.csdn.net/blog/u012516903/15741727 定义$CATALINA_HOME指的是Tomcat ...

  8. eclipse maven项目中使用tomcat插件部署项目

    maven的tomcat插件部署web项目,我简单认为分两种,一种是部署到内置tomcat,另一种是部署到安装的tomcat. 第一种部署,默认是部署在内置tomcat的8080端口,如果不需要改端口 ...

  9. log4j和web.xml配置webAppRootKey 的问题(一个tomcat下部署多个应用)

    转自:http://blog.csdn.net/arvin_qx/article/details/6829873 在tomcat下部署两个或多个项目时,web.xml文件中最好定义webAppRoot ...

随机推荐

  1. http 与 TCP 与 socket 定义,区别

    http://blog.csdn.net/jenminzhang/article/details/47017741 http协议:处于互联网协议的应用层,角色是规定数据传输的格式,http是建立在so ...

  2. CPU和微架构的概念

    CPU是什么: 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit). 它的功能主要 ...

  3. A. Minimizing the String

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. echarts设置线条粗细

    series: [ { name:"buy", type:'line', data:[], itemStyle: { normal: { color: '#6cb041', lin ...

  5. 你不得不知道的5个神奇的Docker工具

    Docker社区非常活跃,每天都会推出大量有用的工具.要想持续追踪社区中发生的各项创新其实非常困难.为了帮助你,我收集了一些每天在日常工作中使用.令人感兴趣并且十分有用的Docker工具.这些工具消除 ...

  6. IDEA中如何添加jar包

    File -> Project Structure -> Libraries -> + -> jar -> 选择classes

  7. eclipse使用STS插件 报错:SocketTimeoutException: Read timed out

    新建boot项目后,提示: SocketTimeoutException: Read timed out 解决: 在eclipse.ini末尾,追加: -Djava.net.preferIPv4Sta ...

  8. 研磨设计模式学习笔记2--外观模式Facade

    需求:客户端需要按照需求,执行一个操作,操作包括一个系统中的3个模块(根据配置选择是否全部执行). 外观模式优点: 客户端无需知道系统内部实现,,只需要写好配置文件,控制那些模块执行,简单易用. 外观 ...

  9. 键盘接收用户输入案例2(案例内容包含键盘接收 int、String、Char、double、boolean)等类型及介绍

    int类型: int age = input.nextInt();    double类型: double score = input.nextDouble(); String类型: String n ...

  10. 错误:子进程 已安装 pre-removal 脚本 返回了错误号 1

    解决办法 sudo rm /var/lib/dpkg/info/<package name>.*