文档章节

JFinal 部署在 Tomcat 下推荐方法

JFinal
 JFinal
发布于 2014/12/06 11:35
字数 618
阅读 25318
收藏 155
点赞 64
评论 50

   经常有人在群里问 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

粉丝 3923
博文 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
JFinal 中使用 Dubbo —— 1 改造JFinal Demo

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

糊搞
2015/04/20
0
16
JFinal2.0开启Server后启动其他插件

最近同事在搞JFinal动态添加数据源配置,多亏了JFinal2.0的出现,才很方便的解决了这个问题。 我看他代码时,无意中发现插件还需要调用start()方法,于是就思考在总配置类里面配置插件之后是...

夜辰
2015/07/04
0
0
给JFinal添加 Sqlite 数据库支持

Sqlite 的单文件便携性、高性能在开发中方便性无与伦比,即使部署在中小型应用中也胜任有余。 在JFinal中添加对 Sqlite 的支持 Step by Step: 1、点击 http://www.xerial.org/maven/reposi...

子午
2012/07/31
0
4
JFinal 整合Quartz

项目中要加入调度和计划任务等功能,所以选择Quartz调度插件,原先都是在S2SH上整合的。现在项目用JFinal框架,不得不说JFinal框架的定制性真好,可以自己根据项目要求进行修改,并且很节省时...

超级大富
2014/03/09
0
20
JFinal针对ORACLE的timestamp字段解决办法

JFinal是个比较不错的的框架,但JFinal起源时使用mysql数据库,因此在对数据库支持方面还没有达到完美。 本人使用JFinal有一段时间的,由于项目的数据库普遍采用oracle,在使用oracle过程中遇...

真的农夫三拳
2013/06/23
0
6
JFinal极速开发实战教程新鲜出炉~

JFinal极速开发实战教程新鲜出炉~ [持续更新中...] JFinal框架让 IT 工程师发挥更大的潜能,实现更大价值,同时也希望 JFinal 工具力量能帮助正在创业的朋友们提升效率、降低成本从而实现创业...

山东-小木
2015/01/07
0
13
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉...

木川瓦兹
2013/04/25
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
10分钟前
0
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
17分钟前
0
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
21分钟前
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
0
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0
iptables规则备份和恢复、firewalld的9个zone以及操作和service的操作

保存以及备份iptalbes规则 设定了的防火墙规则要进行保存,否则系统重启后这些规则就没有了,使用命令 ”service iptables save ” 会把设定好的防火墙规则保存到文件/etc/sysconfig/iptabl...

黄昏残影
昨天
0
0
k8s image

k8s.gcr.io/kube-apiserver-amd64:v1.11.0k8s.gcr.io/kube-controller-manager-amd64:v1.11.0k8s.gcr.io/kube-scheduler-amd64:v1.11.0k8s.gcr.io/kube-proxy-amd64:v1.11.0k8s.gcr.......

分秒
昨天
0
0
数据结构--排序

这篇博客包含了数据结构中多种的排序算法: (1)简单选择:第一趟在A[0]~A[n-1]之间找到最小的,与A[0]进行交换,之后在A[1]~A[n-1]之间进行。。。第i趟在A[i-1]~A[n-1]之间找到最小的,最后...

wangxuwei
昨天
1
0
一名3年工作经验的java程序员应该具备的职业技能

一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪...

老道士
昨天
3
0
MAC安装JDK

一 :在JDK官网下载对应的JDK版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二:找到JDK安装目录,点击会出现图标,双击图标自动安装,勾选默...

WALK_MAN
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部