从0开始,用实例详细讲解SSM项目(大学生福音)


前言

在这里插入图片描述

最近看到很多大学生又开始买项目,买讲解了,我就知道期末答辩来了。以前写了一篇《从零开始,手把手教你搭建Spring Boot后台工程并说明》,评论区老哥说我写的不是很详细,正巧这段时间,有同学找我,让我帮他讲解下他的一个SSM项目,我就顺便写一篇博客,尽我所能把东西讲得细一点。如果你还有什么疑问,欢迎在评论区留言,咱们的目的是让大家都能掌握这个知识与技能。`


一、必须了解的常识

1. 什么是前端与后端

  1. 前端
    简单的说,你在浏览器上看到花花绿绿的那些东西都属于前端的,它包括页面布局图形多媒体等内容。也就是页站的可视化部分。常见的文件后缀为.html .css .js
  2. 后端
    是指用户在浏览器或应用程序中看不到的部分,主要负责数据库管理、数据处理等。前端会向后台发送请求,后台需要执行对应的逻辑并返回结果,文件后缀为 .java

在这里插入图片描述

简而言之,前端关注网站或应用程序的外观和用户体验,后端关注处理和管理数据的技术。只有前端和后端合作才能构建出完整的网站或应用程序。

2. 项目运行的环境

一般同学们拿到手的应该是个压缩包,或者类似的项目文件,而想要并成功跑通项目,一般情况下,你至少还需要下载至少这么几个东西

  • JDK 你下的是java语言的项目,这是java的地基,没这个东西你根本跑不起来
  • IDEA 查看文件和工程的软件,就跟打开压缩文件需要解压软件一样,没这个你打开java文件看到的是乱码
  • maven 项目管理软件,简单来说,你不可能所有功能都是自己写的,肯定会依赖一些别人写的底层框架,这软件就能自动帮你下载。如果没这个,你打开项目可能是一片红色的报错。而且你到手的是一堆目录及文件,需要它帮你打包成一个可执行文件。
  • mySQL 数据库,就是存储数据的软件,你的项目启动后会往里面存数据,比如商品信息,学生信息啥的。一般数据库都选msyql,因为它免费。没有它,你运行时项目会报错
  • tomcat 运行容器,如果说maven打包是把一堆零散的菜处理好打包成一盒,但它也需要在锅里才能加热,不可能直接把盒子放火上烤,这个锅就是容器,一般来说是tomcat,因为它免费。所以没有它,你的项目跑不起来(SpringBoot项目不需要额外下载,因为你的预制菜里自带一口锅,直接起火就行)

至于上面几个东西咋下载安装,可以看我这篇《从零开始,手把手教你搭建Spring Boot后台工程并说明》,虽然那是SpringBoot项目而且我没写前端…

二、SSM介绍?

1. SSM指的是什么

SSM 框架是指 Spring + SpringMVC + MyBatis 三个开源框架的组合,也就是如果你的项目用了这三个框架,就算作SSM项目。

三个框架都是后端框架,它们的作用其实说白了都是一个目的 —— 为了让你少写点代码。,下面我们就简单讲下三个框架各自的作用

  • Spring框架: 提供了依赖注入控制反转的功能,简化了对象之间的依赖关系管理,提供了大量的开箱即用的功能和工具。是现如今几乎所有java项目都会用的框架,也是很多其他框架的地基
  • SpringMVC框架:基于模型-视图-控制器(MVC)的设计模式,用于处理Web应用程序的请求和响应,简化开发者处理请求的逻辑
  • MyBatis框架:数据库与java应用的中间层,可以更方便地进行数据库操作,避免了编写繁琐的JDBC代码

在这里插入图片描述

针对Spring 或者 myBatis ,如果你要想了解得更多,可以去看我的专栏 《Spring全家桶专栏》《MyBatis专栏》 ,里面有使用及原理的说明,这里我们就不展开了

2. SSM 与 SpringBoot

两者其实并不冲突, SpringBoot 是基于 Spring的,所以,你完全可以使用 SpringBoot + SpringMVC + MyBatis 来开发项目。关于Spring 为什么进化成了 springBoot,可以去看《Spring框架与SpringBoot的关联与区别》,简单的说就是与时俱进,原先的傻瓜包越来越繁琐,必须再提炼和浓缩,重新搞个傻瓜包出来。

那么如何区分是否使用了SpringBoot呢,其实对于初学者来说,可以看项目根目录下是否有一个启动类,如下图

在这里插入图片描述

通过这个启动类,它能够自动启动一个Tomcat,然后把我们的项目放在Tomcat里执行。这也就是上面我说 SpringBoot 为什么不需要下载tomcat的原因,因为它自己就内置了。

三、项目讲解

一般拿到的项目大概的目录如下

project-name
├── src
│   ├── main
│   │   ├── java
│   │   │   ├── com
│   │   │   │   └── example
│   │   │   │       └── controller
│   │   │   │           └── MyController.java
│   │   │   └── resources
│   │   │       └── application.properties
│   │   └── webapp
│   │       ├── WEB-INF
│   │       │   └── web.xml
│   │       └── index.jsp
│   └── test
│       ├── java
│       └── resources
├── target
├── pom.xml
└── README.md

接下来我们以一个实际的SSM工程来讲解

1.工程目录介绍

① 根目录

最外层是srcpom 文件,可以说所有工程包含的东西都需要放在里面,pom文件则是工程构造的总结与定义

在这里插入图片描述

② src目录

src目录是我们的资源目录,其下一般就只有一个main 和 test 来存放内容,main目录放我们正常运行需要的内容,test目录则用来存放测试的相关内容(可以没有),如下:

在这里插入图片描述

针对SSM项目,src下一般可分为三个目录

  • java:后台java源代码的存放地
  • resources:资源文件的存放地,例如配置文件、脚本文件等
  • webapp:Web应用程序的根目录,包含了Web项目的静态资源文件、视图模板文件等。一些前后端分离的项目可能没有此目录

2. 代码层级讲解

一般来说,请求的流转会经历如下几个层级

在这里插入图片描述

那么对应的,源代码会按这些层级,划分成好几个包。Controller - Service - Dao。需要注意的是,代码分层不是强制的,而是一种项目的规范,大家都约定俗成有这么几个层级

在这里插入图片描述

① Controller 层

Controller层是接收请求的第一站,一般不处理业务,最多进行参数的判断 ,它的独特性主要在于注解

在这里插入图片描述

② Dao 层

Dao层面向数据库,只处理对数据库增删改查 ,Dao层分为两个部分,一部分为接口,一部分为写了SQL的xml文件(放在resource目录下)。需要注意的是,本项目Dao层接口上没有写@Mapper注解,是因为配置文件中已经配置了 mapper扫描位置

在这里插入图片描述

③ Service 层

Service层负责真正的业务处理,所以在复杂项目中,往往Service非常臃肿,此时还需要把Service再做细分

在这里插入图片描述

④ 其他

而除了规范中的三层,一个项目可能还有其他包,比如

entity包 :你数据库的数据需要转成java的对象才能处理,这些对象的定义就放在这里。
config包:项目运行时的一些配置类
util包:你自己写的一些辅助工具类放这里,比如你想自己写两个Double相乘的方法,写完扔这里

3. 配置文件讲解

在项目中,基本每一个框架的引入都需要配置,所以配置文件的内容并不是固定的。而且很多配置可以写在类里(配置类),所以如果你发现你的配置文件和别人不太一样,不用惊慌。

在这里插入图片描述

比如这位同学的配置文件就比较奇怪,有一个application.properties文件,这个文件一般是作为springBoot项目的默认配置文件被SpringBoot默认加载的。但是这里因为是SSM项目,这个配置文件无法被识别,所以不会被主动加载。他这里先在web.xml里引入了spring.xml

在这里插入图片描述

又在 spring.xml里做了 import resource=“classpath:spring-mybatis.xml”
又在 spring-mybatis.xml 里做了 context:property-placeholder location=“classpath:application.properties”

在这里插入图片描述
在这里插入图片描述
通过这样的操作,最终才把三个配置文件都识别进去

① 数据源配置

连接数据库肯定需要配置上数据库地址,用户,密码啥的
在这里插入图片描述

上面有一些值采用了 ${XXX} 的形式,这是一种常见的变量引用,这些变量的具体值维护在了application.properties里,一般在配置很多的时候这么用,会比较清爽

在这里插入图片描述

② MyBatis配置

引入了MyBatis,那么自然也需要一些配置,主要是指定Dao层以及xml文件的位置,并指定数据源,以方便MyBatis的数据库做操作

在这里插入图片描述

③ Spring-MVC配置

这里的配置写在了两个文件中,一个是web.xml中,另一部分在spring.xml中。这些配置都是基础的,比如DispatcherServlet是前置控制器,拦截匹配的请求,然后依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

在这里插入图片描述

在这里插入图片描述

4. 运行原理讲解

① 文字概括

我们以一个总体的视角来分析,当页面发送一个请求后,到浏览器接收到返回数据的全流程是怎么样的?大概是下面这些流程

  1. 前端发送请求:前端页面通过浏览器向服务器发送一个HTTP请求,可以是GET请求或者POST请求。请求的URL通常是服务器上的接口地址,携带了请求参数。

  2. DispatcherServlet接收请求:请求到达服务器后,由前端控制器DispatcherServlet接收。DispatcherServlet是Spring MVC框架的核心控制器,它是一个Servlet,负责将请求分发给相应的控制器进行处理。

  3. HandlerMapping进行URL映射:DispatcherServlet会通过HandlerMapping来进行URL映射,找到对应的控制器(Controller)。

  4. 控制器处理请求:控制器是一个Java类,它包含了处理请求的业务逻辑。控制器会根据请求中的参数进行相应的处理,可能会调用Service层的方法。

  5. Service层处理业务逻辑:Service层是业务逻辑的处理层,用于组织和处理业务逻辑。控制器会调用相应的Service层方法来处理请求,并进行一些数据处理或者业务逻辑判断。

  6. 调用持久层进行数据操作:Service层可能会调用持久层(DAO层)来进行数据的增删改查操作,通过MyBatis等持久层框架与数据库进行交互。

  7. 返回数据给控制器:持久层将处理结果返回给Service层,Service层再将结果返回给控制器。

  8. 控制器返回视图(View):控制器将处理结果封装成一个Model对象,然后将Model对象传递给视图解析器(ViewResolver)。视图解析器根据配置将Model对象渲染成最终的视图(HTML、JSP等)。

  9. 返回响应给前端:视图解析器将渲染好的视图返回给DispatcherServlet,DispatcherServlet再将响应返回给前端浏览器。

  10. 前端浏览器渲染页面:前端浏览器接收到响应后,根据返回的HTML、CSS等文件进行页面的渲染,最终用户可以看到页面上显示的内容。

② 结合代码

比如我们在这个项目中做一个简单的登录操作,它的页面表单其实对应这login.jsp中的一段代码

在这里插入图片描述
在这里插入图片描述

当我们点下按钮“登录”后,在控制台可以看到一条HHTP请求的来回信息,返回的内容为json格式的,然后页面上弹出了个框,显示“登陆成功”
在这里插入图片描述

在这里插入图片描述

当这个请求发送到后台时,其路径其实就剩下了个 “/login”,因为是“/” 开头,所以命中了我们配置的分发器

在这里插入图片描述

既然是分发器,那他分发给谁呢?其实当我们项目启动时,我们写在Controller 及其 方法上的注解,就会把路径以及对应的方法绑定起来,那么此刻路径是 “/login” 就会进入 LoginController 的 verify 方法中

在这里插入图片描述

进入方法后,我们当然要把前台传进来的用户名-密码与数据库进行比对,一致才能返回成功

在这里插入图片描述
我们返回的是一个ApiResponse对象,在SpringMVC下被转换成json返回,此时前台jsp中是这么写的

在这里插入图片描述
所以我们页面会弹出一个框,写着“登陆成功”,而当我们确认这条消息后,页面又会接着转向一个新的url。如下图

在这里插入图片描述

因为这个url没有命中任何的Controller, 所以会在我们静态资源里找相同名字的,当然,他最终能找到这个main.jsp

在这里插入图片描述

而当mian.js返回后,在浏览器的渲染及数据读取下,我们就看到了后台管理主页的样子

在这里插入图片描述
在这里插入图片描述

四、答辩环节

这一段仅针对需要拿项目上去答辩的同学,知道很多大学生拿到项目不知道如何答辩,其实不用慌,按照下面的步骤走就可以:

1. 答辩准备

  • 确保项目功能完整、稳定运行,并进行充分测试。
  • 了解答辩评分标准和要求,准备相关文档和PPT材料。
  • 清晰理解项目的设计思路、技术实现和使用的框架。

2. 答辩演示

  • 对项目进行演示,展示项目的主要功能和特点,让评委和观众能够直观了解项目。
  • 演示时可以使用实际的运行环境,或者使用截图、录屏等方式展示。
  • 应重点突出项目的亮点和创新之处。

3. 技术分享

  • 介绍项目中使用的技术和框架,包括前端、后端以及数据库等。
  • 分享项目开发过程中遇到的困难、解决方案和经验教训。
  • 说明项目的技术架构、设计模式和性能优化等关键点。

4. 问题回答

  • 针对评委和观众提出的问题,认真分析并给出合理的回答。
  • 可能的问题包括项目设计思路、技术选型、功能实现、性能优化等方面。

5. 项目亮点(以本项目为例)

以我们本期的项目为例,虽然项目比较简陋,但仍有几点值得一说的地方

(1)功能实现比较完整

有用户 和 管理员权限的区分,商品-订单-后台管理功能基本实现,也支持媒体文件(图片)的上传下载

在这里插入图片描述

(2)MVC的全局异常捕获

@ExceptionHandler 注解可以标注在Controller 上,这里单独写了一个Controller,然后让其他所有Controller 继承该 BaseController,这样所有的 Controller 都能使用这个异常处理方式了

在这里插入图片描述

(3)登录密码的加密

数据库不保存真实密码,而是采用md5加密后保存的,这样即使数据库信息被盗,也无法拿到用户的密码。

在这里插入图片描述

在这里插入图片描述

(4)编码格式处理

这也是新手几乎都会踩的坑了,如果不在配置中进行编码格式的指定,容易产生乱码的现象,所以在这里做一个编码格式的配置是十分必要的
在这里插入图片描述

  • 63
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 72
    评论
评论 72
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战斧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值