Как установить контекстный путь в Tomcat, чтобы можно было войти на сайт без добавления имени развернутой папки? - PullRequest
11 голосов
/ 04 декабря 2011

Я читал об этом в руководстве 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 способа, и я попробовал все три способа и смог успешно развернуть свое приложение как ROOT на localhost.

Я также попытался воспроизвести проблему, с которой сталкиваюсь, на удаленном сервере, чтобы найти причину и сообщить об этом администратору.Я нахожу пару проблем.

  1. В фрагменте server.xml , который прислал мне админ autoDeploy и deployOnStartUp , установлены в true,тогда как они должны быть ложными, если явно определен элемент Context в server.xml.Это приведет к двойному развертыванию, которое создаст папку ROOT и папку с именем .war-файла.При удалении .war удаляется соответствующая папка, и приложение удаляется, но ROOT остается, и его необходимо удалить вручную, и требуется перезапуск Tomcat.До перезапуска любое развертывание ROOT.war не будет выполнено.
  2. Я полагал, что есть некоторые причины, препятствующие развертыванию ROOT.war.Можно предположить, что ROOT.xml существует в conf / {engine-name} / {host-name} или ROOTпапка существует в appBase хоста или, как я описал выше, приложение ROOT из предыдущего развертывания не отменено и требует перезапуска Tomcat.

В любом случае я не мог точно определить, что именно предотвращает ROOT.warот развертывания, поскольку для этого требуется доступ к файлам журнала Tomcat и файлам conf для проверки случаев, описанных выше.

Также из всего, что я вижу, мой админ, кажется, не в состоянии поддерживать сервер Tomcat и находить проблему.Поэтому я решил использовать выделенный сервер Tomcat после борьбы с общим.

Ответы [ 3 ]

5 голосов
/ 14 декабря 2011

В своем вопросе вы утверждаете, что администратор установил контекст следующим образом:

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

Исходя из приведенных выше комментариев, я бы предложил использовать относительный путь вашего приложения.вместо абсолютного пути.

Я попробовал это на своем сервере Tomcat с:

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

, и это помогло.

Хостэлемент, который содержит элемент Context, фактически устанавливает некоторые параметры, которые также могут влиять на контекст.Если это настройки по умолчанию, то относительный контекст должен просто указывать на папку webapps.Если оно было изменено, результаты могут отличаться.

4 голосов
/ 04 декабря 2011

Обычно этого можно достичь, выполнив следующие действия:

  • Определите файл контекста ROOT.xml в файле conf / Catalina / localhost
  • Назовите ваше веб-приложение WAR «ROOT.war»или содержащий папку «ROOT»

Однако я сомневаюсь, что вы сможете сделать это на совместно используемом экземпляре Tomcat.Только одно приложение может работать как приложение по умолчанию.Хостинговая компания, вероятно, не допустит этого, так как в противном случае какое приложение они будут использовать по умолчанию из множества людей, использующих один и тот же экземпляр Tomcat?

См. Эту ссылку: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

3 голосов
/ 04 декабря 2011

В Tomcat Wiki есть раздел о переводе приложений в контекст по умолчанию. Однако для этого подразумевается некоторый контроль над сервером Tomcat, который может оказаться невозможным в описанном вами общем контексте.

Если у вас есть возможность установить другие системы на сервере, одним из альтернативных решений будет использование прокси-сервера, такого как NGINX. Это намного сложнее, чем просто назвать ваш военный файл 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;
        }
    }

Кроме того, для того, чтобы эта работа работала, вам необходимо иметь URL-адрес my.domain.com и , который должен быть отдельным от того, который каждый использует для общего сервера Tomcat. .

Часть решения nginx бесплатна, но если вам нужно зарегистрировать новый URL, а затем использовать что-то вроде no-ip.com для перенаправления его на сервер tomcat, это будет стоить денег.

...