当前位置: 首页 > 知识库问答 >
问题:

spring boot-无法解析jsp视图

洪建茗
2023-03-14

我正在尝试构建一个基本的MVC应用程序使用spring boot,以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";
   }

}  

应用程序.属性:

服务器端口: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>

主类

@ComponentScan
@Configuration
@EnableAutoConfiguration
public class ApplicationStart {
    public static void main(String[] args)
    {
        SpringApplication.run(ApplicationStart.class, args);
    }
}

这是我的应用程序的当前设置。对于如何解决这个问题的任何帮助都非常感谢。

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

谢谢-

共有2个答案

燕志学
2023-03-14

我最近在升级一个旧项目时遇到了这个问题,该项目需要将JSP作为视图技术,并将Tomcat作为嵌入式Servlet-Container。注意:选择一个替代的模板引擎,如果可以的话,避免使用JSP。但是,如果您无法避免JSP,并且您的应用程序无法解决它们,那么在撰写本文时(spring-boot2.x.x),请确保以下内容:

  • 确保应用程序打包为war而不是JAR。虽然让JSP与jar打包一起工作并非不可能,但由于某些限制,这有点复杂。您可以使用服务器或容器中的war包运行它们,就像:Java-jar war-filename.war
  • 验证您的控制器是否具有@controller批注,但没有annnotation@enablewebmvc。这是因为您正在使用spring-boot为您配置WebMVC。
  • 您的控制器是否被扫描并作为组件注入?如果您在不同的包中定义了控制器,那么您可能缺少@componentscan注释?
  • 是否正确定位和配置了JSP?例如,假设您的JSP位于/src/main/webapp/web-inf/jsp/中,那么您的application.properties应该具有如下内容:spring.mvc.view.prefix:/web-inf/jsp/spring.mvc.view.suffix:.jsp

此外,由于您使用的是spring引导,因此应用程序不需要扩展SpringBootServletInitializer。它也可以工作,但是为了保持简单,您所需要的只是一个如下所示的类:

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示例):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>
<dependencies>
    <!-- spring-boot dependencies below -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- jstl and jsp compilation support below -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
南宫天逸
2023-03-14

spring boot对JSP的支持有限,因为它使用了嵌入式servlet容器。摘自spring boot参考文件:

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

  • 对于Tomcat,如果您使用war打包,它应该可以工作,即一个可执行的war可以工作,并且还可以部署到一个标准容器(不限于,但包括Tomcat)。由于Tomcat中的硬编码文件模式,可执行jar将无法工作。
  • Jetty目前不作为JSP的嵌入式容器工作。有一个JSP示例,您可以看到如何设置。

从使您的应用程序成为一个可执行的war开始,并确保您使用了Tomcat(启动应用程序时查看日志)。除非您明确声明应该包含Jetty,否则您将使用Tomcat,因为它是默认提供的。或者,尝试更改您的视图技术,这可能需要更多的初始工作,但可以显著减少开发期间的周转时间,请参见热交换。

 类似资料:
  • 我在tomcat 7本地应用程序服务器上使用JSP 1.2和JSTL或Spring的taglib声明。但是,无论文件是在WEB-INF/lib下还是在类路径的其他位置,我总是会收到这样的错误:绝对uri:http://java.sun.com/jsp/jstl/core无法在web.xml或与此应用程序一起部署的jar文件中解析绝对uri:http://www.springframework.or

  • 我正在处理一个Spring boot项目,我使用了JSP文件并提供了Whitelabel错误页面。有一个意外的错误(type=Not ville, status=404)。 我已经将JSP放在/src/main/webapp/pages/中,并且已经用应用程序属性给出了路径。 这有几个模块,主要组件不包括Spring Boot依赖性,它只包括所需的特定模块。从其他模块继承的代码已用于Spring

  • 当应用程序在AWS Elasticbeanstrok上运行时,有人知道如何从资源文件夹中读取文件吗? 请参阅下面的代码: 这是错误消息: JAVA木卫一。FileNotFoundException:类路径资源[application.properties]无法解析为绝对文件路径,因为它不位于文件系统:jar:file:/var/app/current/application中。罐子/BOOT-IN

  • Springboot 2.5.13,swagger2:实现" io . spring fox:spring fox-boot-starter:3 . 0 . 0 "实现" io . spring fox:spring fox-swagger-ui:3 . 0 . 0 " 运行时错误:无法解析名为“forward:/swagger ui/index.html”的视图

  • 你好,我写和销售机票的后端服务,我试图为这个api编写测试。当我试图为AirlineCompanyController类编写createAirlineCompany测试时,我得到了这个错误。 我的测试班: 还有我的航空公司服务舱: 我的航空公司Imp课程: 我得到的错误是来自then返回()方法,我不知道如何解决这个问题。谢谢大家。

  • 我在用 嵌入式Jetty 9。 Maven Java 1.7 JSTL 当我在Eclipse中运行应用程序并浏览到包含JSTL标记的网页时,它工作得很好。当我将它捆绑在可执行jar中并从cmd提示符运行时,我得到 我是不是漏掉了一些明显的东西!?