Виртуальные хосты на Tomcat - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть домен test.mydomain.com.Я помещаю его в адресную строку браузера и попадаю в панель управления Tomcat.

Приложение развертывается на Tomcat и по адресу localhost/test/ запускается.Приложение развернуто в локальной папке webapps/test

Теперь я хочу, чтобы при доступе к хосту test.mydomain.com перенаправлялось на мое приложение.Я добавил в файл server.xml в разделе <Engine>

<Host name="test.mydomain.com"  appBase="webapps/test"
        unpackWARs="true" autoDeploy="true">
    <Alias>www.test.mydomain.com</Alias>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="test_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    <Context path="" docBase="${catalina.base}/webapps/test"
   debug="0" reloadable="true"/>
</Host>

Я получил доступ к своему приложению, за исключением двух сервлетов

@WebServlet(name = "Options", urlPatterns = "/js/options.js")
public class Options extends HttpServlet {

@WebServlet(name = "AggregateIconController", urlPatterns = "/images/points/agg.svg")
public class AggregateIconController extends HttpServlet {

В файле web.xml,Я определил такие правила

<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         metadata-complete="false">
  <display-name>Test Web Application</display-name>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/css/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/*</url-pattern>
  </servlet-mapping>
</web-app>

Эти точки подключения являются подмножеством масок, определенных в web.xml.

При доступе к адресу test.mydomain.com/js/options.js я получаю ошибку 404. Но когдадоступ к localhost/test/js/options.js возвращает страницу.

При добавлении правила к web.xml

<servlet-mapping>
  <servlet-name>Options</servlet-name>
  <url-pattern>/js/options.js</url-pattern>
</servlet-mapping>

ничего не меняется

1 Ответ

0 голосов
/ 24 сентября 2019

У меня все работало.Что вы делали

  1. Удали приложения для этого хоста в отдельную папку, которая находится за пределами ${catalina.base}/webapps, об этом говорится в документации Tomcat

    Чтобы создать виртуальные хосты, выполните следующие действия:

    1. Создайте отдельный каталог для каждого хоста вне $ CATALINA_HOME / webapps
    2. Под каждым каталогом создайте каталог веб-приложений.
  2. В server.xml оставлены только строки

    <Host name="test.mydomain.com"  appBase="test/webapps"
            unpackWARs="true" autoDeploy="true">
      <Alias>www.test.mydomain.com</Alias>
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="test_access_log" suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
    
  3. Переименовал оригинальную войну в ROOT.war и поместил ее в папку test/webapps.Сам Tomcat развернул его в test/webapps/ROOT

  4. Я не понял насчет сервлетов.Для

    @WebServlet(name = "Options", urlPatterns = "/js/options.js")
    public class Options extends HttpServlet {
    

    явно записано в web.xml

    <servlet-mapping>
      <servlet-name>Options</servlet-name>
      <url-pattern>/js/options.js</url-pattern>
    </servlet-mapping>
    

    (до этого этот подход все еще не работал).

    Для

    @WebServlet(name = "AggregateIconController", urlPatterns = "/images/points/agg.svg")
    public class AggregateIconController extends HttpServlet {
    

    все работало независимо

...