一、掌握前后端项目依赖与配置
1.
分别写出后端项目
WebBackend
和
WebBackend2
的
pom
依赖(只要求写
artifactId
名称,并分别顺
序编号)。
答:
2.
分别截图项目
WebBackend
和
WebBackend2
的
配置文
件代码。
答:
WebBackend
配置文件如下:
WebBackend2
配置文件如下:
3.
比较项目
WebBackend
和
WebBackend2
的
启动文件
代码的异同点。
答:
WebBackend
和
WebBackend2
的启动文件代码对比如下:
相同点:
(
1
)都使用了
@SpringBootApplication
注解,表明它们是
Springboot
的
主启动类。
(
2
)都
重写了接口的
addCorsMappings()
方法,
允许跨域请求
(
3
)都
重写了接口的
addInterceptors
()
方法,
配置拦截器。
不同点:
(
1
)启动类
WebBackendApplication
实现了
WebMvcConfigurer
接口。
(
2
)启动类
WebBackend2Application
未实现接口
,
但对返回值类型为
WebMvcConfigurer
的方
法
setWebMvcConfiguration()
使用
@Bean
注解。
4.
分别截图前端项目
webfront
生产依赖和项目构建主文件
main.js
的代码。
答:
webfront
生产依赖代码如下:
项目构建主文件
main.js
代码如下:
5.
为什么三个项目可以同时运行?前端项目如何切换使用不同的后端项目?
答:
(
1
)因为每个项目的运行端口不同,可以同时运行,并不冲突。
(
2
)在
main.js
中,可以切换不同后端项目,通过切换
axios
的基地址,如下所示:
二、
分析后端项目 WebBackend,掌握后端项目的开发技术
1. Token
信息由哪三个部分组成?项目在哪个控制器的哪个方法里生成
JWT Token
信息?
答:
1.1 Token
信息由以下三部分组成:
(
1
)头部:
Header
(定义类型和加密算法)
(
2
)数据:
Payload
(存放有效信息)
(
3
)签名:
Signature
(验证令牌的完整性)
1.2
项目在
AdminController
控制器的
adminLogin
方法里生成
JWT Token
信息:
2.
截图使用
Postwoman
测试生成
Token
信息?截图在
官网
https://jwt.io
解码和校验
Token
的结果。
答:
(
1
)
使用
Postwoman
测试生成
Token
信息如下:
(
2
)
在
https://jwt.io
官网中
首次输入
Token
信息
,效果如下:
再次输入我们的
秘钥(加密盐)
:
code-duck-*%#@*!&
,效果如下:
3.
截图学院控制器
CollegeController
方法
updateCollege()
的代码,为什么方法参数未使用实体类类
型?
答:
在
updateCollege
方法中,参数使用了
Map<String, String>
对象而不是实体类
College
,这是因
为该方法需要处理三个键值对(
"newName"
、
"oldName"
、
"xuhao"
),而实体类
College
只有两个字段
(
"name"
和
"xuhao"
)。通过
Map<String, String>
对象,我们可以灵活的传递和处理不同的键值对。
4.
分别截图类
MajorDto
和专业控制器
MajorController
方法
updateMajor()
的代码,并指出
DTO
对象
与实体类对象的区别与联系。
答:
DTO
对象与实体类对象的区别与联系:
DTO
对象
用于
数据传输和格式转换
,可以
定义一组特定的字段
,用于满足特定业务场景或前端页面
的数据需求,
减少数据传输量
,
不会持久化
。
实体类对象
用于
与数据表进行映射,
主要关注
数据的持久化和业务逻辑
。
三、
分析后端项目 WebBackend 与 WebBackend2 的异同点
1.
假定使用
Spring Boot+Sping Data JPA
的后端项目
WebBackend
已经完成,如何改写成
Spring
Boot+MyBatis Plus
?给出主要步骤。
答:
首先,修改
pom.xml
文件,换成
MyBatisPlus
依赖:
mybatis-plus-boot-starter
。
然后修改项目配
置文件
,添加
MyBatisPlus
配置:
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
#指定 XML 映射文件路径,可去。
type-aliases-package: com.example.webbackend.dao.entity
#指定实体类包名
configuration:
map-underscore-to-camel-case: false
#关闭驼峰转换
然后,修改
dao
层,将
jpa
目录
修改为
mapper
目录
:其中每个接口都继承
BaseMapper<
T
>
接口。这样,我们就可以使用默认的接口方法。
如果需要编写自定义方法实现,则需要去
resources/mapper
目录下创建对应的
xml
映射接口
文件。最后,我们去服务层实现类中进行修改,将
dao
层对象的注入从
Repository
接口改为
mapper
接口。再将一些方法调用的名字需要修改为
Mapper
的方法即可。
服务层接口和控制层不用修改
。
2.
项目
WebBackend
的
DAO
层接口继承什么接口?该泛型接口包含哪两个参数类型?
增删改操作
方法
的注解与
Select
查询方法
的注解有何差别?
答:
项目
WebBackend
的
DAO
层接口继承了
JpaRepository<T, ID>
,该泛型接口包含了两个参数
类型,分别是实体类
T
以及实体类的主键类型
ID
。
Select
查询
的注解只有
@Query
,而
增删改操作方法
的
注解除了
@Query
之外,还必须添加
@Modifying
和
@Transcational
注解。
3.
项目
WebBackend2
的
DAO
层继承什么接口?该泛型接口的参数类型是什么?哪个映射接口使用
了自定义方法?对应的
XML
映射文件一般要放在什么位置?
答:
项目
WebBackend2
的
DAO
层继承
BaseMapper<
T
>
接口,该泛型接口的参数类型是实体类类
型。
AdminMapper
映射接口使用了自定义的方法,对应的
xml
映射文件
AdminMapper.xml
一般放
在
resources/mapper
目录。
4.
两个后端项目是如何设置允许跨域请求的?分别截图相关代码。
答:
项目
WebBackend
:
项目
WebBackend2
四、
分析前端项目 webfront,掌握前端项目的开发技术
1.
截图
App.vue
组件的方法
adminLogin()
代码,并加框标记建立
sessionStorage
存储的代码。执行
登录操作后,按
F12
打开浏览器调试窗口的
Application
选项,截图会话存储的信息。
答:
2.
截图
ManageCollege.vue
组件的方法
updateCollege()
代码,并加框标记使用请求头携带
Token
的
代码。
答:
3.
能否在不登录的情况下,使用
Postwoman
测试出来的
Token
信息作为浏览器会话存储信息,实现
对管理功能的使用?并简要说明其理由。
答:
可以。
请求管理功能的控制器方法会被拦截并进行身份认证,当携带有效的
Token
信息以后,
就可以被放行。因此,手工将
Token
信息写入到浏览器会话存储信息中,就可以实现在不登录的情况下对
管理功能的使用。
我们来实践一下。
首先用
Postwoman
测试用户登录,此时我们就拿到了一个
Token
信息:
下面,我们
将得到的
Token
信息写入到浏览器会话信息中,就可以实现对管理功能的使用:
【小结】
1. 试比较
前后端分离项目
与不分离项目的异同点。
答:
相同点。
(1)程序采用分层架构。无论是前后端分离项目还是非分离项目,它们都遵循通用的分层架构,如
DAO 层、Service 层和 Controller 层,以实现代码的组织和职责分离。
(2)用户认证。前后端分离项目和非分离项目都需要实现用户认证功能,确保用户身份的安全性和
权限控制。
(3)业务处理与数据展示。无论是前后端分离项目还是非分离项目,它们都需要进行业务逻辑处理
和数据展示,以满足用户的需求。
不同点。
(
1)开发和部署方式不同。在前后端分离项目里,
前端和后端独立开发和部署
,前端以 JSON 格式
与后端 API 进行交互,后端项目不是 MVC 架构(不包含视图)。非前后端分离项目一般采用
MVC 架构,
控制器将结果数据以
请求转发
的方式交给视图展示。
(2)方法及参数注解不同。在前后端分离项目里,后端控制器方法使用
@ResponseBody
注解,方
法参数使用
@RequestBody
注解。在非前后端分离项目中,通常情况下,方法不使用
@ResponseBody
注解,方法参数不使用
@RequestBody
注解。
(3)用户认证方式不同。
前后端非分离项目可以使用简单的基于 Cookie 的 Session 认证,而前后
端分离项目使用会话存储的 JWT Token 等验证方式。
(4)跨域访问问题。前后端分离项目必须配置允许跨域访问,非分离项目则不存在跨域访问问题。
2. 后端项目的服务层里,能否不写接口?为什么建议要写接口?
答:
可以不写接口,但建议写接口。
因为使用接口可以实现松耦合,即便后续需要更改或
替换实现,只需确保新的实现符合接口定义即可,而不会影响调用方的代码。
将接口定义与具体
实现分离开,利于扩展,轻松更改实现类,提高代码的可维护性。
3. 后端你个人偏向于使用 Spring Boot+Spring Data JPA?还是 Spring Boot+MyBatis Plus?为
什么?
答:
我更偏向使用 Spring Boot+MyBatis Plus,提供了大多数基础 CRUD 功能的方法,复杂功能
使用 XML 映射文件即可实现,对数据库层面的优化和定制更为灵活。
4. 如何运行打包后的后端项目
答:
打包后的后端项目一般是 jar 文件,只需在命令行中输入 java 命令即可:
java -jar project-name.jar
5. 在前后端分离项目里,Nginx 服务器有什么作用?
答:
在前后端分离的项目里,Nginx 服务器充当
静态服务器
,
提供访问静态页服务
,将 Vue 项目的
构建输出目录作为根目录进行访问。当客户端请求该 Nginx 服务器时,Nginx 将直接提供静态文件,并未
代理到其他目标服务器(即未使用反向代理功能)。