Я не понимаю, как Spring отображает представление файлов (например, представление "Домашняя страница" на "Home.jsp"). В Websphere вы найдете его в файле XML. В Spring я вижу, что вы сопоставляете конечные точки для просмотра на контроллерах в классе Java, но на самом деле я не могу найти, как я могу выбрать сопоставление определенного представления с конкретным файлом.
Спасибо
РЕДАКТИРОВАТЬ 1: Похоже, моя первая проблема в том, что не включена поддержка JSP. Это мой Pom.xml:
<?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>org.springframework</groupId>
<artifactId>gs-serving-web-content</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Если я добавлю:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Затем я получаю ошибку на моем pom.xml:
The managed version is 8.5.27 The artifact is managed in org.springframework.boot:spring-boot-dependencies:1.5.10.RELEASE
Сообщается файл org.springframework.boot: Spring-boot-dependencies: 1.5.10.RELEASE.pom, а строчный отчет:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
Обновлено еще раз:
Учтите, что даже если я установлю свой spring.mvc.view.suffix: .html, я получаю ошибку 500 при попытке доступа к http: // localhost: 8080 / приветствие. Вот моя ошибка консоли:
2018-03-11 21:24:40.923 ERROR 4892 --- [nio-8080-exec-5] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-5] Exception processing template "greeting": Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers
2018-03-11 21:24:40.924 ERROR 4892 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers
Вам нужно предоставить Spring ViewResolver две вещи, если вы хотите, чтобы он находил ваши файлы просмотра:
приставка - путь к папке, в которой начинается весь поиск.
суффикс - расширение ваших просмотров.
Вы можете сделать это через xml:
<bean id = "viewResolver"
class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name = "prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name = "suffix">
<value>.jsp</value>
</property>
</bean>
Через application.properties:
spring.mvc.view.prefix: /WEB-INF/pages/
spring.mvc.view.suffix: .jsp
Через конфигурацию Java:
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
return resolver;
}
Итак, если у вас есть файл /WEB-INF/jsp/home.jsp, Spring может найти файл только со строкой hello.
Если у вас есть два hello.jsp в разных папках, это не будет проблемой, потому что вам нужно явно указать, в какой папке находится ваше представление (например, вы укажете return "/foo/hello" или return "/bar/hello")
Смотрите редактирование моего ответа, я пытался ответить на ваши вопросы. Если вы хотите включить поддержку JSP в своем проекте Spring, см. связь. Если я вам помог, отметьте ответ как "принятый".
Спасибо за ответ. Очень признателен. Все начинает обретать смысл. Поэтому, прежде чем я смогу использовать свой приветствие.jsp, мне действительно нужно включить поддержку JSP. Пожалуйста, посмотрите мой РЕДАКТИРОВАТЬ 1.
Ваше изменение - это еще один вопрос, не связанный с этим. Создайте новый вопрос и перестаньте задавать сразу несколько вопросов.
ты прав. Пожалуйста, прости меня. У меня уже есть открытый вопрос о поддержке JSP в Spring: stackoverflow.com/questions/49211178/…
Учтите, что даже если я установил my spring.mvc.view.suffix: .html, я получаю ошибку 500 при попытке доступа к http://localhost:8080/greeting. В РЕДАКТИРОВАТЬ 2 я прикрепляю свою консольную ошибку @Artem Malchenko
Спасибо за добрый ответ. И это довольно интересно. Я редактирую пример Spring «Обслуживание веб-контента». Не знаю, какие у него настройки (я новичок). Однако у меня нет application.properties. Означает ли это, что когда я использую
return "example";в контроллере Java, будет загружен файл example.html? Что делать, если в разных папках два example.html? У меня есть еще один вопрос: похоже, у вас включена поддержка JSP в Spring. Но я не смог добавить его, не нарушив свой проект. У вас есть для меня простое руководство?