Spring Загрузочный JSP 404
Я пытаюсь добавить страницу jsp в службу загрузки Spring. Моя проблема в том, что каждый раз, когда я пытаюсь перейти на эту страницу, у меня есть это:
Страница ошибки Whitelabel
В этом приложении нет явного сопоставления для /error, поэтому вы видите это как резерв.
Вторник 21 апр 23:16:00 EEST 2015 Появилась непредвиденная ошибка (type = Not Найдено, статус = 404). Нет доступных сообщений
Я добавил префикс и sufix в свой application.properties:
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp
Это мой класс контроллера:
@Controller
public class MarkerController {
@RequestMapping(value="/map")
public String trafficSpy() {
return "index";
}
}
Мой класс приложения:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
private static Logger logger = Logger.getLogger(Application.class.getName());
public static void main(String[] args) {
logger.info("SPRING VERSION: " + SpringVersion.getVersion());
SpringApplication.run(Application.class, args);
}
}
И index.jsp:
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<body>
<h1>Hello, World!!!</h1>
<p>JSTL URL: ${url}</p>
</body>
</html>
И это структура файла src:
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── internetprogramming
│ │ │ └── myserver
│ │ │ └── server
│ │ │ ├── Application.java
│ │ │ ├── config
│ │ │ │ └── DatabaseConfig.java
│ │ │ ├── controller
│ │ │ │ └── MarkerController.java
│ │ │ ├── dao
│ │ │ │ ├── MarkerDaoImplementation.java
│ │ │ │ └── MarkerDaoInterface.java
│ │ │ ├── Marker.java
│ │ │ └── service
│ │ │ ├── MarkerServiceImplementation.java
│ │ │ └── MarkerServiceInterface.java
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── webapp
│ │ └── WEB-INF
│ │ └── jsp
│ │ └── index.jsp
Ответы
Ответ 1
Убедитесь, что у вас есть jasper и jstl в списке зависимостей:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
Вот рабочий проект стартера - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp
Ответ 2
В новых версиях Spring следующее должно быть помещено в файл application.properties:
spring.mvc.view.prefix =/WEB-INF/jsp/
spring.mvc.view.suffix =.jsp
Кроме того, файлы JSP должны быть помещены в src/main/resources/META-INF/resources/WEB-INF/jsp
Ответ 3
Моя проблема заключалась в том, что я использовал @RestController вместо @Controller как аннотацию в классе контроллера. Надеюсь, это поможет кому-то помочь.
Ответ 4
моя проблема была Spring vesrion. Я обнаружил, что, поскольку версия 1.4.3 и выше останавливает поддержку встроенных JSP. Поэтому я меняю версию на 1.4.1, это сработало для меня.
снимается другая вещь:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
он не будет работать с ним.
Ответ 5
В дополнение к ответам выше приложение должно быть развернуто как война вместо jar
<groupId>com.igt</groupId>
<artifactId>customer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
для запуска
java -jar customer-0.0.1-SNAPSHOT.war
Также, если вы намереваетесь запустить свое приложение в качестве войны или в качестве исполняемого приложения, вам необходимо предоставить общие настройки компоновщика в методе, который доступен для обратного вызова SpringBootServletInitializer и основного метода, что-то вроде
package com.igt.customer;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class CustomerApplication extends org.springframework.boot.web.support.SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CustomerApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
См.
this
Ответ 6
Это рабочее решение для меня об ошибке "Белая метка": не удается найти страницу просмотра (jsp)
В POM.xml убедитесь, что упаковка - это "война", и добавьте зависимости tomcat/jasper
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Добавьте префикс/суффикс в application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
** Если вы используете Intellij, вы должны установить каталоги веб-ресурсов. В разделе Структура проекта (ctrl + alt + shift + S)> Фасеты> Выберите веб (ваше приложение)> Добавить (+) каталоги веб-ресурсов (у меня есть...... \src\main\webapp)
** Если у вас есть несколько модулей (в целых числах), выполните "Выполнить"> "Изменить конфигурацию"> выберите "Springboot" для приложения> вкладка "Конфигурация"> "Рабочий каталог как $ MODULE_WORKING_DIR $".
Ответ 7
Если вы используете инструменты разработки IDEA, попробуйте указать
Configurations -> Configuration -> environment -> Working directory
Значение в $MODULE_DIR$
Ответ 8
Spring В MVC нет стандартной страницы ошибок по умолчанию (fall-back). Наиболее распространенным способом установки страницы ошибки по умолчанию всегда был SimpleMappingExceptionResolver
(поскольку Spring V1 фактически). Однако Spring Boot также обеспечивает обратную страницу обработки ошибок.
При запуске Spring Boot пытается найти сопоставление для /error
. По соглашению URL, заканчивающийся на /error
, сопоставляется с логическим видом с тем же именем: error
. Как правило, это представление в свою очередь отображает шаблон error.html
Thymeleaf. (Если вы используете JSP, он будет отображаться на error.jsp
в соответствии с настройкой вашего
InternalResourceViewResolver).
Spring Boot будет автоматически использовать и настроить Thymeleaf как механизм рендеринга представления, если он находится в пути к классам.
Тимелеар с Maven:
Убедитесь, что Maven 3 установлен с помощью следующей команды: mvn -version. Перейдите в каталог, в который вы хотите создать свой проект, и выполните Maven archtetype:
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=pl.codeleak.demos.sbt -DartifactId=spring-boot-thymeleaf -interactiveMode=false
Вышеупомянутая команда создаст новый каталог spring -boot-thymeleaf. Теперь вы можете импортировать его в свою среду IDE.
Следующий шаг - настроить приложение. Откройте pom.xml и добавьте родительский проект:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
Значения из родительского проекта будут по умолчанию для этого проекта, если они оставлены неуказанными.
Следующим шагом будет добавление веб-зависимостей. Для этого я сначала удалил все предыдущие зависимости (см. Junit 3.8.1) и добавил следующие зависимости:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
Теперь подождите несколько секунд, пока Maven не загрузит зависимости и не выполнит mvn dependency: tree, чтобы увидеть, какие зависимости включены.
Следующее - конфигурация упаковки. Добавьте add Spring Boot Maven Plugin:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Тимелеаф с Gradle:
Чтобы поставить Thymeleaf на путь к классам, используйте
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
в файле сборки gradle (с использованием соответствующей зависимости maven просто).
В вашем случае, чтобы отобразить представление index.jsp
(в соответствии с используемым контроллером), вам нужно поместить его под src/main/resources/templates/
.
Если сопоставление с /error в представлении не найдено, Spring Boot определяет собственную страницу ошибки возврата - так называемый Whitelabel Error Page
(минимальная страница с информацией о статусе HTTP и любой информацией об ошибке, например сообщение из неперехваченного исключения).
Ответ 9
Вы можете использовать тимелеар с jsp, но вам нужно написать:
spring.thymeleaf.excluded-view-names=#jsp file without extension
в файле application.properties
Ответ 10
Чтобы иметь это в pom.xml
<!-- JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl for jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
Этого может быть недостаточно.
Вы не должны пропустить это.
<packaging>war</packaging>
В противном случае, когда вы создадите пакет, вы получите файл jar и не имеете JSP и встроенный tomcat.
См. приведенный пример и его объяснение здесь https://www.surasint.com/spring-boot-jsp/
Ответ 11
Мой проект работает нормально в Eclipse, но после развертывания на сервере Jalastic, это показывает эту ошибку.
Кто-нибудь, помогите мне, пожалуйста
Ответ 12
Попробуйте добавить файлы ошибок jsp в папку с ошибкой.
application.properties
spring.mvc.view.prefix=/views/jsp/
spring.mvc.view.suffix=.jsp
jsp files :
/views/jsp/error/401.jsp
/views/jsp/error/404.jsp - to display 404 instead of default whitelabel page