简单部署流程:

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. jenkins在windows系统下部署安装,使用

    首先需要从官网上下载下来war包,让进入tomcat中 启动tomcat,然后可以看一堆日志 再在网站输入 localhost:8080/jenkins就会进去下面界面: 会出现上面状况: 需要进入: ...

  2. flex item的width VS flex-basis

    flexbox的子元素flex item的宽度,按照以下规则计算: content>width>flex-basis(limited by max/min-width) flex-basi ...

  3. Python:raw_input 和 input用法

    转自:http://blog.csdn.net/kjing/article/details/7450146 Python input和raw_input的区别 使用input和raw_input都可以 ...

  4. maven mirrorOf

    转载 http://blog.csdn.net/isea533/article/details/21560089 在maven中配置一个mirror时,mirror通常会设置成*,还有可能是一个具体的 ...

  5. 字符串 Instant 互转

    Instant inst = Instant.now(); System.out.println(inst);//2018-05-15T02:27:09.909Z String s1 = s.subs ...

  6. Java发送http请求(get 与post方法请求)

    转载:https://www.cnblogs.com/zzw1994/p/5140538.html

  7. zookeeper崩溃修复

    cat /etc/zookeeper/conf/zoo.cfg 找到dataDir=/var/lib/zookeeper 切换到路径/var/lib/zookeeper cd /var/lib/zoo ...

  8. 单点登录-JWT(Json Web Tokens)

    来自:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 1.跨域认证 1.用户向服务器发送用户名和密码. 2.服务 ...

  9. Problem09 求完数

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数". 分析:例如6=1+2+3. 编程找出1000以内的所有完数. 假如整数n除以m,结果是无余数的整数,那么我们称m就是n ...

  10. thinkphp的初步认识

    框架的意义减少重复劳动便于团队配合增强安全性工作/面试都需要 为什么学习ThinkPHP国内公司用的多框架基本都是MVC架构,学一则通 一.框架的部署 1.1下载tp官网 http://www.thi ...