一、项目介绍
1.1 项目简介
本项目主题是“地区租房项目数据展示”,项目基于 SpringBoot 框架,主要使用了 MySQL、MongoDB 作为后台数据库,使用了 JSP、CSS、JS、JQuery等前端组件,使用了 SpringMVC视图解析器、Ajax 等前后端交互开发技术。
1.2项目目的
(1)熟练运用 NoSQL 数据库操作;
(2)熟悉 Spring 框架的 MVC 三层架构;
(3)使用 SpringBoot 简化 Spring 项目开发;
(4)熟悉前后端交互方式,熟悉交互数据类型等;
1.3运行环境
1.3.1硬件环境
(1)Windows 10 操作系统
(2)四核 i5 处理器
1.3.2软件环境
(1)Idea 编译器
(2)Chrome 浏览器(测试前端页面)
(3)Tomcat v9.0.33
(4)SpringBoot 2.7.7
1.4项目组件
1.5项目设计
1.5.1数据库设计
User表(MySQL):
User 表用于存储用户登录信息,包含 4 个字段,分别为: ①user_id (int,主键)、②identity ( varchar )、③username ( varchar)、④password ( varchar )。
RentInfo表(MongoDB):
RentInfo表用于存储租房房源信息,包含 9个字段,分别为:①_id(Integer)、②address(String)、③area(String)、④floor(Integer)、⑤position(String)、⑥price(Double)、⑦roomType(String)、⑧square(Double)、⑨title(String)、⑩location(map)。
其中第⑩个字段是内嵌文档,存储了地址的经纬度信息,包含 3 个字段,分别为:①count(Integer)、②lng(Double)、③lat(Double)
1.5.2 Web项目设计
项目基于 SpringBoot,因此采用常见的 MVC 三层架构,M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是将 M 和V 的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View 的定义比较清晰,就是用户界面。
业务设计过程遵循 Controller 层调用 Service 层、Service 层调用 Dao 层的原则。
二、 项目构成
2.1数据爬取
2.1.1简述
为了模拟真实项目场景,项目所需数据将使用 Jsoup 组件对特定网站页面进行数据爬取。爬取过程使用 Gson 作为 Json 解析器,便于数据之间的格式转化。数据爬取操作将在 Idea 编译器上进行。
Jsoup
Jsoup是一款Java的HTML解器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Gson
Google Gson是一个简单的基于Java的库,用于将Java对象序列化为JSON,反之亦然。它是由Google开发的开源库。以下列出了Gson的一些最突出的功能:
(1)易于使用 - Gson API 提供了一个高级外观,以简化常用的用例;
(2)无需创建映射 - Gson API 为大多数要序列化的对象提供默认映射;
(3)性能 - Gson 速度非常快,内存占用少。 它适用于大型对象图或系统;
(4)清洁JSON- Gson创建一个干净,紧凑的JSON结果,易于阅读;
(5)无依赖关系 - 除了 JDK 之外,Gson 库不需要任何其他库;
(6)开源 - Gson库是开源的;它是免费提供的。
2.1.2使用Jsoup多线程爬取网站数据
(1)新建工具类 HmlParseUtil,通过网站 url 地址获取 HTML 的 dom 元素;
(2)利用正则表达式和java.lang.String 类处理 dom 元素解析出各个字段;
(3)利用 Jsoup 获取百度地图 API 的地址解析请求,以获取地址所在的经纬度;
(4)建立线程池,多线程爬取数据并写入本地的 json 格式文件;
新建工具类JsonFormatTool,对生成的json文件进行格式化,每一条数据进行换行:
新建工具类CreateJsonFile,在E:\NoSQL中生成Info.json文件:
(5)爬取约 2976 条数据,耗时约10s。相比于单线程耗时10min,效率有了极大的提升。
2.1.3爬虫数据存入MongoDB
(1)新建 RentInfo1 实体类,使用 Gson 解析 json 数据,转化为 List类型;
(2)开启MongoDB服务器:
(3)连接MongoDB服务器:
(4)将List转化为Document对象,插入MongoDB集合内:
(5)查询数据库,确保数据均已插入:
2.2前端页面
主要含有login.html(登录),register.html(注册),index.html(首页):
为基础页面 login.html(登录)、register.html(注册)、添加 Control 层访问请求。
2.3后台
2.3.1 项目基本架构
2.3.2 整合 MyBatis
MyBatis是一款优秀的持久层框架,它支持定制化 SOL、存储过程以及高级映射。MyBatis避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java的 POJOs (Plain Ordinary Java Obiect,普通的 Java 对象)映射成数据库中的记录。
(1)在pom.xml文件导入如下依赖包:
(2)applications.properties 配置文件内配置 mybatis 相关属性:
(3)Springboot 启动类上添加扫描注解:
2.3.3 整合jdbc+mysql 数据源
pom.xml 文件下导入 mysql相关依赖包:
2.3.4 整合 mongoDB 数据源
(1)启动mongodb服务;
(2)使用idea插件测试连接mongodb:
(3)在SpringBoot项目中导入mongodb依赖包:
(4)在application.yml配置文件中配置mongodb服务器:
(5)测试连接。新建实体类RentInfo,属性与mongodb中的RentInfo集合名相同,并添加集合注解:
(6)填写测试类,装配mongoTemplate对象,查询RentInfo集合:
(7)测试结果:
2.4模板引擎
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成。与其它模板引擎相比,Thymeleaf 最大的特点是,即使不启动 Web 应用,也可以直接在浏览器中打开并正确显示模板页面。
(1)在pom.xml文件中导入Thymeleaf相关依赖包:
(2)在application.yml配置文件中配置Thymeleaf相关属性,包括视图解析路径,是否开启缓存等:
2.5 用户登录安全认证
2.5.1 数据库准备
(1)创建User表,用户身份有两种:管理员(admin)和普通用户(user):
(2)插入数据便于测试:
(3)创建实体类,属性名与数据库User表相对应:
2.5.2 整合 shiro安全认证框架
(1)导入shiro依赖包:
(2)新建UserRealm实体类,继承AuthorizingRealm类:
(3)新建ShiroConfig配置类,添加@Configuration配置注解,使用@Bean注解将固定的3个方法注入spring容器内:
2.6 其他技术支持
2.6.1 Aiax 异步请求技术
Aiax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Aiax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
本项目中,Ajax技术使用JQuery完成,其基本语法如下:
2.6.2 Echarts图表
为了在本项目中使用Echarts图表,需在前端页面导入相关js包:
三、 项目功能介绍
3.1 用户登陆和注册 MVC 基础服务架构
使用该安全认证后,Shiro框架自动认证MySQL中的用户名和密码,同时根据数据库中的identity字段赋予不同的角色,不同的角色能够显示的内容是不同的。
管理员操作界面:
普通用户操作界面:
用户注册操作界面:
查看数据库,用户注册成功,成功跳转至登录页面进行登录:
3.1.1 dao 层
3.1.2 service 层
3.1.3 Control 层
3.1.4 shiro 安全认证
3.1.5 浏览器查看 session
3.2 Aiax 请求分页查询数据
3.2.1 前端代码实现
3.2.2 后台代码实现
3.3 搜索框功能实现
3.3.1 前端代码实现
3.3.2 后台代码实现
3.4 Echarts 数据可视化
3.4.1 前端代码实现
3.4.2 后台代码实现
由于一开始交作业,只截了一些图片来编写文档,然后发现有的图片上传了之后还是挺模糊的🙁,所以第三部分就先不上传了,因为图片太多了🤧