Java Spring启动-无法解析jsp视图

Java Spring启动-无法解析jsp视图,java,jsp,spring-mvc,spring-boot,Java,Jsp,Spring Mvc,Spring Boot,我正在尝试使用SpringBoot构建一个基本的MVC应用程序,其中Hibernate作为ORM,MySql作为数据库。我面临的问题是,jsp视图没有得到解决 当我尝试使用具有以下URL的get请求获取注册表时,我收到一个404错误: http://localhost:9000/users/register/ 这是我在应用程序中的设置 目录结构: -src -main -java -com ApplicationStart.java

我正在尝试使用SpringBoot构建一个基本的MVC应用程序,其中Hibernate作为ORM,MySql作为数据库。我面临的问题是,jsp视图没有得到解决

当我尝试使用具有以下URL的get请求获取注册表时,我收到一个404错误:

http://localhost:9000/users/register/

这是我在应用程序中的设置

目录结构:

-src
  -main
    -java
        -com
          ApplicationStart.java
          -controllers
            UserController.java
          -repositories
            UserRepository.java

    -webapp
        -WEB-INF
          -jsp
            register.jsp

    -resources
        application.properties
@RestController
public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository)
    {
        this.userRepository = userRepository;
    }

   @RequestMapping(value = "/users/register", method = RequestMethod.GET)
   public String Register()
   {
       return "register";
   }

}  
用户控制器:

-src
  -main
    -java
        -com
          ApplicationStart.java
          -controllers
            UserController.java
          -repositories
            UserRepository.java

    -webapp
        -WEB-INF
          -jsp
            register.jsp

    -resources
        application.properties
@RestController
public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository)
    {
        this.userRepository = userRepository;
    }

   @RequestMapping(value = "/users/register", method = RequestMethod.GET)
   public String Register()
   {
       return "register";
   }

}  
应用程序。属性:

-src
  -main
    -java
        -com
          ApplicationStart.java
          -controllers
            UserController.java
          -repositories
            UserRepository.java

    -webapp
        -WEB-INF
          -jsp
            register.jsp

    -resources
        application.properties
@RestController
public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository)
    {
        this.userRepository = userRepository;
    }

   @RequestMapping(value = "/users/register", method = RequestMethod.GET)
   public String Register()
   {
       return "register";
   }

}  
服务器端口:9000

spring.datasource.url:jdbc:mysql://localhost/Contacts

spring.datasource.driverClassName:com.mysql.jdbc.Driver

spring.datasource.username:root

spring.datasource.password:

spring.view.prefix:/WEB-INF/jsp/

spring.view.suffix:.jsp

POM.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.3.RELEASE</version>
</parent>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>


    <!-- HIBERNATE -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
    </dependency>

    <!-- MYSQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

</dependencies>
这是我的应用程序的当前设置。非常感谢您对如何解决此问题的任何帮助

如果需要更多信息,请发表评论


谢谢-

Spring Boot对JSP的支持有限,因为它使用了嵌入式servlet容器。从弹簧靴:

当运行使用嵌入式servlet容器(并打包为可执行存档)的Spring引导应用程序时,JSP支持存在一些限制

  • 使用Tomcat时,如果您使用war打包,它应该可以工作,也就是说,一个可执行的war可以工作,并且可以部署到一个标准容器(不限于,但包括Tomcat)。由于Tomcat中的硬编码文件模式,可执行jar无法工作
  • Jetty目前不作为带有JSP的嵌入式容器工作。 这里有一个窗口,您可以查看如何设置

首先让你的应用程序成为一个可执行的war,并确保你使用Tomcat(启动应用程序时检查日志)。除非您明确声明应该包括Jetty,否则您使用的是Tomcat,因为它是默认提供的。或者,尝试更改视图技术,这可能需要更多的初始工作,但可以显著缩短开发期间的周转时间,请参阅。

我最近在升级一个旧项目时遇到了这个问题,该项目需要使用
jsp
作为视图技术,而
tomcat
作为嵌入式
servlet容器。警告:选择一个替代方案,尽可能避免JSP。但是,如果您无法避免JSP,并且您的应用程序无法解决它们,在撰写本文时(spring boot 2.x.x),请确保:

  • 确保应用程序是一个war,而不是一个jar。尽管让JSP使用jar包装并非不可能,但由于某些原因,它有点复杂。您可以在服务器或容器中使用war包运行它们,就像:
    java-jarwarfilename.war
  • 验证控制器是否具有
    @Controller
    注释 但不是注释
    @EnableWebMvc
    。这是因为您正在使用
    springboot
    为您配置WebMVC
  • 您的控制器是否作为组件进行扫描和注入?如果在不同的包中定义了控制器,可能缺少
    @ComponentScan
    注释
  • 您的JSP是否正确定位和配置?例如,假设您的jsp位于/src/main/webapp/WEB-INF/jsp/,那么您的
    应用程序的属性应该是这样的:
    
    
    spring.mvc.view.prefix:/WEB-INF/jsp/
    spring.mvc.view.suffix:.jsp
    
另外,由于您使用的是spring boot,因此您的
应用程序不需要扩展
SpringBootServletilizer
。它也可以工作,但为了保持简单,您只需要一个如下所示的类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
仅供参考,下面提到了所需的最小依赖集(Maven示例):


org.springframework.boot
spring启动程序父级
2.0.2.1发布
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧靴起动器执行器
org.springframework.boot
弹簧启动机tomcat
假如
javax.servlet
jstl
org.apache.tomcat.embed
汤姆卡特·贾斯珀
假如
同意,如果所有这些都不起作用,请尝试在application.properties文件中添加以下属性


spring.thymeleaf.enabled=false

try
http://localHost:port/YourProjectName/users/register
确保您的pom包装是war而不是jar。