基于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平台支持分…...
如何高效实现金融核心系统客户证件影像预览?kkFileView完整解决方案
如何高效实现金融核心系统客户证件影像预览?kkFileView完整解决方案 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView 在金融行业日常运营中…...
Ostrakon-VL像素终端实战:用实时摄像头完成便利店突击巡检
Ostrakon-VL像素终端实战:用实时摄像头完成便利店突击巡检 1. 像素特工终端介绍 想象一下,你是一名便利店巡检员,每天需要检查几十家门店的商品陈列、价签准确性和店面整洁度。传统方法需要手动拍照记录、填写表格,既耗时又容易…...
AgentCPM-Report部署教程:Pixel Epic在Ubuntu/CentOS下的环境配置
AgentCPM-Report部署教程:Pixel Epic在Ubuntu/CentOS下的环境配置 1. 项目介绍 Pixel Epic是一款基于AgentCPM-Report大模型构建的研究报告辅助终端,它将枯燥的科研工作转化为一场像素风格的RPG冒险体验。与传统AI工具不同,Pixel Epic采用了…...
OpenClaw跨平台同步:Qwen3.5-9B维护多设备代码仓库
OpenClaw跨平台同步:Qwen3.5-9B维护多设备代码仓库 1. 多设备开发的痛点与解决方案 作为一名自由职业开发者,我经常需要在不同设备间切换工作——家里的台式机、咖啡馆的笔记本、客户现场的平板。最让我头疼的是代码版本管理:在A设备修改的…...
【绝密架构图首次公开】:某头部券商万兆网卡直通+DPDK+自研内存池三级联动拓扑(支持128GB/s持续吞吐,QPS超2400万)
第一章:金融高频交易 C 内存池优化方法在纳秒级响应要求的金融高频交易系统中,动态内存分配(new/delete)引发的堆碎片、锁竞争与缓存不友好性,常导致不可预测的延迟尖峰。为消除 malloc 的内核态切换开销与全局堆锁争用…...
SEO_ 详解SEO优化中内容与外部链接的建设策略
SEO优化中内容与外部链接的建设策略 在当前互联网营销领域,SEO优化(搜索引擎优化)是提升网站流量和品牌知名度的关键手段。其中,内容与外部链接的建设策略是两大核心要素。本文将详解SEO优化中内容与外部链接的建设策略ÿ…...
Windows 11上保姆级教程:用Ollama本地部署DeepSeek-R1 8B,再也不用担心API费用和网络延迟了
Windows 11本地AI部署实战:OllamaDeepSeek-R1 8B全流程指南 在AI技术快速发展的今天,越来越多的开发者和中小企业开始关注如何在本地环境中部署和运行大型语言模型。对于预算有限但对数据隐私有高要求的团队来说,本地部署不仅能显著降低成本&…...
fcrackzip使用教程
fcrackzip 是一款专门用于破解ZIP压缩文件密码的工具,支持暴力破解和字典破解两种主要方式。它通过尝试不同的密码组合来解密受密码保护的ZIP文件,适用于渗透测试和密码恢复场景。该工具支持多种种破解算法,并允许用户自定义字符集和密码长度…...
最新短网址系统源码 短网址源码 分用户链接 全新UI短网址源码
最新短网址系统源码 分用户链接 简单介绍一下这个短链接源码,这个是我根据自己需要自建的,偏向于个人需求的完成 说一下特点吧,短链接格式如同https://域名/0810a7/tlWl6y,其中0810a7区分用户,tlWl6y是短链接的短码 …...
POIKit:地理数据全流程处理的高效解决方案
POIKit:地理数据全流程处理的高效解决方案 【免费下载链接】AMapPoi POI搜索工具、地理编码工具 项目地址: https://gitcode.com/gh_mirrors/am/AMapPoi 价值定位:重新定义地理数据采集效率 行业痛点与技术突破 在地理信息领域,传统…...
