簡體   English   中英

如何在Tomcat中設置上下文路徑,以便可以在不附加部署的文件夾名稱的情況下進入站點?

[英]How to set context path in Tomcat so one could enter the site without appending the deployed folder name?

我在這里閱讀有關Tomcat指南的內容和一些SO問題。 而且我認為我幾乎都在做同樣的事情。 但在某種程度上無法成功。

首先,我必須說我的應用程序部署在我無法控制的共享Tomcat服務器上。 我只是刪除我的.war文件並進行部署。

我試圖將我的應用程序打包為ROOT.war但是沒有用。 管理員告訴我把它打包成我想要的名字,他們會照顧它。 我把它打包為my-application.war並且已經部署但我必須輸入http:// my-host / my-application才能進入網站。

聯系管理員后,他們告訴我他們已經在我的主機中將一個上下文元素放在Tomcat配置文件中,如:

<Context path="" docBase="path of my-application deployed folder"/>

應該將my-application設置為進入my-host所有請求的默認應用程序。 但它沒有,每當我輸入http:// my-host我得到:

HTTP Status 404 - / The requested resource (/) is not available

但是,當我輸入http:// my-host / my-application時 ,一切正常。 任何關於可能出錯的建議都是絕對值得贊賞的。

更新:
我嘗試按照tomcat文檔中描述的如何使應用程序默認的步驟 描述了3種方式,我嘗試了所有三種方式,並且可以在localhost上將我的應用程序成功部署為ROOT。

我還嘗試重現我在遠程服務器上遇到的問題,以便找到原因並將其報告給管理員。 我發現了幾個問題。

  1. admin.xml發送給我的server.xml片段中, autoDeploydeployOnStartUp設置為true,而如果在server.xml中顯式定義Context元素,則它們應該為false。 這將導致雙重部署,從而創建一個ROOT文件夾和一個名為.war文件的文件夾。 刪除.war將刪除它的相應文件夾並取消部署應用程序,但ROOT仍然存在,必須手動刪除並需要重新啟動Tomcat。 在重新啟動之前,ROOT.war的任何部署都將失敗。
  2. 我想有一些原因阻止了ROOT.war的部署。 一個可能是一個在的ROOT.xml CONF / {發動機名}存在/ {主機名}或在主機的存在的appBase根文件夾或如我上面從以前的部署一個ROOT應用描述的內容不是未展開並且需要的Tomcat重新開始。

無論哪種方式,我無法確切地指出究竟是什么阻止ROOT.war部署,因為這需要訪問Tomcat日志文件和conf文件來檢查我上面描述的情況。

另外,從我看來,我的管理員似乎無法維護Tomcat服務器並找到問題。 所以我決定在與共享服務器掙扎之后使用專用的Tomcat服務器。

在您的問題中,您聲明管理員將上下文設置為:

<Context path="" docBase="path of my-application deployed folder"/>

根據上面的評論,我建議嘗試使用應用程序的相對路徑而不是絕對路徑。

我在我的tomcat服務器上試過這個:

<Context path="/" docBase="my-application/" />

這就是訣竅。

包含Context元素的Host元素實際上設置了一些可能也會影響上下文的參數。 如果它是默認設置,那么相對上下文應該只指向webapps文件夾。 如果它已被更改,結果可能會有所不同。

通常這可以通過以下步驟實現:

  • 在conf / Catalina / localhost中定義ROOT.xml上下文文件
  • 將您的webapp命名為WAR“ROOT.war”或包含文件夾“ROOT”

但是,我懷疑你能在共享的Tomcat實例上做到這一點。 只有一個應用程序可以作為默認應用程序運行 托管公司可能不會允許它,否則它們允許哪個應用程序成為共享同一個Tomcat實例的許多人的默認設置?

請訪問此鏈接: http//staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

Tomcat的Wiki有一個部分上把應用程序轉換為默認上下文。 但是,為了做到這一點,它意味着對Tomcat服務器的一些控制,這在您描述的共享上下文中可能是不可能的。

如果您能夠在服務器上安裝其他系統,則另一種解決方案是使用NGINX等代理服務器。 這比簡單命名war文件ROOT.war更復雜,但有時它是唯一的選擇。

如果您在服務器上監聽NGINX並且擁有自己的URL,則可以使用HttpProxyModule ,其設置如下:

server {
        listen          80;
        server_name     my.domain.com;
        location / {
            proxy_pass              http://my-host/my-application;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
        }
    }

此外,為了使這項工作,你必須擁有“my.domain.com”網址它需要與每個人用於共享Tomcat服務器的網站分開。

解決方案的nginx部分是免費的,但是如果你需要注冊一個新網址,然后使用像no-ip.com這樣的東西將它重定向到tomcat服務器,它將花費金錢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM