我在intelliJ中创建了一个简单的Spring Boot Web应用程序。我在/ src / main / resources / templates /文件夹中放了一个简单的.jsp文件,其中包含一些基本的HTML。
我正试图在控制器中返回这个但是我收到了这个错误;
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Sep 09 10:37:46 BST 2016
There was an unexpected error (type=Not Found, status=404).
No message available
我假设Spring无法找到.jsp文件,但是控制台中没有其他错误可以提供任何进一步的信息。
这是我的简单控制器;
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("")
public ModelAndView index() {
return new ModelAndView("test");
}
}
我在application.properties文件中包含以下内容;
spring.mvc.view.prefix = /templates/
spring.mvc.view.suffix = .jsp
我的POM文件包含以下依赖项;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</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-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
我正在使用带有嵌入式tomcat的Spring Boot。
我已经尝试将application.properties中的视图路径更改为; classpath:/ templates /但这也没有任何区别。
最后,这是我项目的结构;
运行应用程序时,我只是使用IntelliJ中的“运行”选项。
答案 0 :(得分:5)
我最近也遇到了以下情况:-
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
如果我将“范围”更改为“默认”,请使用Intellij运行该应用程序,即可正常工作。
但是,如果要将“作用域”保持为“提供”,则必须使用命令行(终端)并执行以下操作:-
mvn clean spring-boot:run
对我有用。
答案 1 :(得分:4)
如果我使用tomcat-embed-jasper依赖默认范围(未标记&#34;提供&#34;)那么一切正常......使用spring boot 1.5.2和idea 2017.1。否则,很难改变这种情况 - 如果你在IDEA项目结构中更改它,它就会在下次从maven或gradle更新项目时丢失。我还没有想出办法让它发挥作用。
如果你在IDEA中使用Spring跑步者,情况会更加复杂 - 尽管我建议不管怎样。当IDEA完全知道您的项目是Spring时,它会让事情变得更好。
答案 2 :(得分:4)
答案 3 :(得分:3)
Spring Boot reference documentation Chapter 27.1.7 Template engines中有一个IntelliJ用户的特殊提示:
IntelliJ IDEA根据您的方式对类路径进行不同的排序 运行你的应用程序通过main在IDE中运行应用程序 方法将导致您运行时的顺序不同 使用Maven或Gradle或其包装的jar应用程序。这个可以 导致Spring Boot无法在类路径中找到模板。如果 你受这个问题的影响,你可以重新排序 IDE首先放置模块的类和资源。或者, 您可以配置模板前缀以搜索每个模板
classpath: classpath*:/templates/
上的目录。
答案 4 :(得分:2)
以下内容将使应用程序与IntelliJ配合使用:
在main下,创建文件夹结构webapp / WEB-INF / jsps / - 文件夹结构的最后一部分可以命名为任何内容,但它是jsps所在的位置。
删除属性:
spring.mvc.view.prefix = /templates/
spring.mvc.view.suffix = .jsp
从application.properties文件中,在Configuration类中显式创建一个InternalResourceViewResolver bean,并在那里设置这些属性。
这就是您的Configuration类的样子:
@Configuration
@EnableWebMvc
public class WebMvcConfig {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsps/");
resolver.setSuffix(".jsp");
return resolver;
}
}
尝试一下 - 它应该在IntelliJ
中起作用答案 5 :(得分:2)
有点晚,但这对我有用。 在此路径中添加.jsp文件:
src/main/resources/META-INF/resources/
如果要配置configure.properties
文件,请在其中添加以下行:
spring.mvc.view.prefix= /WEB-INF/views/
spring.mvc.view.suffix= .jsp
信用:https://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-serve-dynamic.html
答案 6 :(得分:0)
经过多次试验,它对我有用。它是两个步骤的组合。
1)必须将Maven打包设置为“ war”,然后才将“ webapp”下的所有内容都放入目标war文件中。 如果包装为“罐”,则省略“ webapp”目录。
2)从IntelliJ运行spring boot主类不起作用。 使用以下命令从命令提示符运行应用程序:'mvn spring-boot:run'
答案 7 :(得分:0)
在IntelliJ中,您不能将提供的内容放在tomcat-embed-jasper下!
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
答案 8 :(得分:0)
经过多次尝试,我得以解决此问题:
在IntelliJ 2019.02.04的Spring Boot配置中,选择工作区$MODULE_WRK_DIR
。