您的位置:首页 > 运维架构 > Tomcat

Tomcat之web项目部署

2016-11-14 17:43 176 查看
Tomcat一般用于部署JavaWeb项目。

遇到的问题

Linux操作系统中,在tomcat中部署项目时,一般只需要把项目war包:
demo.war
放到
webapps
下,然后启动tomcat即可。这时项目的访问路径是:
http://serverpath/demo
,但实际上我需要
http://serverpath
就能访问到项目。

于是我修改了配置文件
tomcat/conf/server.xml


<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>

添加了`<Context/>元素`,修改为:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/"  docBase="demo" debug="0" reloadable="true"/>
</Host>

这样我就可以以
http://serverpath
访问
demo
项目。

问题:但这样会导致项目启动两次,由于
demo
项目中有定时任务,于是就会启动两个定时任务。这显然不是我想要,于是综合网上的资料,有如下解决方案。

想要的结果

可以以
http://serverpath
访问
demo
项目。

项目中的定时任务只启动一次,也就是项目只启动一次

解决办法

以我服务器配置为例,我的tomcat目录的绝对路径是
/opt/tomcat


webapps
同级中新建目录
webRoot
(目录名随意),把
demo.war
解压到
webRoot
下,最终路径为
/opt/tomcat/webRoot/demo


修改
tomcat/conf/server.xml
配置为:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/"  docBase="/opt/tomcat/webRoot/demo" debug="0" reloadable="true"/>
</Host>

注意:
docBase
的值是绝对路径。

最后确保只有
webRoot
下有
demo
,删除
webapps
下的
demo
,否则还是会启动两次

启动tomcat即可

其他问题

上面的解决办法会导致我配置的
log4j
无法打印日志文件到
logs
目录。

我的配置是:

<properties>
<property name="LOG_HOME" value="../logs"/>
</properties>

改为绝对路径即可:

<properties>
<property name="LOG_HOME" value="/opt/tomcat/logs"/>
</properties>

总结

以上虽能达到我想要的结果,但相当不灵活,而且无法自动解压包,需要手动解压。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: