基于java SpringBoot和HTML的博客系统
随着网络技术渗透到社会生活的各个方面,传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网,可以在本地或异地进行通信,大大提高了通信和交换的灵活性。在当今高速发展的互联网时代,博客已经成为人们不可或缺的一部分。互联网日志,翻译博客或博客的博客通常是个人管理的,不定期发表新文章的网站。博客的文章通常按照从新到旧的顺序排列,很多博客集中于提供对特定主题的意见或新闻,其他博客则用作个人日记。一般博客包括文本、图像、结合其他博客或网站的链接和与主题相关的其他媒体。让读者以互动方式留下评论的能力是许多博客的重要因素。大部分博客内容主要是文本。博客是社交媒体网络的一部分。
博客在中国的发展始于1998年,但直到2000年才真正流行起来。2000年博客进入中国,迅速发展起来,但平淡无奇。直到2004年木子美事件,中国人才理解和使用博客。2005年,不看好博客的新浪、搜狐等国内网站也加入博客阵营,开始进入博客的春秋战国时代。博客比电子邮件和讨论组更简单,因此成为家庭、部门、公司和团队越来越广泛使用的交流工具。
开发环境:
开发工具:IDEA、jdk1.8、SpringBoot
数据库:MySQL
所用技术:
前端:LayUI、JQuery、HTML5+CSS3、Ajax
后端:SpringBoot+Spring-Data-Jpa
安全控件:SpringSecurity
页面采用:Thymeleaf
项目管理:Maven
基本功能:
注册、登录、发博客、查看博客、博客审核(管理员)、个人资料设置、密码修改、权限修改(管理员)等。
部分代码展示:
public class BlogsController extends CommonController<Blogs, Integer, BlogsForm> {@Autowiredprivate BlogsSerive blogService;@Autowiredprivate SystemDataService dataService;@Autowiredprivate UserUtils userUtils;@Autowiredprivate CommentService commentService;@Overridepublic void manage(ModelMap map) {map.put("user", userUtils.getUser());super.manage(map);}@Overridepublic void edit(BlogsForm form, ModelMap map) throws InstantiationException, IllegalAccessException {map.put("sf", dataService.findByDictionariesCode("SJZD_BKFL"));map.put("type", dataService.findByDictionariesCode("SJZD_WZLX"));super.edit(form, map);}@Overridepublic Object save(BlogsForm form) {System.out.println(form.getText()+"=========");form.setUser(userUtils.getUser());SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {Blogs model = new Blogs();String name = userUtils.getName();Integer id = form.getId();if(id != null) {model = blogService.findById(id);model.setUpdateDate(sdf.format(new Date()));model.setUpdateName(name);}else {form.setCreateDate(sdf.format(new Date()));form.setCreateName(name);model.setUpdateDate(sdf.format(new Date()));model.setUpdateName(name);}BeanUtils.copyProperties(form, model,"id");blogService.save(model);Integer id2;if(form.getId() != null) {id2 = form.getId();}else {id2 = blogService.findByUserNicknameAndUpdateDate(name, model.getUpdateDate()).getId();}return new AjaxResult(id2+"");} catch (Exception e) {return new AjaxResult(false,"数据保存失败");}}/*** 访问页面* @param id* @param map*/@RequestMapping(value="/visit")public void visit(Integer id, ModelMap map) {map.put("blog", blogService.findById(id));map.put("comment", commentService.findByBlogId(id));}/*** 访问页面数据* @param id* @return*/@RequestMapping(value="/blogText")@ResponseBodypublic Object blogText(Integer id) {return blogService.findById(id).getText();}@RequestMapping(value="/audit")public void audit(ModelMap map) {}@RequestMapping(value="/indexBlog")public void indexBlog() {}/*** 同意* @param id* @return*/@RequestMapping(value="/consent")@ResponseBodypublic Object consent(Integer id) {try {Blogs blogs = blogService.findById(id);blogs.setBlogStatic("审核通过");blogService.save(blogs);return new AjaxResult("同意成功");} catch (Exception e) {return new AjaxResult(false,"同意失败");}}/*** 拒绝* @param id* @return*/@RequestMapping(value="/refuse")@ResponseBodypublic Object refuse(Integer id, String jy) {try {Blogs blogs = blogService.findById(id);blogs.setBlogStatic("已拒绝");blogs.setSuggest(jy);blogService.save(blogs);return new AjaxResult("拒绝成功");} catch (Exception e) {return new AjaxResult(false,"拒绝失败");}}@RequestMapping(value="/fysj")@ResponseBodypublic Object fysj(Integer page, BlogsForm form) {Sort sort=Sort.by(Sort.Direction.DESC, "updateDate");Pageable pageable = PageRequest.of(page-1, 10, sort);Page<Blogs> blog;Specification<Blogs> spec = buildSpec2(form);blog = blogService.findAll(spec, pageable);return FlowloadUtils.buildResult(blog);}@RequestMapping(value="/fysj2")@ResponseBodypublic Object fysj2(Integer page, BlogsForm form) {Sort sort=Sort.by(Sort.Direction.DESC, "updateDate");Pageable pageable = PageRequest.of(page-1, 10, sort);Page<Blogs> blog;Specification<Blogs> spec = buildSpec3(form);blog = blogService.findAll(spec, pageable);return FlowloadUtils.buildResult(blog);}private Specification<Blogs> buildSpec3(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();Predicate difficultylevel = cb.equal(root.get("blogStatic"), "审核通过");rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}private Specification<Blogs> buildSpec2(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();SysUser user = userUtils.getUser();Predicate difficultylevel = cb.equal(root.get("user").get("id"), user.getId());rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}@RequestMapping(value="/page2")@ResponseBodypublic HashMap<String, Object> page2(ModelMap map, DataGridParam param, BlogsForm form) {Sort sort=Sort.by("id");Pageable pabeable = param.getPageable(sort);Specification<Blogs> spec = buildSpec1(form);Page<Blogs> page = blogService.findAll(spec, pabeable);return DataGridUtils.buildResult(page);}private Specification<Blogs> buildSpec1(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();Predicate difficultylevel = cb.like(root.get("blogStatic"), "%待审核%");rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}/*** 评论*/@RequestMapping(value="/comment")@ResponseBodypublic Object comment(String comment, Integer id) {try {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Comment model = new Comment();model.setText(comment);model.setUser(userUtils.getUser());model.setBlog(blogService.findById(id));model.setRead2(false);model.setCreateDate(sdf.format(new Date()));commentService.save(model);return new AjaxResult("评论成功");} catch (Exception e) {return new AjaxResult(false,"评论失败");}}
}
基于java SpringBoot和HTML的博客系统
相关文章:

基于java SpringBoot和HTML的博客系统
随着网络技术渗透到社会生活的各个方面,传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网,可以在本地或异地进行通信,大大提高了通信和交换的灵活性。在当今高速发展的互联网时…...

动态sql以及常用的标签
什么是动态sql: 指根据不同的条件生成不同的sql 搭建环境: 建表: create table blog( id varchar(50) not null comment 博客id, title varchar(100) not null comment 博客标题, author varchar(30) not null comment 博客作者, create_ti…...

DID以及社交网络中的ZKP
1. 引言 本文关键术语为: Decentralized Identity (DID,去中心化身份) or self-sovereign identity (SSI,自治身份) :是一个基于开放标准的框架,使用自主、独立的标识符和可验证证书,实现可信的数据交换。…...

基于SWAT-MODFLOW地表水与地下水耦合
耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果,SWAT作为一个地表水模型可以较好的模拟主要的水文过程,包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等,但是对于地下水部分的模拟相对粗糙,考虑到SWAT…...

2023拒绝内卷!两年转行网络安全真实看法!
我目前转行网络安全两年,没啥天分,全靠努力,基本能够得上中级的水平了。看到大家对转行网络安全挺感兴趣,也有挺多争议,想把我的建议和经验告诉大家。 有很多人觉得网络安全已经饱和了,现在选择这个工作&a…...
【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析
【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析 一、QDI_Panel_Init() 显示屏初始化函数:Panel_DSI_MAX96789_0_Init()二、QDI_Panel_SetPower() 显示屏初始化:Panel_DSI_MAX96789_0_PowerLCD()三、QDI_Panel_GetInfo() …...

IDEA偶尔编译的时候不识别lombok
偶尔IDEA启动项目的时候会识别不到lombok,识别不到get()跟set()方法 方案 在settings添加下面代码 -Djps.track.ap.dependenciesfalse...
rust学习-构建服务器
单线程server 服务器会依次处理每一个请求,在完成第一个连接的处理之前不会处理第二个连接 // cat main.rs use std::io::prelude::*; use std::net::TcpListener; use std::net::TcpStream;fn main() {let listener TcpListener::bind("127.0.0.1:7878&quo…...

Java并发----进程、线程、并行、并发
一、进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行…...

【计算机网络】第 4 课 - 物理层
欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、物理层的基本概念 2、物理层协议的主要任务 3、物理层任务 4、总结 1、物理层的基本概念 在计算机网络中,用来…...

深入理解MVVM架构模式
MVVM原理 MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模…...

配置IPv6 over IPv4手动隧道示例
组网需求 如图1所示,两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接,客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下: 配置IPv4网络。配置接…...

Vue3--->组合式API与Pinia
目录 使用create-vue搭建 1、使用create-vue创建项目 2、项目目录和关键文件 组合式API 1、组合式API - setup选项 2、组合式API - reactive和ref函数 3、组合式API - computed 4、组合式API - watch 1、基础使用 - 侦听单个数据 2、基础使用 - 侦听多个数据 3、immediate&…...

三言两语说透柯里化和反柯里化
JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化的概念、实现原理和应用场景,然后介绍反柯里化的概念、实现原理和应用场景,通过大量的代码示例帮助读…...
细讲TCP三次握手四次挥手(四)
常见面试题 为什么TCP连接的时候是3次?2次不可以吗? 因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据…...

HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件
卡片相关的配置文件主要包含FormExtensionAbility的配置和卡片的配置两部分: 1.卡片需要在module.json5配置文件中的extensionAbilities标签下,配置FormExtensionAbility相关信息。FormExtensionAbility需要填写metadata元信息标签,其中键名称…...

mac安装nacos,M1芯片
第一步,官网下载 》nacos官网 去github中下载对应的版本,本人下载的是1.4.1版本 在这儿选择其他的版本,下面这里选择 tar.gz 压缩包 解压后放到一个非中文的目录下,我选择在 user目录下面创建一个other目录,将使用的环…...

老板说把跳针改过去,什么是主板跳针
最近骑车拍了很多视频,把电脑磁盘堆满了,想着买一条固态SSD卡扩展一下。 一咬牙一跺脚,直接安排,毫不犹豫。顺带加装了无限网卡和蓝牙5.2。 收到后立马安装。安装完发现识别不到新磁盘 确认安装没问题。然后就去问固态硬盘的客服 …...

PyTorch代码实战入门
人这辈子千万不要马虎两件事 一是找对爱人、二是选对事业 因为太阳升起时要投身事业 太阳落山时要与爱人相拥 一、准备数据集 蚂蚁蜜蜂数据集 蚂蚁蜜蜂的图片,文件名就是数据的label 二、使用Dataset加载数据 打开pycharm,选择Anaconda创建的pytorch环…...

TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍
众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。今天我们来说一说,EasyCVR平台支持分…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...