spring boot找不到jsp视图

Posted

技术标签:

【中文标题】spring boot找不到jsp视图【英文标题】:Spring boot can not find jsp views 【发布时间】:2016-11-14 21:15:54 【问题描述】:

大家好! 我完成了我的 Spring based 网络应用程序,然后开始将其重建为 Spring boot,因为它使我能够使用 embedded jetty。 目前我遇到了一些问题 - Spring boot 找不到(解决)jsp 视图。所以当我运行我的应用程序时 - 我在浏览器中收到错误:

这里是my web app on github - 所以您只需查看文件即可找到原因。

请帮帮我!

附:是的,我使用了@ResourceImport,因为我不知道如何将现有的 spring 配置 xml 文件重写为基于 java 的配置文件,但你可以在你的回答中告诉我如何做到这一点。

附言并且由于某种原因,目标目录不包含 WEB-INF 并且它是编译后的内容文件夹。可能是这个原因,但我不知道如何解决!

【问题讨论】:

【参考方案1】:

我从github 签出您的代码,并设法部署到嵌入式Tomcat 8.0.3 和独立Tomcat 8.0.x

我将只完成嵌入Tomcat 而不是Jetty 的步骤(因为我还没有完全弄清楚Jetty 的配置)。

你可以做两件事

    将您的 webapps 复制到以下不带 s 的位置,例如/dvdexchange-spring-boot/src/main/webapp

    稍微修改你的 pom.xml,例如以下

    最终结果如下

-

更新:

聪明的汤姆,

我无法使其在嵌入式Jetty 中工作,这是我在努力添加大量Maven Jetty jar 库后所能达到的最远点,如下所示

这实际上是一个已知问题,我看不出如何在没有任何骇人听闻的方式的情况下解决这个问题。

如果您在github link 中阅读过,Spring-Boot 和 Jetty 阵营之间有很多讨论。

讨论的底线是Spring-Boot支持Jsp 嵌入Jetty 作为他们的标准,但未来有计划。

我的建议是不要使用Jsp 或使用Jetty 以外的其他内容作为您的嵌入式容器。

【讨论】:

感谢您的详细回答,但第一种方式是否允许我将嵌入式码头与弹簧靴一起使用? 谢谢,但码头对我的项目来说是必不可少的。 这是我认为的另一点。但这与你发现的相反? from docs.spring.io/spring-boot/docs/current/reference/html/… "如果你的应用被打包成 jar 包,不要使用 src/main/webapp 目录。虽然这个目录是一个通用标准,但它只适用于 war 打包,如果你使用它,它会被大多数构建工具默默地忽略生成一个罐子。”【参考方案2】:

Spring Boot 不正式支持可执行 JAR 中的 JSP,这是 known JSP limitations 之一。另外,Spring Boot supports JSPs in embedded Jetty as of 1.4.0.RC1,不是之前。

现在您可以使用 Spring Boot 1.4+ 和 packaging your application as an executable WAR 解决这个问题。您将能够将您的应用程序部署为常规 WAR,使用 java -jar app.war 运行它并获得良好的开发体验 - 所有这些都使用标准 JSP。

也许您会找到解决这些限制的技巧,但请记住,这些限制通常依赖于 servlet 规范不支持的特定于容器的行为。所以充其量,这种行为在容器之间是不一致的——而且容器当然有可能随时改变它们的行为。

如果您真的想将您的应用程序打包为可执行 JAR,那么最好的方法是不使用 JSP 并选择 a proper template engine。

【讨论】:

这是否意味着如果我想在我的网络应用程序中使用 jsp 就不能使用嵌入式码头?在我的项目中我真的需要它们。你能给出任何解决方案吗? 您可以将项目打包为 WAR,甚至可以将其作为可执行 WAR 运行。参见 spring boot 参考文档 JAR 不是必需的,我可以使用 WAR。但是我应该如何处理我的 viewResolver 配置和文件夹结构?看看我在 github 上的存储库来回答(我的问题中有链接)。提前致谢! 看看这个例子:github.com/spring-projects/spring-boot/tree/master/… 我下载了该源代码并在我的 IntelliJ IDEA 中打开。当我运行它时,我收到错误org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [sample.jetty.jsp.SampleJettyJspApplication]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.boot.web.support.SpringBootServletInitializer【参考方案3】:

如果您想进行 jar-Deployment,则不能使用 wepapp 文件夹。

    将您的 JSP 发送到 src/main/resources/META-INF/resources/jsp

    将这些行添加到您的 application.properties 文件中:

    spring.mvc.view.prefix=/jsp/
    spring.mvc.view.suffix=.jsp
    

你可以看看这个项目。它还使用 Spring-Boot、jar-Deployment 和 JSP:https://github.com/synyx/urlaubsverwaltung

【讨论】:

我按照你说的做了,但它不起作用。看看我的 dispatcherServlet.xml 我应该在那里改变什么吗? (github链接在我的问题中)

以上是关于spring boot找不到jsp视图的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk Spring Boot fat JAR:找不到jsp

找不到带有spring boot的html页面

Spring boot 找不到我的模板视图出现意外错误(type=Not Found,status=404)

spring boot 找不到实体

找不到 Spring Boot Mongo Reactive 类 - 找不到类 [org.springframework.data.mongodb.MongoDatabaseFactory]

Spring Boot 找不到模板