如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)

news2024/10/7 4:28:29

文章目录

  • 📋前言
  • 🎯运行与配置
  • 🎯报错与解决
    • 🧩问题分析
    • 🧩解决过程
  • 🎯知识点补充
    • 🧩关于 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
  • 📝最后


在这里插入图片描述

📋前言

这篇文章分享记录一下,运行超市订单管理系统的 SSM 项目遇到的问题和相关配置,以及 JDBC 连接数据库遇到的问题和解决方法。文章内容包括,运行 SSM 项目,弄好相关配置,解决项目运行出现的问题,以及解决方法和知识点补充。


🎯运行与配置

首先在 idea 中打开项目,第一次导入项目,需要安装和下载相关的配置,如下图的项目的部分目录结构。我们可以看到 cn.smbms 目录下的五个层级,分别表示为:

  • Controller:控制器,负责处理请求数据、调用 Service 层处理业务逻辑,并将结果返回给视图(UI 层)或直接响应给客户端。
  • DAO:数据访问对象,负责与数据库进行交互,实现对数据的增删改查等操作。
  • POJO:简单 Java 对象,通常用于描述业务模型或数据库映射对象。不带有业务逻辑或特殊行为。
  • Service:业务逻辑层,负责处理业务逻辑、调用 DAO 层进行数据访问、组装数据等。
  • UI:用户界面,是与用户进行交互的部分,通常包括 Web 页面、移动应用等。

这些术语在 SSM (Spring + Spring MVC + MyBatis)项目中都非常常见,每个层次之间都有着不同的关系和职责。例如,Controller 层负责接收用户请求并调用 Service 层处理业务逻辑,DAO 层负责访问数据库并提供数据操作的方法,而 Service 层则负责协调 DAO 层和 Controller 层之间的数据传输和处理。
在这里插入图片描述
然后找到项目结构,配置相关的模块、构建和 Facet。我这里的配置基本上是默认配置好的(导入项目时自动配置好的)。
在这里插入图片描述
然后是配置 tomcat (重中之重),注意看图片中的版本,是项目启动时默认的,但是出现了报错,因为我的电脑没下载这个版本的 tomcat ,因此要手动选择找到自己电脑中的 tomcat jar 包。
在这里插入图片描述
完整配置如下。注意 URL 的配置,因为这个项目首页是 index.html ,所以配置了这个 URL 地址,方便跑完服务后默认加载这个页面。然后默认的 HTTP 端口号是 8080 ,JMX 端口为 1099 。
在这里插入图片描述
接下来我们来启动一下服务,点击下图的绿色箭头启动。
在这里插入图片描述
服务启动成功 (Successfully completed request),没有报错,页面也跑出来了。
在这里插入图片描述
在这里插入图片描述
然后测试一下功能,看下是否能正常运行,不出意外的话肯定出意外了。这里分别点了下订单管理、供应商管理、用户管理这个三个功能,都出现了 500 报错,然后我一眼看到 JDBC Connection 这两个词,我就知道问题出在哪了,接下来我们解决一下这个问题。
在这里插入图片描述
在这里插入图片描述


🎯报错与解决

上面也提及到了项目出现的报错,然后报错定位到了 JDBC 连接数据库出现了问题,除了 JDBC Connection 这两个词很清楚的显示了报错的定位,我们浅浅看下其他报错内容,也可以很清晰的知道哪出了问题,接下来我们来逐步解决。
在这里插入图片描述

🧩问题分析

这是一个 SSM 项目中的异常信息,其中嵌套了多个异常。可以从堆栈信息中分析出以下几点:

  • 最外层的异常类型为 NestedServletException,表示 Servlet 处理请求时发生了异常。
  • 原因是 Request processing failed,即请求处理失败。
  • 根本原因是 org.mybatis.spring.MyBatisSystemException,即 MyBatis 运行时发生了异常。
  • 再次嵌套的异常类型为 org.apache.ibatis.exceptions.PersistenceException,表示 MyBatis 操作数据库时发生了异常。
  • 错误信息中含有 Failed to obtain JDBC Connection,表示获取数据库连接失败。

综合来看,这个异常可能是由于应用程序无法连接到数据库服务器导致的。应检查以下几个方面:

  • 数据库服务器是否正常启动并且能够接受连接。
  • 数据库连接配置是否正确,包括数据库地址、端口号、用户名、密码等。
  • 数据库连接池配置是否正确,包括连接池大小、最大连接数、空闲连接超时时间等。

🧩解决过程

第一次跑出来时,因为没有数据库,出现这个报错也无可奈何。之后搞到了数据库,然后用 Navicat 启动 MySQL 服务,然后在确保数据库地址、端口号、用户名、密码都正确的情况下还出现了报错。
在这里插入图片描述
在这里插入图片描述
然后我就认为是 JDBC 版本和 MySQL 版本的问题,其实项目跑出来的页面一股子复古的味道,所以我断定这个是一个老项目了。

然后我们到 WEB-INF => lib 文件下看看驱动是什么版本的,意料之中,这个包版本很低,而且我的数据库的版本是 8。这也是出现报错的主要原因。
在这里插入图片描述
在这里插入图片描述
然后我们把驱动也换成 8 的版本。
在这里插入图片描述
然后 JDBC 的语法也要修改,把 com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver ,然后还要指定时区 serverTimezone

<!-- 配置数据源:使用dbcp连接 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/smbmsdb?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="123456" />
		<property name="defaultAutoCommit" value="false" />
	</bean>

在这里插入图片描述
最后,重新启动服务,运行项目。我们可以发现订单管理页面没有出现报错了。到此 JDBC 连接数据库遇到的问题已解决。
在这里插入图片描述


🎯知识点补充

🧩关于 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别

前身和版本

  • com.mysql.jdbc.Driver旧版MySQL 驱动程序,已经过时,不再提供更新。它是从 MySQL Connector/J 5.1 版本开始使用的,到 MySQL Connector/J 5.1.49 版本停止更新。

  • com.mysql.cj.jdbc.Driver新版MySQL 驱动程序,当前稳定版本为 8.x,推荐使用此版本的驱动程序。它是从 MySQL Connector/J 5.1 版本开始引入的一个分支,最初是为了添加 Java 7 和 8 的功能而创建的,后来又添加了其他功能。

时间处理

  • com.mysql.jdbc.Driver 中,时间处理是基于服务器时区的。这意味着,在使用 com.mysql.jdbc.Driver 时,所有的时间戳都以服务器时区为基准。

  • 但是,在 com.mysql.cj.jdbc.Driver 中,时间处理是基于连接时区的。这样可以更好地控制时间戳的处理方式,因为时间戳取决于应用程序的连接时区。

加载方式

  • com.mysql.jdbc.Driver 中,驱动程序将被自动加载和注册,无需显式加载或注册驱动程序。

  • 而在 com.mysql.cj.jdbc.Driver 中,您需要显式地加载和注册驱动程序。通常在应用程序的初始化中注册驱动程序,即可使用这个驱动程序。

安全性

  • com.mysql.jdbc.Driver 存在一些安全性问题,因此不建议在生产环境中使用它。而 com.mysql.cj.jdbc.Driver 较为安全,推荐在生产环境中使用。

连接属性

  • com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver 都支持连接属性,但在两个驱动程序中,这些属性的名称和默认值是不同的。

  • com.mysql.jdbc.Driver 中的连接属性名称通常以 “jdbc” 的前缀开始,例如 “jdbcCompliantTruncation”,默认情况下为 “false”

  • com.mysql.cj.jdbc.Driver 中的连接属性名称通常以 “mysql” 的前缀开始,例如 “allowPublicKeyRetrieval”,默认情况下为 “false”

数据库的支持程度

  • com.mysql.jdbc.Driver 对于一些在新版 MySQL 中引入的功能和特性可能不支持。而 com.mysql.cj.jdbc.Driver 则对这些新特性进行了改进和扩展,如支持 JSON 数据类型、支持 OpenSSLSHA256_PASSWORD 加密方式等。

因此,在使用 MySQL 的新特性时,建议使用 com.mysql.cj.jdbc.Driver,总之,com.mysql.cj.jdbc.Driver 更为全面、更加安全且功能更强大,建议优先使用它来连接 MySQL 数据库。


📝最后

这就是文章的全部内容了,成功运行超市订单管理系统的 SSM 项目,以及 解决了 JDBC 连接数据库出现的问题。文章全部内容包括,运行 SSM 项目,弄好相关配置,解决项目运行出现的问题,以及解决方法和知识点补充,关于 com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver 的区别。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【严重】GeoServer 存在 sql 注入漏洞(POC已公开)

漏洞描述 GeoServer是一款开源地图服务器&#xff0c;主要用于发布、共享和处理各种地理空间数据。 在GeoServer 的受影响版本中由于未对用户传入的 CQL_FILTER参数进行安全校验&#xff0c;在以数据库作为数据存储时&#xff0c;攻击者可构造攻击语句&#xff0c;绕过GeoSer…

Maven(三):Maven的组成详解

文章目录 坐标和依赖坐标详解依赖配置依赖范围传递性依赖依赖调节可选依赖优化排除依赖归类依赖优化依赖 仓库本地仓库远程仓库仓库镜像常用搜索地址 生命周期与插件三套生命周期clean生命周期default生命周期site生命周期 插件 聚合与继承更加灵活的构建常见问题使用jdk来运行…

使用UglifyJS实现一条指令打包发布项目实例

在前端页面开发中&#xff0c;使用Vue、Angular、React等框架构建的项目通常都会自动配置集成相关代码压缩发布的工具&#xff0c;开发者只需要执行指定命令即可完成项目的整体压缩发布操作。对于没有使用框架的项目&#xff0c;需要开发者手动配置使用相关工具完成对应操作&am…

【OBS】SpringBoot + Vue + el-upload 通过临时 URL 上传文件到 OBS

华为云OBS的官方文档&#xff08;链接&#xff1a;https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0901.html#section1&#xff09;中关于上传文件的内容&#xff0c;只提供了使用JAVA获取临时上传链接&#xff0c;并使用JAVA创建请求上传纯文本的方法。想要把这部…

离线分析fsimage文件进行数据深度分析

以离线分析FsImage文件进行数据深度分析 整个方案的基本架构&#xff1a; FsImage文件时HDFS存放在NameNode中的镜像文件&#xff0c;里面包括了整个HDFS集群的目录和文件信息&#xff0c;(类似于一个索引目录部分数据的文件)&#xff0c;而且HDFS提供了命令可以将FsImage文件…

【严重】VMware Aria Operations for Networks 远程代码执行漏洞(存在POC)

漏洞描述 VMware Aria Operations for Networks (前名为vRealize Network Insight)是 VMware 公司提供的一款网络可视性和分析工具&#xff0c;用于优化网络性能或管理各种VMware和Kubernetes部署。 VMware Aria Operations for Networks 6.x版本中由于 createSupportBundle…

How to fix the global rice crisis 如何应对全球稻米危机 | 经济学人20230401版双语精翻

4月1日《经济学人》周报封面即社论区&#xff08;Leaders&#xff09;精选文章&#xff1a;《如何应对全球稻米危机》&#xff08;How to fix the global rice crisis&#xff09;。 “民以食为天”语出《孟子公孙丑上》&#xff0c;强调&#xff1a;人民的生命福祉和国家的繁荣…

每日一练 | 华为认证真题练习Day62

1、广播地址是网络地址中主机位全部置为1的一种特殊地址&#xff0c;它也可以做为主机地址使用。 A. True B. False 2、如图所示&#xff0c;如果管理员希望能够提升此网络的性能&#xff0c;则下面哪一种方法最合适&#xff1f; A. 使用交换机把每台主机连接起来&#xff0c…

java8 (jdk 1.8) 新特性——Stream ApI以及具体实例

在java8 中&#xff0c;有两个最重要的改变&#xff0c;一个就是之前了解的Lmbda java8 (jdk 1.8) 新特性——Lambda ,还有一个就是Stream Api 1. 什么是Stream API 简单来说就是一个类库&#xff0c;里边有一些方法方便我们对集合数据进行操作&#xff0c;就好像使用 SQL 语…

是单例模式,不是单身

✍&#x1f3fc;作者&#xff1a;周棋洛&#xff0c;计算机学生 ♉星座&#xff1a;金牛座 &#x1f3e0;主页&#xff1a;点击学习更多 &#x1f310;关键&#xff1a;JavaScript 单例 设计模式 单例模式的定义是&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个访问…

数据结构05:树与二叉树[C++][线索二叉树:先序、中序、后序]

图源&#xff1a;文心一言 考研笔记整理1.4W字&#xff0c;小白友好、代码先、中序可跑&#xff0c;后序代码有点问题仅作记录~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、写BUG、画导图、画配图~&#x1f9e9;&#x1f9e9; 参考用书&#xff1a;王道考研《2024…

领域事件解读

文章目录 EventBus简介DDD领域事件架构简析快速入门pom依赖bean配置PublisherSubscriber 设计原理PublisherSubscriber 事件总线(EventBus)&#xff0c;设计初衷是解耦系统模块&#xff0c;将系统中的各类业务操作抽象为事件模型&#xff0c;我们把产生事件的部分称之为事件的发…

电容笔哪个厂家的产品比较好?时下热门的平替苹果笔

苹果原装的Pencil&#xff0c;在市场上可是炙手可热的&#xff0c;而且苹果的这款pencil&#xff0c;也不是什么便宜的。当然&#xff0c;你可以用这个苹果笔搭配iPad&#xff0c;不过&#xff0c;如果你不想花很多钱&#xff0c;那就可以换一支普通的平替电容笔。就当前的技术…

一篇搞定C语言操作符(详解含示例)

目录 一.操作符是什么&#xff1f; 基本特征 语义 优先级 结合性 二.操作符的分类 三.操作符各类详解 1.算数操作符&#xff08; - * / %&#xff09; &#xff08;1&#xff09;优先级&#xff1a; &#xff08;2&#xff09;除法操作符&#xff08;…

数学基础-标量,向量,张量

前言 数学中&#xff0c;如何描述事务&#xff0c;以棍子为例子&#xff1a; 棍子的长度棍子方向棍子转向… 标量 单纯的形容事务的一个特征&#xff0c;如果体积&#xff0c;长度。 向量 指具有大小&#xff08;magnitude&#xff09;和方向的量。它可以形象化地表示为带…

利用腾讯云推流做7*24小时云直播

早在10年前&#xff0c;直播刚刚火的的时候&#xff0c;我就写过一个基于RTMP推流的直播工具&#xff0c;但没有利用起来&#xff0c;一直荒废了。想想真是可惜&#xff0c;不过谁怪咱精力有限切没有商业头脑呢。 最近刷B站&#xff0c;一位UP分享了无人值守的云直播方案&…

21JS12——内置对象

文章目录 一、内置对象二、查文档1、 MDN2、如何学习对象中的方法 三、Math对象1、Math对象2、案例-封装自己的数学对象3、Math的几个方法&#xff08;1&#xff09;绝对值&#xff08;2&#xff09;三个取整方法&#xff08;3&#xff09;随机数方法random&#xff08;&#x…

【深度学习】3-2 神经网络的学习- mini-batch学习

机器学习使用训练数据进行学习。使用训练数据进行学习&#xff0c;就是针对训练数据计算损失函数的值&#xff0c;也就是说,训练数据有100个的话&#xff0c;就要把这 100个损失函数的总和作为学习的指标。 求多个数据的损失函数&#xff0c;要求所有训练数据的损失函数的综合…

INTERSPEECH2023|达摩院语音实验室入选论文全况速览

近日&#xff0c;语音技术领域旗舰会议INTERSPEECH 2023公布了本届论文审稿结果&#xff0c;阿里巴巴达摩院语音实验室有17篇论文被大会收录。 01 论文题目&#xff1a;FunASR: A Fundamental End-to-End Speech Recognition Toolkit 论文作者&#xff1a;高志付&#xff0c;…