Spring启动,JSP文件作为视图在IntellJ中运行时不加载

时间:2016-09-09 09:46:04

标签: spring jsp spring-mvc intellij-idea spring-boot

我在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 /但这也没有任何区别。

最后,这是我项目的结构;

Project File Structure

运行应用程序时,我只是使用IntelliJ中的“运行”选项。

9 个答案:

答案 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)

设置工作目录对我有帮助---默认情况下为空。

  1. 在Idea中编辑Spring引导应用程序的配置。

  2. 设置工作目录,就像在下面的屏幕截图中所做的那样:

enter image description here

答案 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