Spring Boot项目MySQL表未创建及index.jsp无法访问求助
Spring Boot项目问题排查指南
问题描述
在Eclipse中创建Spring Boot项目后,遇到两个核心问题:
- POJO类的JPA注解无法在数据库自动创建表(先后尝试H2、MySQL均失败)
- 运行项目后无法访问index.jsp页面
一、数据库表无法创建的解决步骤
1. 确认实体类扫描范围
Spring Boot默认扫描启动类所在包及其子包,如果你的启动类不在com.shriram根包下,需在启动类上添加@EntityScan("com.shriram.model")指定实体类扫描路径。
2. 修正MySQL方言配置
针对MySQL 8+版本,将application.properties中的方言改为:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
旧版MySQLDialect可能导致DDL语法不兼容。
3. 检查数据库基础配置
- 提前手动创建MySQL中的
users数据库(Hibernate的create模式仅自动建表,不会创建数据库) - 确认
root用户密码正确,且拥有users数据库的读写权限 - 查看项目启动日志,搜索Hibernate相关日志,若存在SQL执行报错,根据错误信息调整配置
4. 验证依赖完整性
确保pom.xml中包含Spring Data JPA和MySQL驱动依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>
二、index.jsp无法访问的解决步骤
1. 修正访问端口
你的配置中设置了server.port=9090,所以正确访问地址为http://localhost:9090/index,而非默认的8080端口。
2. 添加JSP支持依赖
Spring Boot默认不支持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>
3. 规范JSP文件位置与视图解析
- 将
index.jsp移动到src/main/webapp/WEB-INF/jsp/目录下(若目录不存在则手动创建) - 在
application.properties中添加视图解析配置:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
之后控制器中只需返回return "index"即可,无需添加.jsp后缀。
4. 优化控制器映射(可选)
若想通过根路径/直接访问index.jsp,可在控制器中添加:
@RequestMapping("/") public String home() { return "index"; }
附用户提供的代码文件
User.java
package com.shriram.model; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; @Entity @Table public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column (name = "ID") private int id; @Column (name = "NAME") private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
UserDAO.java
package com.shriram.dao; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.shriram.model.User; @Repository public interface UserDAO extends CrudRepository<User, Integer>{ }
UserController.java
package com.shriram.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.shriram.dao.UserDAO; import com.shriram.model.User; @Controller public class UserController { @Autowired UserDAO userdao; @RequestMapping("index") public String user() { return "index.jsp"; } @RequestMapping("addUser") public String user(User user) { userdao.save(user); return "index.jsp"; } }
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="addUser"> Enter ID <input type="text" name="id"></input><br> Enter Name <input type="text" name="name"></input> <button type="submit"> SUBMIT </button> </form> </body> </html>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/users spring.datasource.username=root spring.datasource.password= spring.jpa.hibernate.ddl-auto=create spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql= true spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect server.port=9090
内容的提问来源于stack exchange,提问作者Shriram
相关产品推荐
相关产品推荐

