当前位置: 首页 > news >正文

基于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的博客系统

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

动态sql以及常用的标签

什么是动态sql&#xff1a; 指根据不同的条件生成不同的sql 搭建环境&#xff1a; 建表&#xff1a; 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. 引言 本文关键术语为&#xff1a; Decentralized Identity (DID&#xff0c;去中心化身份) or self-sovereign identity (SSI&#xff0c;自治身份) &#xff1a;是一个基于开放标准的框架&#xff0c;使用自主、独立的标识符和可验证证书&#xff0c;实现可信的数据交换。…...

基于SWAT-MODFLOW地表水与地下水耦合

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

2023拒绝内卷!两年转行网络安全真实看法!

我目前转行网络安全两年&#xff0c;没啥天分&#xff0c;全靠努力&#xff0c;基本能够得上中级的水平了。看到大家对转行网络安全挺感兴趣&#xff0c;也有挺多争议&#xff0c;想把我的建议和经验告诉大家。 有很多人觉得网络安全已经饱和了&#xff0c;现在选择这个工作&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 服务器会依次处理每一个请求&#xff0c;在完成第一个连接的处理之前不会处理第二个连接 // 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并发----进程、线程、并行、并发

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

【计算机网络】第 4 课 - 物理层

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

深入理解MVVM架构模式

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

配置IPv6 over IPv4手动隧道示例

组网需求 如图1所示&#xff0c;两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接&#xff0c;客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下&#xff1a; 配置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)是两种很有用的技术&#xff0c;可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化的概念、实现原理和应用场景&#xff0c;然后介绍反柯里化的概念、实现原理和应用场景&#xff0c;通过大量的代码示例帮助读…...

细讲TCP三次握手四次挥手(四)

常见面试题 为什么TCP连接的时候是3次&#xff1f;2次不可以吗&#xff1f; 因为需要考虑连接时丢包的问题&#xff0c;如果只握手2次&#xff0c;第二次握手时如果服务端发给客户端的确认报文段丢失&#xff0c;此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据…...

HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件

卡片相关的配置文件主要包含FormExtensionAbility的配置和卡片的配置两部分&#xff1a; 1.卡片需要在module.json5配置文件中的extensionAbilities标签下&#xff0c;配置FormExtensionAbility相关信息。FormExtensionAbility需要填写metadata元信息标签&#xff0c;其中键名称…...

mac安装nacos,M1芯片

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

老板说把跳针改过去,什么是主板跳针

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

PyTorch代码实战入门

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

TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍

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

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势

一、WebRTC与智能硬件整合趋势​ 随着物联网和实时通信需求的爆发式增长&#xff0c;WebRTC作为开源实时通信技术&#xff0c;为浏览器与移动应用提供免插件的音视频通信能力&#xff0c;在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能&#xff0c;对实时…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...

下一代设备健康管理解决方案:基于多源异构数据融合的智能运维架构

导语&#xff1a; 在工业4.0深度演进的关键节点&#xff0c;传统设备管理面临数据孤岛、误诊率高、运维滞后三大致命瓶颈。本文解析基于边缘智能与数字孪生的新一代解决方案架构&#xff0c;并实测验证中讯烛龙PHM-X系统如何通过多模态感知→智能诊断→自主决策闭环&#xff0c…...