Страница JSP не отображается в приложении SpringBoot - PullRequest
0 голосов
/ 28 мая 2019

Я видел много таких же проблем, но моя проблема не решается всеми этими решениями. Моя страница JSP не отображается.

Я добавил все необходимые jar-файлы, такие как thymeleaf, tomcat, jstl, чтобы запустить приложение, но все равно получаю ошибку

Ниже мой контроллер

@RequestMapping("/rest/user")
public class BookResource {

@GetMapping("/recommend")
    public List<String> recommend() {
        return bookrepo.BookDetail(bookname);

    }
@RequestMapping(value = "/recommendation", method = RequestMethod.GET)
    public String recommend(Model model) {
        model.addAttribute("recommendations", bookrepo.BookDetail(bookname));
        model.addAttribute("name", "Harsh");
        return "recommendation";

    }
}

После того, как я нажму URL, я получаю сообщение об ошибке ниже:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue May 28 09:50:33 IST 2019
There was an unexpected error (type=Internal Server Error, status=500).
Error resolving template "recommendation", template might not exist or might not be accessible by any of the configured Template Resolvers

Страница JSP, которую я создал, не рендерится, я помещаю свою страницу jsp в ресурсы / шаблоны, а также в WEB-INF / jsp /. И файл свойств также обновляется

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

pom.xml

<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.springBootApp</groupId>
    <artifactId>FirstSpringBootApp</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.6</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap-datepicker</artifactId>
            <version>1.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>1.9.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Redis Dependencies -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- GCP Dependencies -->

        <!-- <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency> -->

    </dependencies>

    <build>
        <plugins>
             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin> 

            <!-- GCP plugin -->
            <!-- <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>1.3.2</version>
            </plugin> -->
        </plugins>
    </build>

</project>

Структура.

Project Structure

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Spring Boot не поддерживает JSP при использовании jar-упаковки . Если вы хотите использовать JSP, тогда вы должны использовать упаковку для военных действий. Вы можете сделать это, добавив следующее к вашему pom.xml:

<packaging>war</packaging>

Обычно размещается сразу после строки с тегом <version>.

Сделав это изменение, вы должны указать Eclipse обновить ваш проект Maven, щелкнув правой кнопкой мыши FirstSpringBootApp и выбрав Maven -> Update Project….

Использование военной упаковки означает, что Eclipse распознает src/main/webapp, и ваши файлы JSP в src/main/webapp/WEB-INF/jsp должны быть найдены. Для дальнейшей справки у Spring Boot есть пример проекта для JSP, который может представлять интерес.

0 голосов
/ 28 мая 2019

Что касается весенней загрузки, то есть Ограничения , когда дело доходит до jsp.

Если упаковка не объявлена ​​в pom.xml, весенняя загрузка по умолчанию рассматривает ее как jar.

Чтобы преодолеть эти ограничения, нам нужно выполнить настройку в приложении для отображения jsp, поместивjsp в папке src / main / resources / META-INF / resources / WEB-INF / jsp.

Пример кода: Нажмите здесь

Ссылки:

https://dzone.com/articles/spring-boot-with-jsps-in-executable-jars-1

https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample

0 голосов
/ 28 мая 2019

Из вашей трассировки стека видно, что Springboot не может разрешить ваш шаблон "рекомендация" , поэтому он должен иметь отношение к тому, где вы сохранили файлы JSP.

Keepваши шаблоны jsp под /WEB-INF/jsp/, так как это то, что вы предоставили в application.properties.Кроме того, убедитесь, что расширение для вашего шаблона равно .jsp, поскольку вы также указали это в файле свойств.

Убедитесь, что в вашем pom добавлены следующие зависимости:

<!-- JSTL -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!-- To compile JSP files -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

Вы можете удалить зависимость thymeleaf, так как здесь вы используете jsp в качестве движка шаблонов.

Если этот не сработал , то вы можете попробовать вручную настроить распознаватель jsp view следующим образом:

@Configuration
public class MvcConfiguration implements WebMvcConfigurer
{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        registry.viewResolver(resolver);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...