Задать вопрос
Enlightened1
@Enlightened1

Почему не работает Spring+Maven+Tomcat10 и выдает HTTP Status 404, warning Cannot resolve MVC view и Tomcat10 ClassNotFoundException?

Не запускается приложение в связке Idea+java+Spring+Maven+Tomcat10.
Ошибка 404 в браузере после запуска, в контроллере предупреждение Cannot resolve MVC view 'hello_world' и
исключение в консоли в логах Tomcat10 java.lang.ClassNotFoundException.

1. Название проекта: Spring1
SDK = openjdk-19
Compiler output: E:\JAVA\Working_directory\Spring1\out
Archetype webapp.

2.Дервево моего проекта: Проект расположен по адресу в ПК: E:\JAVA\Working_directory\Spring1
67e8104fc7ac2776785575.jpeg

3. Модули моего проекта:
В модулях Source папка java, папка resources отмечена ка ресурсная.
В модулях добавлено 2 вложенных модуля, т.е. в Модуле Spring1 добавлены:
Spring -> В нем Spring Application context -> applicationContextMVC.xml
Web -> Type = Web Module Deployment Descriptor = E:\JAVA\Working_directory\Spring1\src\main\resources\web.xml и
Web Resource Directory = E:\JAVA\Working_directory\Spring1\src\main\resources
67e81067ea31a269832389.jpeg

67e8107720b66450447245.jpeg

67e8107e3257a055613961.jpeg

67e810882a6cc702455576.jpeg

67e8108eb3754012539676.jpeg

4. Facets:
в нем вижу свои вложенные модули (о которых говорилось в п.3) = Spring -> Spring (Spring1) -> Spring Application context -> applicationContextMVC.xml
и Web (Spring1) -> Web Module Deployment Descriptor = E:\JAVA\Working_directory\Spring1\src\main\resources\web.xml и
Web Resource Directory = E:\JAVA\Working_directory\Spring1\src\main\resources
67e810a42db5d597177942.jpeg

5. Artifacts:
Spring1:Web exploded = Web Application Exploded
Output directory: E:\JAVA\Working_directory\Spring1\out\artifacts\Spring1_Web_exploded

WEB-INF -> classes -> 'Spring1' module: 'Web' facet classes
'Spring1' module: 'Web' facet resources
По адресу: E:\JAVA\Working_directory\Spring1\out\artifacts создалась папка Spring1_Web_exploded с содержимиым:
МЕТА-INF/MANIFEST.MF
views/hello_world.html
WEB-INF/web.xml
WEB-INF/classes/com (E:\JAVA\Working_directory\Spring1\out\artifacts\Spring1_Web_exploded\WEB-INF\classes\com\test - где test пустая папка)
WEB-INF/classes/views - где views пустая папка
applicationContextMVGxml index.jsp
web∙xml
67e810b67363d476798736.jpeg

6. pom.xml
67e815d972076103124063.jpeg

67e815dfa8c00522329445.jpeg

67e815e5e77a7665720684.jpeg

67e815ec65f2b303047904.jpeg

7. Tomcat_10.1.39

8080
C:\apache-tomcat-10.1.39
В Deployment -> Spring1:Web exploded выбран.
URL пробовал: localhost:8080/hello-world(адрес в URL Tomcat) и localhost:8080/Spring1/hello-world -
- результат одинаковый 404 ошибка.
67e810e57d814973011893.jpeg

67e810ecdbea6466176359.jpeg

67e810f332ccd271272888.jpeg

8. HelloController.java

package com.test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping("/hello-world")
    public String sayHello() {
        return "hello_world";
    }
}


9. hello_world.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
    <meta charset="ISO-8859-1">
    <title>My app</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>


10. applicationContextMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd
    	http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="com.test"/>
    <mvc:annotation-driven/>
    <bean id="templateResolver" class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
        <property name="prefix" value="/views/"/>
        <property name="suffix" value=".html"/>
    </bean>
    <bean id="templateEngine" class="org.thymeleaf.spring6.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
        <property name="enableSpringELCompiler" value="true"/>
    </bean>
    <bean class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
        <property name="templateEngine" ref="templateEngine"/>
        <property name="order" value="1"/>
        <property name="viewNames" value="*"/>
    </bean>
</beans>


11. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">
  <display-name>spring-mvc-app1</display-name>
  <absolute-ordering/>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/applicationContextMVC.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


Результат:

Сервер Tomcat запускаетя без проблем, НО общий результат запуска выглядит так:
1. По адресу в браузере localhost:8080/hello-world(адресу в URL Tomcat) или localhost:8080/Spring1/hello-world
выводится соощбение на экран HTTP Status 404 – Не найдено
2. Предупреждение на странице файла HelloController.java Cannot resolve MVC view 'hello_world'.
3. В файле hello_world.html предупреждение = Namespace declaration is never used
4.Tomcat localhost log: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

Что я еще делал: Чистил кэш, пересобирал проект, входил выходил из программы, устанавливал последнюю idea,
сносил все проекты, пока что без изменений. Не пробовал правда снести свою 2022.2 идею полностью с очисткой всего.
Сервер успешно запускается.
[2025-03-29 12:57:26,686] Artifact Spring1:Web exploded: Artifact is being deployed, please wait...
[2025-03-29 12:57:27,048] Artifact Spring1:Web exploded: Artifact is deployed successfully
[2025-03-29 12:57:27,048] Artifact Spring1:Web exploded: Deploy took 362 milliseconds
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Средний 11 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы