You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:37:17