Maven 默认情况下,SpringBoot希望视图存储在哪里?
我正在尝试使用SpringBoot重新编写我的配置繁重、普通的SpringMVC项目。我使用Spring Boot Initiaizer在IntelliJ中启动了一个全新的Spring Boot项目,我将采用最小的基于Java的配置。许多教程指出,生成的默认主类就足够了,Maven 默认情况下,SpringBoot希望视图存储在哪里?,maven,jsp,spring-mvc,spring-boot,Maven,Jsp,Spring Mvc,Spring Boot,我正在尝试使用SpringBoot重新编写我的配置繁重、普通的SpringMVC项目。我使用Spring Boot Initiaizer在IntelliJ中启动了一个全新的Spring Boot项目,我将采用最小的基于Java的配置。许多教程指出,生成的默认主类就足够了,@SpringBootApplication包含了所有内容。我使用了一个示例REST控制器来工作,并以JSON的形式返回一个序列化对象,但要显示视图似乎很困难。我的结构如下所示,除了我创建的webapps目录之外,所有内容都是默
@SpringBootApplication
包含了所有内容。我使用了一个示例REST控制器来工作,并以JSON的形式返回一个序列化对象,但要显示视图似乎很困难。我的结构如下所示,除了我创建的webapps目录之外,所有内容都是默认的
src
`-main
`-java
`-resources
`-static
`-templates
`-webapp
`-WEB-INF
`-home.jsp
控制器非常简单
@Controller
public class ViewMaster {
@RequestMapping("/home")
public String home() {
return "home";
}
}
在没有任何配置的情况下,我想知道SpringBoot希望将视图存储在哪里,以及使用什么扩展名(html?)。我还尝试在application.properties
中包含以下内容,但仍然出现404错误。在参考资料中移动WEB-INF目录或仅移动html文件也没有帮助
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
我还尝试在pom.xml中包含这些依赖项,但没有任何效果
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
org.apache.tomcat.embed
汤姆卡特·贾斯珀
假如
javax.servlet
jstl
我一定是错过了一些非常明显的东西,所以如果有人能指出这一点,我将不胜感激 tys,请尝试添加依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</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-thymeleaf</artifactId>
</dependency>
org.springframework.boot
spring.mvc.view.prefix
是webapp文件夹的相对路径,您可以将jsp文件放入其中。您首先想到的是在por pom中插入依赖项,如下所示
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</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>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<packaging>war</packaging>
....
</project>
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
对于您在应用程序属性中的配置,可能还可以,但我建议您将jsp放在特定文件夹下,然后重构配置以指向新路径,而不仅仅是在WEB-INF下,这只是一个建议
我希望这能对您有所帮助。解决方案
我通过反复试验找到了答案,结果很烦人。如果这个结论是错误的,我希望有人能纠正我,但是Spring Boot似乎不喜欢字符串WEB-INF
。我将WEB-INF
目录重命名为view
,并将application.properties
更改为以下内容,视图加载成功
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
其他发现
本练习的目的是创建一个基于Java的最小配置的工作示例,因此我继续最小化设置。然后,我发现在多个帖子和论坛上发布了很多建议,所以没有任何帮助@JBNizet在其对springboot文档的评论中提供了一个链接,其中列出了一个没有人提到的非常突出的点:jsp不能很好地使用springboot,因为它有一些限制,这取决于所选择的嵌入式容器。考虑到这一点,我决定尝试用ThymeLeaf模板替换JSP
我的新工作配置不再需要这些:
- 无需添加
application.properties
:spring.mvc.view.prefix
+spring.mvc.view.sufix
- 无需将包装类型从jar更改为war
- 不需要修改主类
- 无需为添加pom.xml依赖项
org.springframework.boot/springbootstartertomcat
org.springframework.boot/tomcat嵌入jasper
javax.servlet/jstl
因此,只有默认的Spring启动模板和2个ThymeLeaf依赖项,它们的视图名为ViewName.html
放在src/main/resources/templates
中
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
</dependency>
org.thymeleaf
百里香
org.thymeleaf
百里香
application.properties
删除:
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
加:
pom.xml
删除jasper依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</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-thymeleaf</artifactId>
</dependency>
org.apache.tomcat.embed
如果没有任何配置,Spring Boot希望视图存储在/webapp中,视图页面可以是任何格式,具体取决于application.properties设置(如html或jsp)
将.jsp设置为/views/folder处的查看页面
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp //for .html change it to .html
你必须使用tomcat jaspher,如果你不包括它,页面将不会被解析,而是作为一个文件下载
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp
我也遇到了同样的问题,JSP页面位置正确,并且在application.properties中正确设置了所需的配置
经过长时间的检查,我最终发现问题是由应该从pom.xml中删除的依赖项“spring boot starter thymeleaf”引起的。实际上,这种依赖关系支持web应用程序中的XHTML/HTML文件,而我们使用的是JSP页面
因此,如果我们在Spring MVC中使用JSP页面,则应删除以下任何依赖项:
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-thymeleaf</artifactId> -->
<!-- </dependency> -->
根据@Jasbin karki给出的答案,我尝试并发现将html或jsp文件放置在main->webapp->views文件夹(您应该创建webapp和views文件夹)中,并在application.properties文件中添加以下行可以完成任务,我希望这可以帮助任何有相同问题的人。
在application.properties中添加以下内容:
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.html //or .jsp- if its a jsp file
org.apache.tomcat.embed
汤姆卡特·贾斯珀
假如
将范围更改为“默认”解决了我的问题您读过这篇文章吗?在您的/WEB-INF/
目录下,我没有看到任何.jsp
文件。我只看到home.html
文件,这是一个jsp文件和一个打字错误吗?@JBNizet谢谢。不知道JSP限制。@SanjayRawat是的,这是一个打字错误。谢谢你指出。很旧,但这可能仍然是相关的:WEB\u INF
目录不应该只包含隐藏视图吗?这不是必需的。所有3个步骤都没有帮助。很奇怪,你能提供更多关于错误的详细信息吗?错误只是一个小错误