Форум программистов, компьютерный форум, киберфорум
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. Показов 3653. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru