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

В чем ошибка Spring MVC 404?

Получаю ошибку 404 при попытке запустить свой проект на томкат с использованием thymeleaf, проект пересобирал, пересоздавал, менял версию томката, пробовал создать через архетип мавена, колдовал, шаманил, но все никак. прилагаю ниже ссылку на репозиторий и отрывки кода
https://github.com/Mizuro0/SpringMVCApplication. Пытался в url и через /first/hello и просто /hello, и без RequestMapping, все тщетно.

Класс контроллер
package org.mizuro.spring.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/first")
public class FirstController {

    @GetMapping("/hello")
    public String helloPage(@RequestParam("name") String name, @RequestParam("surname") String surname) {
        System.out.println(name + " " + surname);

        return "first/hello";
    }

    @GetMapping("/goodbye")
    public String goodbyePage() {
        return "first/goodbye";
    }
}


Класс конфиг

package org.mizuro.spring.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;

@Configuration
@ComponentScan("org.mizuro.spring")
@EnableWebMvc
public class SpringConfig implements WebMvcConfigurer {
    private final ApplicationContext applicationContext;

    @Autowired
    public SpringConfig(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        registry.viewResolver(resolver);
    }

}


Ошибка
65b6fafe8caaf747876130.png
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Средний 3 комментария
Решения вопроса 1
@My1Name
Переложите файлы "hello.hml" и "goodbye.html" на уровень выше: src/main/webapp/hello.html
В таком случае ваш конфиг будет выглядеть так:
templateResolver.setPrefix("/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);

Контроллер:
@Controller
@RequestMapping("/") 
public class FirstController {
@GetMapping("/hello")
public String helloPage() {
        return "hello";
    }
}

Страница доступна по адресу localhost:8080/hello где 8080 - это номер порта на котором работает ваш сервер.

Узел WEB-INF не является частью общедоступного дерева документов приложения. Ни один файл, содержащийся в WEB-INF каталоге, не может быть передан контейнером непосредственно клиенту.
https://stackoverflow.com/a/19786283/15454143
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
А по какому URL обращаться пытаетесь? Как приложение в томкат попадает?
Подозреваю, что просто нет алиаса на дефолтное приложение в томкате, и нужно обращаться как-то localhost:8080/myapplication-herznaet-chto/hello

Ну и логи, где логи, я Вас спрашиваю? :)

Да и нафиг все эти томкаты во втором десятилетии двадцатьпервого века. Посмотрите на https://sparkjava.com/ (или аналог, их есть с десяток).
И да, всеми (не)любимый спринг туда тоже ввернуть можно.
Ответ написан
Ваш ответ на вопрос

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

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