Spring-Boot无法在WAR文件中查找JSP页面

运行spring-boot项目(java -jar /path/to/war.war)时,找不到.jsp文件。

使用@ResponseBody注释的方法可以正常工作。 视图解析器提供了JSP页面的正确路径,但找不到它们。 该项目有一个配置类,没有web.xml。

配置类:

@Configuration @EnableAutoConfiguration @EnableWebMvc @ComponentScan (basePackages = "org.ghc.security.web") class ScMain extends WebMvcConfigurerAdapter { // SpringBoot BootStrap... static void main (String[] args) { ApplicationContext ctx = SpringApplication.run (ScMain, args) System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); beanNames.each { beanName -> System.out.println(beanName); } } @Bean InternalResourceViewResolver internalResourceViewResolver () { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver() viewResolver.setPrefix("/WEB-INF/jsp/") viewResolver.setSuffix(".jsp") viewResolver } } 

调节器

 @Controller class Running { @RequestMapping ("/alive") // This works fine @ResponseBody String amIAlive () { "ALIVE!" } @RequestMapping ("/alive/page") // Path to page resolved, but file not found! ModelAndView amIAlivePage () { new ModelAndView("alivepage") } } 

错误日志

2013-11-25 09:08:28.714 ERROR 1549 — [tp1945397783-20] org.apache.jasper.servlet.JspServlet:PWC6117:文件“%2FUsers%2Fnode42%2FDevelopment%2Fmock-security-ui%2Fbuild%2Flibs %2Fmock-security-ui-2.06-SNAPSHOT.war%2FWEB-INF%2Fjsp%2Falivepage.jsp“未找到

日志条目中.war文件的路径是正确的,war文件(WEB-INF / jsp / alivepage.jsp)中的路径是正确的。 无论是使用Jetty还是Tomcat(以上日志来自Jetty),响应都是一样的。 我也尝试过不使用视图解析器,如上所述指定一个,或者通过属性设置视图解析器。 我完全陷入困境,因为除了这一个细节外,一切看起来都在起作用。 并且控制器中的@ResponseBody注释方法工作正常。

如果有人有任何建议我肯定会感激输入!

我遇到了同样的问题,在我的情况下,它发生了,因为我在类路径中缺少一个库。

Spring Boot不包含Jasper作为默认值,因此除非您明确包含库,否则JSP呈现不起作用:

对于Gradle:

 compile("org.apache.tomcat.embed:tomcat-embed-jasper") 

对于Maven:

  org.apache.tomcat.embed tomcat-embed-jasper provided  

我不认为Spring Boot中的可执行存档中的JSP是完全支持的(它在列表中),所以我会先尝试使用a)部署的WAR,和/或b)展开的存档(或运行)来自IDE),或从源代码运行。 一旦它工作,你可能仍然需要等待添加完整的JSP支持(欢迎贡献),但至少你会知道它的工作原理。 您在部署的WAR(没有映射)中看到的错误表明还有其他事情发生。 请注意,如果您想要进行比较,可以在Spring Boot中使用JSP示例 – 直到某一点(JSP已解析并呈现)。

编辑:Spring taglibs,JSTL和EL支持似乎在上面的示例中工作。 我刚刚更新它以添加JSTL并从IDE测试并作为可执行WAR。

我遇到了类似的问题,由默认的servlet未映射引起。 我必须在我的extends DelegatingWebMvcConfiguration类中执行此操作:

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

我通过Bean定义中的小修正解决了这个问题。

 @Bean InternalResourceViewResolver internalResourceViewResolver () { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver() viewResolver.setPrefix("WEB-INF/jsp/") viewResolver.setSuffix(".jsp") return viewResolver; } 

我不知道你的pom.xml,但这似乎与这个线程类似

JSP文件无法在Spring Boot Web应用程序中呈现

请尝试将依赖项列表添加到您的pom中。