Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 默认情况下,SpringBoot希望视图存储在哪里?_Maven_Jsp_Spring Mvc_Spring Boot - Fatal编程技术网

Maven 默认情况下,SpringBoot希望视图存储在哪里?

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目录之外,所有内容都是默

我正在尝试使用SpringBoot重新编写我的配置繁重、普通的SpringMVC项目。我使用Spring Boot Initiaizer在IntelliJ中启动了一个全新的Spring Boot项目,我将采用最小的基于Java的配置。许多教程指出,生成的默认主类就足够了,
@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个步骤都没有帮助。很奇怪,你能提供更多关于错误的详细信息吗?错误只是一个小错误