Содержание
java — Проблемы с простым проектом с Spring Framework
Вопрос задан
Изменён
1 год 2 месяца назад
Просмотрен
10k раза
Пытаюсь написать приложение по https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework
Запускается успешно, но на localhost пишет:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Как исправить ее в данном проекте?
В HTML в строке по типу
<tr th:each="student : ${students}">
students
выделяется как ошибка. Почему?
К
- java
- spring-mvc
- thymeleaf
7
При работе Spring Boot
+ Freemarker
если появляется страница:
Whitelabel Error Page
This application has no explicit mapping for
/error, so you are seeing this as a fallback.
В версии spring-boot-starter-parent 2.2.1.RELEASE
не работает freemarker
:
- переименуйте файлы
Freemarker
c.ftl
на.ftlh
Добавьте в
application.properties
:spring.freemarker.expose-request-attributes=true
spring.freemarker.suffix= .ftl
Проблема #1: на /
ничего не замаплено, поэтому при открытии сайта вы видите подобную ошибку.
Проблема #2: если обратиться по адресу /students
, то появляется еще одна ошибка, но уже другая: Exception evaluating SpringEL expression: "student.forename + ' ' + student.surame" (students:16)
. Если очень внимательно посмотреть, то уже ясно в чем дело, но на всякий случай можно посмотреть в консоль на исключение: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 33): Property or field 'surame' cannot be found on object of type 'wenti. entity.Student' - maybe not public?
Причина в банальной опечатке — вы обращаетесь к полю surame
, вместо surname
.
В дополнение к ответу о том, что:
При работе Spring Boot + Freemarker если появляется страница:
Whitelabel Error Page
This application has no explicit mapping for error, so you are seeing this as a fallback.
У меня версия spring-boot-starter-parent 2.5.3 чтобы работал freemarker сделал следующее:
Добавьте в ваш файл application.properties:
spring.freemarker.expose-request-attributes=true spring.freemarker.cache=false spring.freemarker.template-loader-path=file:src/main/resources/templates/ spring.freemarker.suffix: .ftl
В ошибке написано, что неверный мапинг по адресу /error
. Spring перенаправляет вас на страницу /error
когда по вашему GET запросу произошла ошибка на сервере.
Какие есть варианты
1. Ошибка при получении/обработке данных на сервере (как пример NullPointerException
). Пройтись дебагом по коду, посмотреть не выпадает ли где exception.
2. Ошибка при парсинге страницы thymeleaf.
Посмотрите лог, скорее всего ваша ошибка выше, чем то, что вы указали в отрывке.
1
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
что за ошибка и как ее исправить – База знаний Timeweb Community
Когда на сайт пытается попасть человек, а вместо искомого контента натыкается на ошибку, то важно выяснить, что это за ошибка и почему она посмела явиться в столь неподходящий (а это любой) момент.
Благо у нас есть замечательные коды 4хх и 5хх, хоть и не так подробно, как хотелось бы, но рассказывающие о том, почему возникла ошибка. Ну а мы, зная эту информацию, можем попытаться ошибку исправить.
В этом материале речь пойдет об ошибке 405 Method Not Allowed. В деталях опишу проблему и расскажу, как ее побороть.
Что означает код ошибки сервера 405?
Код 405 Method Not Allowed говорит нам о том, что сервер получил определенный запрос с заданным HTTP-методом, смог его распознать, но не дает добро на его реализацию. То есть пользователь не получит доступ к контенту, который запросил.
В отличие от 404, 405 уточняет, что запрашиваемая страница существует и функционирует. Только вот стоит изменить используемый в HTTP-запросе метод. Иначе ничего не выйдет.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Из-за чего я вижу эту ошибку?
Есть 9 HTTP-методов, которые используются браузерами для общения с серверами. Из них два задействуются чаще остальных. Это метод GET для запроса информации с ресурса и метод POST для передачи какой-нибудь информации на ресурс. Два метода покрывают почти все существующие сценарии взаимодействия клиента и сервера от запроса статьи до отправки логина и пароля на сайт. Так как они выполняют разные задачи, для сервера нет никакой нужды принимать GET для авторизации на сайте или POST для загрузки данных. Если же клиент так делает и отправляет некорректный запрос (не с тем методом, который должен быть), то сервер ответит ему ошибкой. То же произойдет, если ресурс будет настроен так, что не сможет принимать специфичный набор запросов, не попадающих в «стандарт». Такие дела.
Как исправить 405 Method Not Allowed?
Ок, небольшой ликбез провел, теперь расскажу о том, что можно предпринять, чтобы исправить обнаруженную ошибку и вернуть посетителям доступ к сайту.
Что может сделать пользователь?
Ошибка Method Not Allowed под номером 4хх вроде бы говорит о вине клиента. Но несмотря на это, пользователь мало что может сделать, чтобы устранить проблему. В его компетенции только убедиться в том, что он не допустил ошибку в базовых вещах, и попробовать повторить те же действия в надежде на успех.
Заново открыть ту же страницу
Иногда 405 Method Not Allowed может исчезнуть после перезагрузки страницы. Так что перед тем как принимать сложные решения и жаловаться на владельцев сайта, нажмите F5 или Cmd + R раза два.
Проверить, правильно ли он ввел URL-адрес
Несложная задача, но полезная. Как и в случае с кучей других ошибок, 405 может явиться из-за банальной опечатки или лишнего символа. К тому же многие серверы защищены таким образом, чтобы напрочь блокировать доступ к несуществующим страницам или каким-либо подуровням (в которые человек может пытаться залезть неслучайно).
Так что пользователю стоит заглянуть в адресную строку браузера и убедиться в корректности введенной ссылки. Если что-то нет так, то лучше открыть главную страницу сайта и искать нужную информацию там, а не пытаться попасть на нее, вводя адрес вручную.
Что может сделать владелец сайта?
Как это часто бывает, у сервера гораздо больше способов исправить клиентскую ошибку. Тут реально целый ворох решений: от удаления подозрительных компонентов из CMS до редактирования конфигурационных файлов.
Проверить настройки сервера
Тут будут инструкции для владельцев сайтов на базе Apache и Nginx в Timeweb. Понятно, что есть другие варианты конфигураций, но эти два — чуть ли стандарт, использующийся повсеместно. А информация, касающаяся конкретно Timeweb, заденет только расположение файлов и работу с панелью управления хостинга. Остальные моменты универсальны.
Инструкция для пользователей Apache
Наша задача состоит в том, чтобы в файле .htaccess найти записи, которые могут провоцировать появление ошибки 405. А потом их закомментировать или удалить. Чтобы это сделать:
- Открываем панель управления Timeweb.
- Ищем внутри вкладку «Файловая система» и переходим на нее. (.)$ http://timeweb/ru/new$1 [R=405,L]
За появление ошибки отвечает запись [R=405,L]. То есть в настройках указано, как себя будет вести сервер при определенном запросе. Надо найти все такие директивы и закомментировать их, поставив # перед записью.
Инструкция для пользователей Nginx
Здесь нужно сделать примерно то же. Разница в том, как выглядит файл с настройками и в его расположении.
- Ищем файл nginx.conf по пути /usr/local/nginx/conf или /usr/local/etc/nginx.
- Открываем его любым текстовым редактором.
- Находим код, включающий в себя упоминание ошибки 405.
В Nginx код выглядит немного сложнее. Например, запрос метода для ссылки https://moysait.com/ru/services/create будет выглядеть так:
server { listen 80; listen 443 ssl; server_name moysait.com; location /users/create { if ($request_method = POST) { return 405 https://moysait. com/services/create$request_uri; } } }
Делаем ту же процедуру. Останавливаемся везде, где находим директиву с ошибкой 405. Анализируем ее (вдруг, она тут случайно). И при необходимости комментируем или удаляем.
Исправить проблемы, связанные с PHP-скриптами
Ошибки могут возникнуть при попытке импортировать или экспортировать слишком объемную базу данных. На хостинге может быть установлено ограничение в полминуты, запрещающее использовать один PHP-скрипт дольше этого времени. Поэтому, если процесс затянется, сервер может отозваться ошибкой 405.
Обойти ограничение можно тремя путями:
- Попробовать экспортировать БД через phpMyAdmin.
- Разбить файл БД на несколько мелких частей, передача каждого из которых займет меньше 30 секунд.
- Использовать для передачи БД Cron-задачу. На них сервер выделяет больше времени.
Еще специалисты рекомендуют удалить статические файлы с разрешением, которые Nginx обрабатывать не должен. Это делается через панель управления хостингом в соответствующем разделе файлового менеджера.
Исправить эксклюзивные для Nginx ошибки
Как мы уже выяснили выше, ошибка может возникнуть при попытке использовать неподходящий метод. Вот как можно исправить это в случае с Nginx-сервером.
Первый вариант — убедить сервер в том, что вместо кода 405 надо отправлять код 200, и это вполне нормально:
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 404 /404.html; error_page 403 /403.html; error_page 405 =200 $uri; … }
Для тех, у кого Nginx-сервер — это proxy, понадобится вот такой код:
error_page 405 =200 @405; location @405 { root /htdocs; proxy_pass http://localhost:8080; }
Аналогичная ошибка возникает при работе с модулем FastCGI. (.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include /etc/nginx/fastcgi_params;
}Далее речь пойдет об общих методах диагностики и исправления ошибок. На крайний случай, если конкретные решения не помогли.
Проанализировать все недавние изменения в коде
Если недавно что-то поменяли, а после этого все сломалось, то надо это «поменяли» рассмотреть подробнее. Провести ручной дебаггинг, если можно это так назвать. Наверняка где-то затесалась несерьезная, но обидная ошибка.
Удалить сторонние дополнения для CMS
Если вы используете условный WordPress, то разного рода ошибки могут подкрасться оттуда, где их не ждешь. Например, после установки нового расширения.
Так что при подозрении на наличие сбойного дополнения, лучше попробовать от него избавиться и посмотреть, что будет. Возможно, ошибка исчезнет.
После этого уже можно будет поискать альтернативное расширение или пообщаться с разработчиками по поводу того, почему вообще возникает сбой.
Главное, не забудьте сделать резервную копию CMS перед тем, как что-то удалять и менять. И продолжайте делать бэкапы после, чтобы всегда можно было восстановить рабочую версию сайта.
Откатиться на более старую версию CMS
Бывает так, что сама CMS несет в себе баги и ошибки. Ну или криво установилась. В таком случае можно восстановиться из старой резервной копии и откатиться на одну или несколько версий в прошлое. Когда все работало без ошибок.
Проверить новые записи в базе данных
Расширения могут вносить изменения в базу данных сайта. Иногда не очень полезные. Надо проверить, не появилось ли после установки свежего дополнения каких-либо непрошенных изменений в базе данных. Может, появились подозрительные записи, которых не должно быть. Лучше подвергнуть анализу всю БД от начала до конца (если другие методы исправления ошибки 405 не помогли, конечно).
На этом будем заканчивать. Мы и так уже перешли на самые маловероятные способы исправления этой ошибки. Надеюсь, они не понадобятся, но знать о таких вариантах стоит. Вдруг эти знания когда-нибудь спасут вас и посетителей вашего сайта.
Страница ошибки Whitelabel Spring Boot
by Java Development Journal
В этой статье мы рассмотрим знаменитую страницу ошибки Spring Boot Whitelabel . Мы расскажем, как отключить страницу ошибки по умолчанию и как настроить страницу ошибки Whitelabel в вашем приложении Spring Boot .
Рекламные объявления
Введение
Spring Boot использует значение по умолчанию Страница ошибки Whitelabel в случае ошибки сервера. Это не очень полезно, и мы можем захотеть предоставить более актуальную информацию клиенту в производственной среде. В этой статье основное внимание уделяется странице ошибки с белой меткой Spring Boot . Мы узнаем, как отключить это поведение по умолчанию и как мы можем использовать нашу собственную страницу ошибок для согласования с нашим пользовательским интерфейсом.
1. Отключение страницы ошибки Whitelabel
Существует несколько способов отключить это поведение в приложении Spring Boot. Давайте рассмотрим общие варианты для этого.
1.1 Использование файла свойств
Spring Boot предоставляет файл
application.properties
(или YAML) для простой настройки/изменения вашего приложения. Мы можем использовать тот же файл свойств, чтобы глобально отключить эту страницу с ошибкой. Для этого задайте дляserver.error.whitelabel.enabled
значениеfalse
.# Включить ли страницу ошибки по умолчанию, отображаемую в браузерах в случае ошибки сервера. server.error.whitelabel.enabled=false
Обратите внимание, что использование приведенной выше конфигурации восстановит значение по умолчанию для используемого вами контейнера сервлетов. Это означает, что если вы не используете какую-либо пользовательскую страницу ошибок, клиенту будет показана страница ошибок контейнера сервлета по умолчанию (например, страница ошибок сервера tomcat по умолчанию).
Другой вариант — исключить ErrorMvcAutoConfiguration из вашего приложения с помощью файла
application.properties
.spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
Для приложения Spring Boot 1.x используйте
ErrorMvcAutoConfiguration
для исключения из списка.1.2 Исключить с помощью @EnableAutoConfiguration
Если вы хотите исключить использование кода, у вас есть возможность передать список конфигураций исключения в
@EnableAutoConfiguration
аннотация.Заголовок управления кэшем Spring Security…
Пожалуйста, включите JavaScript
Заголовки управления кэшем Spring Security
@SpringBootApplication @EnableAutoConfiguration(исключить = { ErrorMvcAutoConfiguration. класс }) public class SpringBootApplication { // код приложения }
2. Пользовательская страница ошибок
Как было предложено, одним из первых вариантов является переопределение страницы ошибок собственным шаблоном. Для этого поста мы берем 9 0007 Thymeleaf в качестве нашего базового механизма шаблонов. Мы создаем пользовательскую страницу ошибки с именем
error.html
и сохраняем ее в каталогеresources/templates
. В случае ошибки система Spring Boot автоматически выберет эту пользовательскую страницу ошибки. Давайте посмотрим, как выглядит страница перед настройкой страницы ошибок.Рекламные объявления
Рекламные объявления
Давайте создадим наш собственный файл error.html и поместим его в
ресурсы/шаблоны 9каталог 0040.
<голова>
У нас проблемы голова> <тело> <дел>Приносим извинения.
Эта страница вышла для быстрой поездки.
Пожалуйста, вернитесь на нашу домашнюю страницу, чтобы возобновить работу в Интернете.