有關Jfinal在jetty環境下開發,tomcat環境下發布形成的問題解決心得。

首先熟悉一下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

相關文章
相關標籤/搜索