JFinal 部署在 Tomcat 下推荐方法
博客专区 > JFinal 的博客 > 博客详情
JFinal 部署在 Tomcat 下推荐方法
JFinal 发表于3年前
JFinal 部署在 Tomcat 下推荐方法
  • 发表于 3年前
  • 阅读 22951
  • 收藏 150
  • 点赞 61
  • 评论 50

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: 首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别。Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免

   经常有人在群里问 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 tomcat jetty
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
JFinal
粉丝 3866
博文 4
码字总数 2275
作品 3
评论 (50)
台俊峰
顶了再看
台俊峰
我一直都是这么做的
简单代码
如果使用reloadable会怎样?我实际使用中发现经常提示有进程无法结束,可能会造成内存泄漏,什么时候用这个选项合适?
JFinal

引用来自“简单代码”的评论

如果使用reloadable会怎样?我实际使用中发现经常提示有进程无法结束,可能会造成内存泄漏,什么时候用这个选项合适?
reloadable 设置tocmat是否应该监视/WEB-INF/classes和/WEB-INF/lib中的变化,如果有发生改变,则自动重新部署,默认值为false。个人不太相信其可靠性,在生产环境下重新部署都是命令行搞定
HostSugar
上条点快了,帮我删除吧 :)
“因为配置文件中如果配置了该项目会被加载一次” 配置文件是指配置如下么?
<Context path="" reloadable="false" docBase="/var/www/my_project" />
那我不配置如上信息,直接放到webapps 下面 不就可以加载一次了么。
JFinal

引用来自“东门吹风”的评论

上条点快了,帮我删除吧 :)
“因为配置文件中如果配置了该项目会被加载一次” 配置文件是指配置如下么?
<Context path="" reloadable="false" docBase="/var/www/my_project" />
那我不配置如上信息,直接放到webapps 下面 不就可以加载一次了么。
不仅仅是 Context path 配置可以让项目再加载一次,如果再添加 Host 标记指向这个项目也会被加载一次,被重复加载以后还会全然不知,但你可以通过为其配置的 context path 来测试出来,例如,放在 webapps 下面的项目目录为 abc,而你设置的 contex path 为 def,那么你通过 localhost/abc 和 localhost/def者可以访问到这个项目造成内存的浪费暂且不说,还会引发类似于 session 混乱的错误
FoxHu
"因为配置文件中如果配置了该项目会被加载一次,而项目在 webapps 下面又会被自动重复加载一次",波总您所说的配置文件指的是哪个文件啊?
JFinal

引用来自“FoxHu”的评论

"因为配置文件中如果配置了该项目会被加载一次,而项目在 webapps 下面又会被自动重复加载一次",波总您所说的配置文件指的是哪个文件啊?
TOMCAT_HOME/conf/server.xml
罗厚付
请问jfinal默认是部署在什么容器中。
JFinal

引用来自“echard”的评论

请问jfinal默认是部署在什么容器中。
生产环境建议用 tomcat。jfinal 项目是标准的 java web项目,没有默认部署,看个人喜好
lile-chs
实际应用中已经体会了。。。就是不如波总说的这么好。。。
在下杨过
看来新手总是犯我们当年遇到的那些坑13
0071
你好,下载了你的demo,本地搭建了一下,访问http://localhost:8080/jfinal_demo/,登陆成功
但是在页面再点击其他链接的时候,跳转的URL有问题,如http://localhost:8080/blog(正确应该是:http://localhost:8080/jfinal_demo/blog/),请帮忙解答。
JFinal

引用来自“0071”的评论

你好,下载了你的demo,本地搭建了一下,访问http://localhost:8080/jfinal_demo/,登陆成功
但是在页面再点击其他链接的时候,跳转的URL有问题,如http://localhost:8080/blog(正确应该是:http://localhost:8080/jfinal_demo/blog/),请帮忙解答。
启动时 context path 设置为 "/" 即可,jfinal 手册中有详细的说明,此篇博文有说明如何将 context path 部署为 "/"
tonyfox
请问一个tomcat下部署多个项目该怎么配置了?0
boopo
分析的很到位 多谢
JFinal

引用来自“tonyfox”的评论

请问一个tomcat下部署多个项目该怎么配置了?0
将server.xml 中的 Host 标记复制多份,并列放着,改一下其中的 name 属性为相应的域名即可,例如将第一个的name属性改成 name="abc.com" 第二个改成 name="def.com",那么这两个域名可以分别访问到不同的两个项目
yd_程序猿
我这样配置了tomcat6可以tomcat7不可以...这是怎么回事呢
xter
踩过重复加载的坑。。
小强哥unas
tomcat部署,非常稳定
×
JFinal
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: