Spring Boot不呈现JSP视图

时间:2017-05-02 00:43:54

标签: java spring jsp spring-mvc spring-boot

我使用Spring Boot 1.5.3.RELEASE。这是课程MvcConfiguration

package hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import java.util.Locale;

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {

    private static final Logger logger = LoggerFactory.getLogger(MvcConfiguration.class);

    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        logger.info("Register ViewResolver success.");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("locale");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
        super.addInterceptors(registry);
    }

}

控制器:

package hello;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(path = "/")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    public String home(){
        return "currency";
    }

}

调试应用时,我看到日志

2017-05-02 07:41:48.970  INFO 3333 --- [           main] hello.MvcConfiguration                   : Register ViewResolver success.

但webapp返回纯JSP文本: enter image description here

我在build.gradle添加了必要的依赖项。我更喜欢在独立的Tomcat上运行Web应用程序。如何解决?

2 个答案:

答案 0 :(得分:1)

您需要为tomcat-embed-jasper添加依赖项。 build.gradle文件中的依赖关系应如下所示。

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    // JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'mysql:mysql-connector-java'
    compile 'javax.servlet:jstl:1.2'
    providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

现在您可以运行如下的Spring Boot应用程序。

gradle bootRun

如果要在独立的tomcat中部署,则不要添加tomcat-embed-jasper依赖项。你的war文件中需要jstl jar。

gradle build

答案 1 :(得分:1)

根据Spring Boot文档:

  

如果可能,应该避免使用JSP,将它们与嵌入式servlet容器一起使用时有几个已知的限制。

这是链接:

http://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-template-engines