首先熟悉一下tomcat的发布配置相关:前端
具体的发布配置步骤:web
固然,还有jar包的问题,因为使用到了web容器的环境变量,因此jetty的时候须要引用 jetty-server-8.1.8.jar 包;若是tomcat的时候须要引用 servlet-api.jar包,必须二选一的引用。api
题外话,若是牵扯到jfinal上传文件的话,必需要有cos.jar 的包。tomcat
个人项目部署:
服务器
配置文件:tomcat../conf/server.xmlapp
<Host ..webapp
<Context path="" reloadable="false" docBase="E:\www\gmb"/>spa
</Host>code
本来是没有问题的,不过 @jfinal,詹总推荐把tomcat配置的path留空 " ",那么问题来了。不少时候咱们前端的action请求orm
是以项目名称为前缀的,这样就等于少了一层(me.add(new ContextPathHandler("ctx")) 取到的是 " ")。
有人就会说了,path那就不留空 ,根据项目名称来,如 "/gmb",但是问题又来了,前端访问的时候,就变成了:http://localhost:8080/gmb/gmb 才能访问了,不要忘了tomcat下面配置的 docBase 的物理地址。
没错,就是这里的问题,折腾的我大半夜的如今才发这个心得。解决办法呢,就是 在 afterJFinalStart 中进行配置 这个项目前缀到 上下文环境中,JFinal.me().getServletContext().setAttribute("ctx", "/gmb");
固然,没使用setAttribute("ctx", "/gmb") 以前,首页中有一处获取到了 ctx的项目前缀,其余都没有获取到,如今还在纳闷。这个问题也有点奇怪
Tomcat绑定多个域名:
<Host name="www.web1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" reloadable="false" docBase="d:\www\web1"/> </Host> <Host name="www.web2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" reloadable="false" docBase="d:\www\web2"/> </Host>
最后:
JFinal.me().getServletContext().setAttribute("ctx", "/gmb");
这样的方便之处就在于,本地环境使用Jetty(引用jetty的jar包),项目名称配置为: "/gmb";
访问:localhost:8080/gmb
服务器端使用tomcat(引用tomcat的jar包),项目名称配置为:“/”,而后就不须要输入项目名称访问,尤为是绑定域名,tomcat端口改成80,最方便不过了。
访问:www.gmb.com