文档章节

JFinal 部署在 Tomcat 下推荐方法

JFinal
 JFinal
发布于 2014/12/06 11:35
字数 618
阅读 28322
收藏 158

   经常有人在群里问 tomcat 下项目部署的问题,现写个简单的博文,希望能帮助到有需要的人。

   首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别。Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写此文方便大家绕过一些坑,以下部署以 linux 为例,windows 与此类似:

1:创建一个目录:   /var/www

2:为将要部署的项目创建一个目录, /var/www/my_project

3:将项目打成 war 包, 然后解压到 /var/www/my_project

4:最终的目录结构为:/var/www/my_project/WEB-INF,也即 WEB-INF 在项目名称目录之下

5:修改  TOMCAT_HOME/conf/ server.xml 文件找到 Host 标记,在其中添加如下子标记: 

    <Context path="" docBase="/var/www/my_project" reloadable="false" />

6:注意 Host 标记中的 appBase 属性不要去修改,让其为默认值 "webapps"

7:启动 tomcat 打完收工

    第一个关键点:以上配置中项目是部署在了 TOMCAT_HOME/webapps 目录之外的,这样做是为了避免 tomcat 加载项目两次的坑,因为配置文件中如果配置了该项目会被加载一次,而项目在 webapps 下面又会被自动重复加载一次,这个坑会引发一些莫名奇妙的问题,例如:老版本的tomcat中,多人同时登录后session产生混乱,再例如:有些项目有定时任务,如果重复加载项目,那么定时任务也会被执行多次。所以记住第一点,永远不要将项目放在 TOMCAT_HOME/webapps 目录下面。

   第二个关键点:以上配置中的 Context 标记的 path 属性一定要设置为 "" 而不是 "/",否则也会跳入一个坑。 docBase 属性后面放项目名称的绝对地址, windows 下则是类似于这样的值: d:/www/my_project。

   简单说 tomcat 下配置分两步,一是在 webapps 目外之外建目录放项目,二是找 Host 标记放入 Context 子标记

  这里还有 tomcat 下 302 重定向问题的坑,可以提前预知一下:http://www.oschina.net/question/941098_93842?fromerr=l2fjHuvx

© 著作权归作者所有

共有 人打赏支持
JFinal

JFinal

粉丝 3957
博文 4
码字总数 2275
作品 3
海淀
CTO(技术副总裁)
私信 提问
加载中

评论(50)

走位风骚闪着腰
走位风骚闪着腰
tomcat重复加载导致定时任务跑2次
liop
liop

引用来自“tonyfox”的评论

请问一个tomcat下部署多个项目该怎么配置了?0
#此处输入软件名##此处输入软件名##此处输入软件名##此处输入软件名##此处输入软件名#
阿卡
阿卡
设计虚拟确实可以解决问题,但如果其他项目一期跑呢 那这个tomcat就不能用了,在某些特定条件下,不能随意改端口呢
12叔
12叔

引用来自“12叔”的评论

我一般 直接改名 为 ROOT.war 放在 webapps 下面 一个tomcat 放一个项目

引用来自“i_am_ajie”的评论

如果只有一个项目没问题,但是不止一个项目就不能这么玩了,tomcat配置页面会找不到
因为管理方式不同 我们不用那个嘛
i
i_am_ajie

引用来自“12叔”的评论

我一般 直接改名 为 ROOT.war 放在 webapps 下面 一个tomcat 放一个项目
如果只有一个项目没问题,但是不止一个项目就不能这么玩了,tomcat配置页面会找不到
windykyo
windykyo

引用来自“windykyo”的评论

如果我直接是用ROOT方式部署,应该不会有类似的问题了吧?
项目路径:TOMCAT_HOME/webapps/ROOT
TOMCAT_HOME/conf/ server.xml 文件下不添加<Context path="" docBase="/var/www/my_project" reloadable="false" />

引用来自“JFinal”的评论

可能仍然有问题,因为放在 webapps/ROOT 的项目默认会被加载一次,而通过 Host 标记配置的 Context 又再次被载一次,可以通过在项目启动时向日志里写一条数据进行验证

引用来自“windykyo”的评论

感谢回复,我的意思是root方式部署,只部署一个工程,然后server的xml里面,去掉context相关配置,只保留host。


简单加个Listenner试了下,这个监听器只往日志里写条数据,启动之后只有一条数据。
不知道这样验证对不对?

引用来自“JFinal”的评论

如果是 jfinal 项目,在 public void afterJFinalStart() 中添加写日志的代码, Listener 没有试过,不能确定。这种重复加载多次项目在很多时候是看不出来的,直到出现一些诡异的错误才能得知,例如:session 乱串,定时任务被调度双倍次数。我前面讲的写日志的方式或许无法验证

引用来自“windykyo”的评论

了解了。再次感谢解答。

引用来自“JFinal”的评论

如果想将项目部署在 webapps/ROOT 之下,建议去除 server.xml 配置中对该项目的配置项,包括其 Host 与 Context 配置,因为 ROOT 下的项目默认就会被加载
验证了下,去除配置后,tomcat启动就没法加载项目了。如下的这段host配置不能去掉。


apache-tomcat-7.0.69-windows-x64.zip 在该版本验证了下。 ROOT下的项目并咩有默认加载。
JFinal
JFinal

引用来自“windykyo”的评论

如果我直接是用ROOT方式部署,应该不会有类似的问题了吧?
项目路径:TOMCAT_HOME/webapps/ROOT
TOMCAT_HOME/conf/ server.xml 文件下不添加<Context path="" docBase="/var/www/my_project" reloadable="false" />

引用来自“JFinal”的评论

可能仍然有问题,因为放在 webapps/ROOT 的项目默认会被加载一次,而通过 Host 标记配置的 Context 又再次被载一次,可以通过在项目启动时向日志里写一条数据进行验证

引用来自“windykyo”的评论

感谢回复,我的意思是root方式部署,只部署一个工程,然后server的xml里面,去掉context相关配置,只保留host。


简单加个Listenner试了下,这个监听器只往日志里写条数据,启动之后只有一条数据。
不知道这样验证对不对?

引用来自“JFinal”的评论

如果是 jfinal 项目,在 public void afterJFinalStart() 中添加写日志的代码, Listener 没有试过,不能确定。这种重复加载多次项目在很多时候是看不出来的,直到出现一些诡异的错误才能得知,例如:session 乱串,定时任务被调度双倍次数。我前面讲的写日志的方式或许无法验证

引用来自“windykyo”的评论

了解了。再次感谢解答。
如果想将项目部署在 webapps/ROOT 之下,建议去除 server.xml 配置中对该项目的配置项,包括其 Host 与 Context 配置,因为 ROOT 下的项目默认就会被加载
windykyo
windykyo

引用来自“windykyo”的评论

如果我直接是用ROOT方式部署,应该不会有类似的问题了吧?
项目路径:TOMCAT_HOME/webapps/ROOT
TOMCAT_HOME/conf/ server.xml 文件下不添加<Context path="" docBase="/var/www/my_project" reloadable="false" />

引用来自“JFinal”的评论

可能仍然有问题,因为放在 webapps/ROOT 的项目默认会被加载一次,而通过 Host 标记配置的 Context 又再次被载一次,可以通过在项目启动时向日志里写一条数据进行验证

引用来自“windykyo”的评论

感谢回复,我的意思是root方式部署,只部署一个工程,然后server的xml里面,去掉context相关配置,只保留host。


简单加个Listenner试了下,这个监听器只往日志里写条数据,启动之后只有一条数据。
不知道这样验证对不对?

引用来自“JFinal”的评论

如果是 jfinal 项目,在 public void afterJFinalStart() 中添加写日志的代码, Listener 没有试过,不能确定。这种重复加载多次项目在很多时候是看不出来的,直到出现一些诡异的错误才能得知,例如:session 乱串,定时任务被调度双倍次数。我前面讲的写日志的方式或许无法验证
了解了。再次感谢解答。
JFinal
JFinal

引用来自“windykyo”的评论

如果我直接是用ROOT方式部署,应该不会有类似的问题了吧?
项目路径:TOMCAT_HOME/webapps/ROOT
TOMCAT_HOME/conf/ server.xml 文件下不添加<Context path="" docBase="/var/www/my_project" reloadable="false" />

引用来自“JFinal”的评论

可能仍然有问题,因为放在 webapps/ROOT 的项目默认会被加载一次,而通过 Host 标记配置的 Context 又再次被载一次,可以通过在项目启动时向日志里写一条数据进行验证

引用来自“windykyo”的评论

感谢回复,我的意思是root方式部署,只部署一个工程,然后server的xml里面,去掉context相关配置,只保留host。


简单加个Listenner试了下,这个监听器只往日志里写条数据,启动之后只有一条数据。
不知道这样验证对不对?
如果是 jfinal 项目,在 public void afterJFinalStart() 中添加写日志的代码, Listener 没有试过,不能确定。这种重复加载多次项目在很多时候是看不出来的,直到出现一些诡异的错误才能得知,例如:session 乱串,定时任务被调度双倍次数。我前面讲的写日志的方式或许无法验证
windykyo
windykyo

引用来自“windykyo”的评论

如果我直接是用ROOT方式部署,应该不会有类似的问题了吧?
项目路径:TOMCAT_HOME/webapps/ROOT
TOMCAT_HOME/conf/ server.xml 文件下不添加<Context path="" docBase="/var/www/my_project" reloadable="false" />

引用来自“JFinal”的评论

可能仍然有问题,因为放在 webapps/ROOT 的项目默认会被加载一次,而通过 Host 标记配置的 Context 又再次被载一次,可以通过在项目启动时向日志里写一条数据进行验证
感谢回复,我的意思是root方式部署,只部署一个工程,然后server的xml里面,去掉context相关配置,只保留host。


简单加个Listenner试了下,这个监听器只往日志里写条数据,启动之后只有一条数据。
不知道这样验证对不对?
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
JFinal-Beetl-Shiro(JdbcRealm)-例子

JFinal-Shiro-JDBC-Demo http://git.oschina.net/yinjun622/JFinal-Shiro-JDBC-Demo 简单实现@JFinal与Shiro整合例子 1、工程通过Eclipse直接导入,部署到tomcat中; 2、新建jfinalshiro数据......

leon_rock
2014/02/27
0
12
最近在做的一件事件编写JFinal教程《Jfinal极速开发实战》

从8月1号开始,整整一个月,初稿完成,朋友帮我第一次文字校对完成,现在正在根据波总的意见修改一些jfinal的设计原则说明 Jfinal、JfinalUIB学习交流QQ群:309647612 已经完成,前四章免费阅...

littleant
2015/08/20
0
12
piaohao/fast-jfinal

fast-jfinal jfinal项目以embed-tomcat或undertow的方式运行,无须打war包,无续部署tomcat 用appassembler-maven-plugin打包,然后运行bin目录中的脚本即可。 具体参见demo项目:fast-jfinal-...

piaohao
07/23
0
0
JFinal 中使用 Dubbo —— 1 改造JFinal Demo

Dubbo Demo概述 此Demo实际在2014年上半年就已经完成了,只是到最近才有时间和心情写完此文。同时,将JFinal升级到了1.9,并采用Maven构建项目。 另外,仔细想了想,Provider其实可以不依托T...

糊搞
2015/04/20
0
16

没有更多内容

加载失败,请刷新页面

加载更多

0008-如何卸载CDH(附一键卸载github源码)

1.前置条件 本文档将介绍Cloudera Manager与CDH的卸载,并基于CDH使用parcels安装且未配置安全(AD/LDAP, Kerberos, Data Encryption)的集群,以下是本次测试环境,但不是本操作手册的硬限制...

Hadoop实操
25分钟前
1
0
MySQL 安装配置 Windows下免安装配置

1 安装MySQL软件 1.1 下载MySQL 依据ipems_dvp产品选型需求,选择mysql-5.7.17-winx64。可自行从网上下载,也可从公司拷贝,以下为下载目录和公司归档目录。 下载地址:https://downloads.m...

PeakFang-BOK
33分钟前
2
0
遍历java项目后台线程

遍历java项目后台线程,加深对项目后台运行线程理解 直接贴代码 import org.springframework.stereotype.Service;import java.lang.management.ManagementFactory;import java.lang.man...

王俊博客
47分钟前
2
0
iOS切面编程

aop编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在iOS中,要想实现相似的效果也很简单,利用OC的动态性,...

RainOrz
54分钟前
2
0
PAT(Basic Level) 乙级练习题 ------ 1047 编程团体赛 java

1047.编程团体赛 题目: 编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。 现给定所有队员的比赛成绩,请你编写程序找...

Carol998
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部