Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223

Spring MVC index/start/welcome page

22.02.2019, 02:30. Показов 3674. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Разбираю простой пример Spring MVC. Раньше уже разбирал сейчас возвращаюсь и надеялся что так быстро не "упрусь в стену" и не начну терять темп, что-то голова не варит..

У меня есть работающий пример диспетчера сервлетов, проблема что при запуске у меня не отображается начальная(индекс) страница (код 404, не найдена) и мне приходится в URL вводить адресс чтобы контроллер начал мапить.
Вот мои попытки.
Было :
Java
1
2
3
4
5
6
7
8
@Controller
public class HomeController{
 
    @GetMapping("/home")
    public String homeInit(Locale locale, Model model) {
        return "home";
    }
}
попробовал создать jsp страницу (назвал ind) и мапить на нее класс контроллера по умолчанию :
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller
@RequestMapping("/")                           //верхний "уровень" распространяющийся на все
public class HomeController{
 
    @GetMapping("/home")
    public String homeInit(Locale locale, Model model) {
        return "home";
    }
    
    @GetMapping                                   // пусто, а значит будет по умолчанию уровень класса "/"
    public String indexInit(Model model) {
        return "/ind";                               // возвращаем представление нашего индекса
    }
}
Не получалось, пробовал иначе, создал для этой цели контроллер
Java
1
2
3
4
5
6
7
8
9
@Controller
@RequestMapping("/")
public class IndexController{
 
    @GetMapping
    public String indexInit(Model model) {
        return "ind";
    }
}
который я использовал как корневой при инициализации
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 
    @Override
    protected Class<?>[] getRootConfigClasses() {
//        return new Class[] { };
        // add my IndexController for START PAGE 
        return new Class[] { IndexController.class};
    }
 
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebMvcConfig.class };
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }    
}
Ну вот, пока сюда писал и параллельно тестил, уже вообще ничего не работает(если из-за того что я по 10 раз разкладку меняю и где-то вписался не тот символ то проект можно считать уже не рабочим)

Вопрос : как отображать начальную страницу(индекс) в аннотациях (не через welcome.. в web.xml) и желательно применимо в спринг 5.
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2019, 02:30
Ответы с готовыми решениями:

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

задания по spring core и spring mvc для новичков
Какие задания можно предложить новичкам для выполнения после знакомства их с spring core и mvc ?

Перевод проекта из Spring Maven в обычный Spring MVC
Здравствуйте. Подскажите, реально ли взять готовый проект, например -...

15
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
22.02.2019, 04:34
кинь gradle файл, или maven, не знаю что у тебя.

Добавлено через 1 минуту
Если кратко то там должно быть это:

Code
1
2
3
4
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
Добавлено через 35 секунд
Ну или что то похожее
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
22.02.2019, 07:25

Не по теме:

Цитата Сообщение от Artyr2 Посмотреть сообщение
<groupId>org.springframework.boot</groupId>
с чего ты сразу решил что у человека бут? ах да, мастер же уже, точно



ViktorFX, у вас spring boot?
какой-то шаблонизатор или чистый html? если шаблонизатор, то подключен ли он?
если не spring boot, то настроен ли vew resolver? в какой папке при этом лежат вьюхи?
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 11:01  [ТС]
Цитата Сообщение от Artyr2 Посмотреть сообщение
кинь gradle файл, или maven, не знаю что у тебя.
Вот зависимости
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
вот все
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?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>com</groupId>
    <artifactId>Spring5_DispMVC</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <name>Spring5_DispMVC</name>
 
    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>5.0.7.RELEASE</spring.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
</project>

Цитата Сообщение от Artyr2 Посмотреть сообщение
Если кратко то там должно быть это:
У меня не spring boot, только spring mvc а он по идее обязательно подгружает то что обязательно должно быть. Вторую зависимость ИДЭ также создает автоматически. Я вообще стараюсь не ковырять pom.xml все подгружается автоматически при импортировании необходимых библиотек в java.
Диспетчер работал, но поскольку я хочу обойтись без xml не знаю как звгружать первую страницу.

Добавлено через 12 минут
Цитата Сообщение от LeX Посмотреть сообщение
ViktorFX, у вас spring boot?
Нет, просто spring mvc.
Цитата Сообщение от LeX Посмотреть сообщение
какой-то шаблонизатор или чистый html? если шаблонизатор, то подключен ли он?
да обычные jsp страници (просто разбираю пример)
Цитата Сообщение от LeX Посмотреть сообщение
если не spring boot, то настроен ли vew resolver? в какой папке при этом лежат вьюхи?
Да, настроен в конфигурациях, вчера мапил вводя URL адресса
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.spring5_dispmvc.demo"})
public class WebMvcConfig implements WebMvcConfigurer{
    
    @Bean
    public InternalResourceViewResolver resolver() {
        InternalResourceViewResolver resolver=new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
 
//    @Override
//    public void addViewControllers(ViewControllerRegistry registry){
//        registry.addViewController("/index");
//    }
 
//    @Override
//    public void configureViewResolvers(ViewResolverRegistry registry){
//        WebMvcConfigurer.super.configureViewResolvers(registry); //To change body of generated methods, choose Tools | Templates.
//    }
}
Еще пробовал что-то имлементить с WebMvcConfigurer, но не разобрался что нужно для начальной страницы.
Еще параллельно своему index.html рядом создал index.jsp (думал что может просто html) не открывается.
Суть проблемы еще в том что я не вижу где в настроейках вообще хоть какая-то начальная страница (если бы оно работало, то было бы как "магия") и я не знаю как и где ее настроить.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
22.02.2019, 11:06
Цитата Сообщение от ViktorFX Посмотреть сообщение
<source>1.7</source>
* * * * * * * * * * <target>1.7</target>
многие уже 8-ю выкидывают, вышла уже 12-я, а вы пишите под 7-ю, в чем смысл? все равно у вас jdk стоит минимум 8-ка

структура проекта какая у вас? где лежит web-inf?

Цитата Сообщение от ViktorFX Посмотреть сообщение
@GetMapping("/home")
* * public String homeInit(Locale locale, Model model) {
* * * * return "home";
* * }
имена должны совпадать с именами jsp файлов внутри WEB-INF/views/
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 11:07  [ТС]
Вот этого не понимаю resolver.setViewClass(JstlView.class); раньше такого не было, это что не стандартный шаблонизатор? последние символы tl как буд-то tiles.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
22.02.2019, 11:09
Цитата Сообщение от ViktorFX Посмотреть сообщение
JstlView.class
все правильно, это стандартный рендерер для jsp, без него файл будет отдаваться как есть (так делают для обычного html)
1
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 11:18  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
имена должны совпадать с именами jsp файлов внутри WEB-INF/views/
Совпадает, вчера добавлял в конце url /home, и открывал страницу home, или другую что надо было.
Цитата Сообщение от LeX Посмотреть сообщение
многие уже 8-ю выкидывают, вышла уже 12-я, а вы пишите под 7-ю, в чем смысл? все равно у вас jdk стоит минимум 8-ка
У меня jdk 11, ЕЕ 7, и source/binaryFormat старый 1.7 но я его не менял потому что он так установлен автоматически (я ничего не менял) + не хотел рисковать и возможно менять плагины в pom.xml или вторую зависимость.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 11:31  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
структура проекта какая у вас? где лежит web-inf?
Структура вроде правильная :
+ добавил index.jsp (на случай если он html не хочет брать)
+ indexController не по логике примера а просто пытался добавить в AppInitializer в getRootConfigClasses() страницу как корневую. Но не вышло, пример как я пытался выше.
Миниатюры
Spring MVC index/start/welcome page  
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.02.2019, 11:39
ViktorFX, попробуй проаннотировать метод, возвращающий "home" просто @GetMapping("/")
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 11:46  [ТС]
iSmokeJC, Вчера вроде пробовал. Чуть позже появится время и я все пересоздам и попробую снова (после моих экспериментов уже ничего не работает, ловлю код 500)
0
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
22.02.2019, 16:42
Какая разница? spring boot или spring?
Почти все что есть для spring boot есть для spring и обратно.

Code
1
2
3
4
5
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
Добавлено через 26 секунд
подключи эту библиотеку, и попробуй еще раз.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2019, 21:20  [ТС]
Всем спасибо решил.

Если кому пригодится. Основная проблема (я раньше с этим стыкался, но если практики нет, то сами понимаете..) в том что я не удалил index.html, должен быть только index.jsp

Еще проблема что при изменнии в проекте, даже при перезагрузки tomcat, у меня в tomcat (сессии? контексте?) изменения не происходили. Например удалил класс indexController и нигде его не упоминаю, так tomcat ругается что неможет нормально мапить и упоминает этот класс. Или наоборот, поудалял то чего не следовало в pom.xml оставил только 2 зависимости, а он не ругается. Не первый раз возникают подобные проблемы с tomcat.
Вот мои зависимости, те что надо для проекта, те что возможно мне надо для плагинов, и те что возможно надо для плагинов автора примера но не мне. Удалять пока не буду, экспериментировать уже не охота.
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${tld.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlets.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
0
25 / 21 / 6
Регистрация: 10.12.2018
Сообщений: 115
23.02.2019, 19:03
вот мне лично не нравится весь этот метод коментарий @@@@@
почему бы просто не использовать дискриптор web.xml в котором у тебя всё будет прописано , тогда код легко читается и ты сразу поймёшь почему у тебя не грузится тот или иной сервлет
index.jsp - ИМХО: их я бы вообще сунул в webapp\WEB-INF\view
и обращался бы к ним через сервлеты
Java
1
req.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(req, resp);
допустим это будет стартовый сервлет обращение к нему будет \ - таким

а если в одном файле когда все пути прописаны то всё понятно
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
23.02.2019, 22:46  [ТС]
Цитата Сообщение от JavaDoc Посмотреть сообщение
вот мне лично не нравится весь этот метод коментарий @@@@@
Мне как новичку скорее не нравится что можно многими альтернативными способами, что я как новичек все не запомню и что меня путает. Аннотации по началу вообще не понимал, а в xml хоть и большое описание и было чревато ошибками, там я хотя бы находил знакомые слова. Разузнавал у знающих, говорили что аннотации лучше, и я начал соглашаться, ведь мне надо бизнес логика а не ломать голову над реализацией.
Цитата Сообщение от JavaDoc Посмотреть сообщение
web.xml в котором у тебя всё будет прописано , тогда код легко читается и ты сразу поймёшь почему у тебя не грузится тот или иной сервлет
Здесь я не согласен, если мне надо несколько контроллеров, фильтров, разных "интерцепторов", валидаторов, обработчиков.. будет очень много кода в web.xml. Конечно можно использовать несколько xml описаний, но думаю что лучше использовать эту возможность в крайнем случае, ведь ее можно использовать всегда.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
26.02.2019, 07:17
Цитата Сообщение от ViktorFX Посмотреть сообщение
Не первый раз возникают подобные проблемы с tomcat.
останавливаешь томкат, идешь в каталину, чистишь webapps и кеш

Добавлено через 2 минуты
Цитата Сообщение от JavaDoc Посмотреть сообщение
web.xml
не стоит изголяться над трупом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2019, 07:17
Помогаю со студенческими работами здесь

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Spring MVC, Spring REST
Всем привет! Изучаю фреймворк Spring и возникло несколько вопросов в процессе, на которые не уверен однозначно, что до конца понимаю....

Spring mvc spring jdbc
Простое веб приложение с использованием Spring mvc + jdbc(JdbcTemplate). Можно добавить запись в таблицу или вывести список данных из...

Spring+hibernate thread on start (put in db)
Всем доброго времени суток. Дело в том, что мне надо некоторую информацию регулярно записывать в базу данных. То есть что бы поток...

Spring security custom login page error
день добрый. есть небольшие косяки с работой спринг секюрити. при заллогивании через http://localhost:8080/login входит в админку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru