У меня есть тестовый проект, который содержит одну страницу index.jsp
и одну TestServlet.java
.Я пытаюсь упаковать его с помощью Maven и развернуть на Tomcat.У меня есть такая структура каталогов:
https://i.stack.imgur.com/ijXu3.png
TestServlet.java:
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("It's me");
//response.getWriter().println("<p>Hello world</p>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doGet(request, response);
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Test</display-name>
<description>
This is a simple web application with a source code organization
based on the recommendations of the Application Developer's Guide.
</description>
<session-config>
<session-timeout>1440</session-timeout>
</session-config>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.example.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/Test.do</url-pattern>
</servlet-mapping>
</web-app>
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>testmavenbuild</groupId>
<artifactId>testmavenbuild</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<webResources>
</webResources>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
<targetPath>${project.build.outputDirectory}</targetPath>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Я запускаю пакет команд Maven и получаю файл testmavenbuild-1.0-SNAPSHOT.war и testmavenbuildПапка -1.0-SNAPSHOT , которая содержит пустую папку META-INF и папку WEB-INF:
https://i.stack.imgur.com/Ojv4S.png
https://i.stack.imgur.com/bbazU.png
https://i.stack.imgur.com/i0NuI.png
В то же время команда пакета выдает следующие выходные данные:
https://i.stack.imgur.com/RM1Id.png
Проблема в том, что я не могу получить доступ к сервлету.Я захожу на http://localhost:8080/TestMavenBuild
и вижу index.jsp просто отлично.Но это потому, что index.jsp всегда был в корне проекта с самого начала.Однако, когда я перехожу к http://localhost:8080/TestMavenBuild/Test.do
, я получаю 404 Not Found error .
Я могу исправить ошибку, взяв WEB-INF изнутри root/target/testmavenbuild-1.0-SNAPSHOT
и скопировав его внутрькорень.Затем, после перезапуска Tomcat, сервлет работает нормально (имеется в виду, что я вижу вывод «Hello World»).
Я прочитал некоторые руководства Maven, и они, похоже, не касаются этой проблемы.,Tomcat, похоже, ищет только WEB-INF
внутри папки tomcat/webapps/root
.Он не может найти его внутри tomcat/webapps/root/target/testmavenbuild-1.0-SNAPSHOT
.Кажется, что решение должно включать копирование WEB-INF
из root/target/testmavenbuild-1.0-SNAPSHOT
в root
или копирование testmavenbuild-1.0-SNAPSHOT.war
из root/target
в roo
t.Я мог бы написать сценарий, который бы делал именно это, но я не уверен, в чем заключается традиционный подход.
PS Не хватает репутации, чтобы добавлять картинки напрямую, если кто-то может заменить ссылки на картинки, этобыло бы здорово.