28
Фев
2020

Java Servlet 404 ошибка

Пытаюсь запустить сервлет на tomcat 10.0 и получаю 404-ю ошибку, хотя вроде бы всё делаю правильно.

(tomcat установлен в /opt/tomcat/)

Порядок был такой:

  • в /opt/tomcat/conf/server.xml добавил виртуальный хост под локалхостом: servlet.loc
    <Host 
      name="servlet.loc"
      appBase="/var/www/tomcat/servlet.loc"
      unpackWARs="true"
      autoDeploy="true"
    />
  • Создал в папке /var/www/tomcat/servlet.loc файл ROOT/WEB-INF/web.xml со следующим содержанием:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 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_4_0.xsd"
      version="4.0">
    </web-app>
  • Создал /var/www/tomcat/servlet.loc/ROOT/index.html с hello world
  • Прописал в /etc/hosts строку 127.0.0.1 servlet.loc www.servlet.loc
  • Зашёл в браузере на servlet.loc:8080 убедился что HW работает
  • Создал файл /var/www/tomcat/servlet.loc/subdir/index.html с hello world
  • Зашёл в браузере на servlet.loc:8080/subdir и так же убедился что HW работает
  • Создал в InteliJ IDEA Maven-проект со следующим pom.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>loc.vhosts</groupId>
        <artifactId>servlet</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>3.0-alpha-1</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
        <properties>
            <maven.compiler.source>1.6</maven.compiler.source>
            <maven.compiler.target>1.6</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <build>
            <directory>/var/www/tomcat/servlet.loc/ROOT/WEB-INF/</directory>
        </build>
    </project>
  • Создал класс src/main/java/HelloServlet.java со следующим содержанием:
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet (HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
            resp.getWriter().write("hello servlet response");
        }
    }
  • Изменил ROOT/WEB-INF/web.xml на следующее содержание:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 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_4_0.xsd"
      version="4.0">
        <servlet>
            <servlet-name>Hello</servlet-name>
            <servlet-class>HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
  • Собрал проект с помощью maven и убедился что файл ROOT/WEB-INF/classes/HelloServlet.class создался

  • Перезапустил tomcat командой service tomcat restart и проверил servlet.loc:8080/hello

Тут я и получаю 404-ю ошибку от браузера


Что я пытался делать:

  • Перенес папку WEB-INF в корневую директорию виртуального хоста (/var/www/tomcat/servlet.loc) и удалил папку ROOT но это не сработало
  • Пытался посмотреть логи ошибок но похоже я не смог найти где они могут записываться
  • Переделал 10 раз всё заново по гайдам разного разлива из интернета, но всё равно получаю упрямо 404.

Прошу помочь, такое ощущение что не замечаю жирный косяк прямо под носом, но по идее всё должно работать! А так же подсказать где можно почитать про требования к файловой структуре сайтов на java и назначении xml-файлов внутри. Например, сколько должно быть папок WEB-INF? в каждой субдиректории или только в одной, какие должны быть конфиг-файлы, зачем и тд.

Источник: https://ru.stackoverflow.com/questions/1088810/java-servlet-404-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0
Share

Тебе может это понравится...