Настройка виртуальных хостов Tomcat

210
02 августа 2021, 17:20

Есть имя хоста test.mydomain.com. Вбиваю его в адресную строку, попадаю в панель управления 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" />
  </Host>

И получаю в браузере

Message Not found
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

А в логе test_access_log надпись

xxx.xxx.xxx.xxx - - [20/Sep/2019:16:07:39 +0200] "GET / HTTP/1.1" 404 1077

Tomcat 9.0.7

Что я делаю не так?

Update

А обращение к www.test.mydomain.com выбрасывает по прежнему на главную страницу томката

Update2

Добавил в <Host> параметр

<Context path="" docBase="${catalina.base}/webapps/test"
   debug="0" reloadable="true"/>

все почти заработало. Кроме одного момента.

Вот мой 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>

И определены у меня два таких сервлета

@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 {

т.е. connection point является подмножеством масок, определенных в web.xml.

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

Answer 1

Все у меня заработало. Что сделал

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

    In order to create virtual hosts, do the following:

    1. Create a separate directory for each host outside of $CATALINA_HOME/webapps
    2. Underneath each directory, create a webapps directory.
  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. Исходный war переименовал в 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 {
    

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

READ ALSO
HashMap.merge() через Stream API

HashMap.merge() через Stream API

Есть метод, в котором алгоритм прописан через обычную итерацию по List:

203
Как получить одно из двух значений Object из Map&lt;String, Object&gt; и поместить его в List&lt;&gt;?

Как получить одно из двух значений Object из Map<String, Object> и поместить его в List<>?

От сервера с помощью Retrofit я получаю данные в виде:

223
Exception in thread &ldquo;main&rdquo; java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source)

Exception in thread “main” java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source)

Задача: На числовой прямой дан отрезок [3;8]Требуется определить, принадлежит ли точка x данному отрезку

223
Websocket выдает ERR_SSL_PROTOCOL_ERROR

Websocket выдает ERR_SSL_PROTOCOL_ERROR

Пытаясь подключится к localhost:3000 выдает ошибку (в названии), я пробовал подключать вебсокет по адресу "localhost:3000", "localhost", "3000", все кроме localhost выдает...

176