Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Spring приложение в NetBeans


Автор: korob2001 18.4.2023, 15:33
Привет всем!

Попала, мне в руки книга "Spring быстро" и начал я её читать. Тема оказалась увлекательная и дошёл я за пару дней к теме Spring Boot. Все примеры писал в NetBeans 17. По совету автора зашёл на https://start.spring.io/, создал заготовку под Spring MVC приложение. Открыл его в NetBeans, установил Tomcat 10.x. И уже третий день пытаюсь запустить всю эту канитель.
Добавил простейший контроллер HomeController.java
Код

package my.site.java.main.controllers;

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

@Controller
public class HomeController {
    
    @RequestMapping("/home")
    public String home() {
        return "home.html";
    }
}

Создал в каталоге src/main/resources/static HTML файл home.html
Код

<!DOCTYPE html>
<html>
    <head>
        <title>Hello, world!</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <h1>Hello, world!</h1>
    </body>
</html>

и запускаю. Tomcat стартует, приложение деплоится, но выходе получаю постоянно одну и ту же ошибку.
Код

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Apr 18 13:28:48 CEST 2023
There was an unexpected error (type=Not Found, status=404).

Пытался искать в сети, но всё, что находил это проблему со структурой пакетов, например, мне https://start.spring.io/ сгенерировал такую структуру:
Код

my.site.java.main.MySpringAppApplication.java
my.site.java.main.ServletInitializer.java

я создал пакет для контроллеров и положил в него контроллер:
Код

my.site.java.main.controllers.HomeController.java

Указал даже в файле my.site.java.main.MySpringAppApplication.java, что бы он искал компоненты в my.site.java.main.controllers:
Код

package my.site.java.main;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"my.site.java.main.controllers"})
public class MySpringAppApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringAppApplication.class, args);
    }
}

результат тот же. ;(((( Пробовал в STS запускать, там всё работает. Такое впечатление, что контроллер не может найти файл home.html, потому как, когда я добавляю HTML файл в каталог src/main/resources/static, то файл добавляется вообще в каталог WebPages, рядом с каталогом META-INF, я его потом вручную перетаскиваю в src/main/resources/static.
У меня вообще такое впечатление, что я один использую NetBeans, в сети полно примеров на IDEA, но для WEB нужно Ultimate версия, которой цены сложить не могут, потому её даже не продают, а сдают в аренду. (аля подписка). Spring учу для себя.

Автор: LSD 18.4.2023, 23:28
Спринг сам https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot:
Код

/META-INF/resources/
/resources/
/static/
/public/

в статические ресурсы и сам же будет их отдавать, писать для этого контроллер - не нужно. 

Сам контроллер в примере отдает строку, а не страничку.

Спринг буту установленный томкат не нужен, он его сам запускает.

start.spring.io генерирует билд файл из которого можно запустить приложение: ./gradlew bootRun (это если есть подозрение, что IDE косячит).

Можно включить дебаг логи и посмотреть куда биндится контроллер
Код

./gradlew bootRun -Pargs=--logging.level.org.springframework=TRACE

Автор: korob2001 19.4.2023, 00:03
Привет LSD,
Цитата(LSD @  18.4.2023,  20:28 Найти цитируемый пост)
Сам контроллер в примере отдает строку, а не страничку.

Я понимаю, что метод контроллера (action) возвращает строку, в моём случае это имя файла home.html (view), но он упорно его не находит. При этом в STS работает, без проблем.

Просто не хочется в зависимости от типа проекта менять IDE. Типа, хотите я вам напишу чего-нить для консоли или десктопа? Мне нужно установить NetBeans, ой вам нужно MVC приложение, подождите я установлю STS.

Ещё одна причина, почему я думаю, что с папкой src/main/resources что-то не так. На ней восклицательный знак, если навожу на него курсор, всплывает окошко, прикрепляю скрин.
Написано, что Директория с ресурсами определена в POM. Может это из-за того, что включены: Filtering: true и в списке нет файлов типа **/application*.html?

Сейчас поищу,  может можно как-то эту фильтрацию отключить.

Автор: korob2001 20.4.2023, 00:36
В общем ничего я так и не нашёл, переехал в STS пока. Как-то не воодушевляет меня когда создаю файл в папке resources, а он появляется в /META-INF, хорошо хоть не в system32  smile
Теперь хоть дальше могу двигаться, а то застрял на половине книги.

Автор: LSD 21.4.2023, 22:07
Как я писал надо попробовать запустить из консоли через грейдл. Если запустится - надо разбираться с run конфигурацией NetBeans. Если и из консоли не будет работать, то проблема уже серьезнее, т.к. сгенерированный проект должен работать и значит что-то не так с окружением запуска.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)