Возникла проблема с отображением страницы JSP в Spring-MVC - PullRequest
0 голосов
/ 04 декабря 2018

У меня проблема с отображением страницы jsp в Spring-MVC.Это базовый привет мир Spring-MVC с Gradle и IntelliJ CE:

Я получаю следующую страницу ошибки:

enter image description here

Вот мой build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE")
    }
}


plugins {
    id 'java'
}

group 'com.helloct'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'gs-serving-web-content'
    version =  '0.1.0'
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'    

    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-devtools")

    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework:spring-jdbc")
    compile("com.h2database:h2")

    compile("com.fasterxml.jackson.core:jackson-databind")

    compile('javax.servlet:jstl')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper')    

    compile 'javax.servlet.jsp:javax.servlet.jsp-api'        

    testCompile("junit:junit")
}

Файл разрешения представления:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "hello")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

Страница контроллера:

@Controller
public class JSPController {
    @GetMapping("/jspPage")
    public String home(){
        return "jspPage";
    }
}

jsp страница расположение:

enter image description here

Содержимое файла application.properties:

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

Использованиедвижок шаблонов по умолчанию, страница отображается правильно, но с использованием jsp она не работает

Ошибка журнала:

https://hastebin.com/lijekesoti.apache

ПРИМЕЧАНИЕ. Я знаю, что Thymleleafрекомендуемый шаблон для Spring, но я хочу по какой-то причине работать с JSP


ОБНОВЛЕНИЕ

После прочтения этот пост с помощью ответа paulsm4 , удалив следующую строку:

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

и удалив файл решателя представлений, решил мою проблему.

1 Ответ

0 голосов
/ 04 декабря 2018

Оказывается, нетривиально заставить JSP работать с Spring Boot.Также выясняется, что между Spring Boot 1.x (для которого было написано большинство учебных пособий по Spring Boot / JSP) и Spring Boot 2.x произошли значительные изменения.

Мне показались полезными эти ресурсы:

Я получил JSP, работающий с Spring Boot 1.x и 2.x, с Maven и Gradle.Мой проект здесь на GitHub:

Вот основные моменты того, что мне нужно было сделать:

  1. Я создал свой стартовый проект с помощью Eclipse STS.

    Важно было указать упаковку "War" (вместо стандартной "Jar")

  2. Я добавил следующеезависимости в моем build.gradle:

    dependencies {
      compile('org.springframework.boot:spring-boot-starter-web')
      compile('javax.servlet:jstl')
      compile('javax.servlet:javax.servlet-api')
      compile('org.apache.tomcat.embed:tomcat-embed-jasper')
      compile('org.webjars:bootstrap:4.1.0')
      testImplementation('org.springframework.boot:spring-boot-starter-test')
    

    Оказывается, для 'tomcat-embedded' нужно указать НЕ (по умолчанию он включен в spring-boot-starter-web).

    Но также оказывается, что Embedded Tomcat не будет обрабатывать JSP, если вы явно не включите tomcat-embed-jasper.

    Не указывайте зависимость "thymeleaf" - она ​​будет конфликтовать с "jasper".

  3. Как и в других уроках, я добавил эти строки в свой application.properties:

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

    Я также добавил эти строки в свой корневой класс:

    @SpringBootApplication
    public class Test7Application extends SpringBootServletInitializer {
       ...  
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          return application.sources(Test7Application.class);
       }
    
       public static void main(String[] args) {
          SpringApplication.run(Test7Application.class, args);
       }
    
  4. К сожалению, в «других учебниках» часто говорится о создании папки src/main/webapp/WEB-INF/jsp/.Это будет НЕ работать.

    Вместо этого я помещаю свой test.jsp файл в папку src/main/resources/META-INF/resources/WEB-INF/jsp.

    Эти ссылки объясняют, почему:

  5. На этом этапе я успешно смог отобразить статические страницы и страницы .jsp с помощью Spring Boot.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...