2025全新JSP简约博客平台-免费开源

news2025/2/11 5:40:50

前言

最近收到不少同学期末作业的需求,都还是JSP的老技术,介于现在很多网上可以找到的JSP现有项目,要么就是很老好几年前的,要么就是搞了一通不仅乱码还各自报错失败的,总之就是资源有限,于是我花了一星期时间从0到1写了有一个新的基于JSP技术的博客平台,直接免费开源提供给大家。

JSP 2025 全新博客项目是一个基于 JSP 技术的开源博客系统,融合多项前沿技术,为用户打造功能全面、体验出色的博客平台。

项目采用 JDK 8、MySQL 8、bootstrap 框架等构建,技术成熟稳定。其结构清晰,src目录下各包各司其职,WebContent存放网页资源,便于开发维护。功能丰富多样,从博客首页的分类文章展示、搜索,到文章详情的点赞收藏;从个人中心的创作、编辑文章,到管理点赞、收藏内容,满足用户多样需求。

富文本组件选用 wangeditor,支持便捷编辑、图片视频上传。启动项目时,按流程配置好环境、克隆项目、设置 IDEA 及数据库信息,创建并配置 Tomcat 服务即可运行。无论是开发者探索技术,还是用户搭建个人博客,该项目都是优质之选。


PS:有需求的同学可后台私信+v

项目开源地址:https://gitee.com/open-yuan/jsp-blog


技术栈

  • JSP
  • JDK 8
  • MySQL 8
  • 富文本组件
  • html/css/js
  • bootstrap 框架
  • tomcat 10

项目结构

📦 de-blog

├── 📁 data

│ └── 📁 vscode

├── 📁 db # 数据库脚本

├── 📁 doc

├── 📁 out

├── 📁 src

│ ├── 📁 com

│ │ └── 📁 blog

│ │ ├── 📁 bean # PO对象

│ │ ├── 📁 dao # DAO层

│ │ ├── 📁 filter # 拦截器

│ │ ├── 📁 listener # 监听器

│ │ ├── 📁 servlet # 接口层

│ │ └── 📁 util # 工具类

│ └── 📁 WebContent

│ ├── 📁 common # 公共内容

│ ├── 📁 font # JSP页面

│ ├── 📁 META-INF

│ ├── 📁 static # 静态资源

│ │ ├── 📁 bootstrap

│ │ ├── 📁 css

│ │ ├── 📁 file # 图片、视频上传

│ │ ├── 📁 img # 项目基础图片

│ │ ├── 📁 js

│ │ └── 📁 layui

│ └── 📁 WEB-INF # 项目配置

└── 📄 blog.sql

功能介绍

博客首页

左侧文章分类列表,点击可查看对应分类文章;中间顶部搜索框方便用户查找文章;中间文章列表展示文章信息,点击可查看详情。

文章详情

内容底部提供点赞和收藏功能,用户可对感兴趣文章进行操作。

带图片和视频详情

支持展示包含图片和视频的文章内容,丰富用户阅读体验。

我的博客

展示用户发表的文章列表,方便用户管理个人文章。

我的点赞

呈现用户点赞过的文章列表,方便用户回顾感兴趣内容。

我的收藏

展示用户收藏的文章,便于用户随时查看。

文章创作

提供富文本编辑环境,支持设置标题、标签、封面、摘要和选择分类,方便用户创作文章。

编辑文章

用户可对已有文章进行编辑修改,完善文章内容。

图片和视频内容

支持在文章中插入和展示图片、视频,丰富文章表现形式。

个人信息

用户可编辑个人资料,包括上传头像、修改用户名、昵称、密码和性别等信息。

核心功能介绍

富文本组件

富文本组件采用 wangeditor 实现,提供强大编辑功能,提升用户创作体验,官网地址:https://www.wangeditor.com/

顶部菜单栏

通过设置样式展示,为用户提供格式设置等操作入口。

<div style="border-bottom: 1px solid #e8e8e8;">
  <div id="editor-toolbar"></div>
</div>

内容标题+内容编辑区

包含标题输入框和内容编辑区域,方便用户撰写文章。

<div id="editor-container" class="col-lg-9 col-md-12 col-xl-7">
            <div id="title-container">
                <input id="article-title" placeholder="请输入文章标题(3~50个字)" value="<%= (articleBean != null) ? articleBean.getTitle() : "" %>"/>
            </div>
            <div id="editor-text-area"></div>
        </div>

组件引入和基础信息配置

引入 wangeditor 组件并配置基础信息,包括切换语言、设置占位符、禁止滚动等。

const E = window.wangEditor
const { SlateElement, SlateTransforms, SlateEditor, DomEditor } = wangEditor;

// 切换语言
const LANG = location.href.indexOf('lang=en') > 0 ? 'en' : 'zh-CN'
E.i18nChangeLanguage(LANG)

const editorConfig = {
  placeholder: '## 记录技术文章 ##',
  scroll: false, // 禁止编辑器滚动
  MENU_CONF: {},
  onChange(editor) {
  }
}

图片、视频等配置

配置图片和视频上传参数,如上传地址、文件类型限制、最大文件大小等,并设置插入图片后置操作。

// 上传图片的配置
    editorConfig.MENU_CONF['uploadImage'] = {
        server: '/upload/article/image',
        fieldName: 'file',
        maxNumberOfFiles: 1,
        // 单个文件的最大体积限制,默认为 2M
        maxFileSize: 3 * 1024 * 1024, // 3M
        allowedFileTypes: ['image/*'],
        // 单个文件上传失败
        onFailed(file, res) {
            console.log(res)
            showToast('图片上传失败')
        },
    };

    // 插入图片后置操作
    editorConfig.MENU_CONF['insertImage'] = {
        onInsertedImage(imageNode) {
            if (imageNode == null) {
                return
            }
            setTimeout(() => {
                const imageNodePath = DomEditor.findPath(editor, imageNode);
                SlateTransforms.setNodes(editor, {
                    ...imageNode, style: { width: '100%', height: '' }
                }, { at: imageNodePath })
            }, 100)
        },
    }

    // 上传视频配置
    editorConfig.MENU_CONF['uploadVideo'] = {
        server: '/upload/article/video',
        fieldName: 'file',
        maxNumberOfFiles: 1,
        // 单个文件的最大体积限制,默认为 2M
        maxFileSize: 30 * 1024 * 1024, // 30M
        allowedFileTypes: ['video/*'],
        // 自定义插入
        customInsert(res, insertFn) {
            insertFn(res.data.url, '')
        },
        onFailed(file, res) {
            console.log(res)
            showToast('视频上传失败')
        }
    }

创建编辑器,配置默认样式

创建编辑器实例并配置默认样式,包括段落格式、字体等,同时创建工具栏并设置相关配置。

// 默认样式
    const jsonContent = [
        {
            type: 'paragraph',
            lineHeight: '1.5',
            children: [
                { text: '', fontFamily: '宋体'}
            ]
        },
    ]

    // 先创建 editor
    const editor = E.createEditor({
        selector: '#editor-text-area',
        content: jsonContent,
        // html: '',
        config: editorConfig
    })

    // 创建 toolbar
    const toolbar = E.createToolbar({
        editor,
        selector: '#editor-toolbar',
        config: {
            excludeKeys: 'fullScreen',
        }
    })

    // 点击空白处 focus 编辑器
    document.getElementById('editor-text-area').addEventListener('click', e => {
        if (e.target.id === 'editor-text-area') {
            editor.blur()
            editor.focus(true) // focus 到末尾
        }
    })

启动流程

准备环境,如 JDK、Tomcat、MySQL 等。

git clone -b master https://gitee.com/open-yuan/jsp-blog.git

项目拉取下来之后使用 IDEA 打开,配置基础环境,如下步骤:

  1. 配置 JDK

  1. 配置模块

  1. 配置 web

  1. 配置依赖包

  1. 配置输出制品

  1. 找到 com.blog.util.DBUtil类,修改 mysql 地址和账户密码,如下:

  1. 创建一个 Tomcat 服务,选择刚刚的制品

  1. 配置服务,最后启动,完毕!

PS:有需求的同学可后台私信+v

项目开源地址:https://gitee.com/open-yuan/jsp-blog


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)

计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas) 文章目录 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)摘要Abstract一、Attention U-Net1. 基本思想2. Attention Gate模块3. 软注意力与硬注意力4. 实验…

基于SpringBoot的“4S店车辆管理系统”的设计与实现(源码+数据库+文档+PPT)_2025-02-10

基于SpringBoot的“4S店车辆管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录界面图 管理员功能界…

ESP-IDF学习记录(6)

这篇不知道起什么标题&#xff0c;因为已经卡滞很久了&#xff0c;从年前到现在&#xff0c;但也没停止探索 1.烧录 用的小型加热台&#xff0c;这步对我来说最难&#xff0c;自己没有焊接过QFN32的封装 总结一下目前遇到的问题&#xff1a; 1&#xff09;5V供电选成了12V转…

【机器学习与数据挖掘实战】案例13:基于BP神经网络模型的家用热水器用户行为分析与事件识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支&#xff0c;专注于让计算机系统通过数据学习和改进。它利用统计和计算方法&#xff0c;使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

Windows 植物大战僵尸杂交版

植物大战僵尸杂交版 链接&#xff1a;https://pan.xunlei.com/s/VOIjttp8EzfL9fXO6S6ekvZYA1?pwdw8cm# 作者: B站UP主 潜艇伟伟迷

【学习笔记】计算机网络(三)

第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…

Blazor-<select>

今天我们来说说<select>标签的用法&#xff0c;我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…

Best practice-ThreadLocal高并发场景的最佳实践

关于ThreadLocal基础信息 引用一段来自ThreadLocal源码中的doc注释来说明其特性&#xff1a; This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has …

【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-GSYVideoPlayer

简介 GSYVideoPlayer是一个视频播放器库&#xff0c;支持切换内核播放器&#xff08;IJKPlayer、avplayer&#xff09;&#xff0c;并且支持视频截图能力、 视频生成gif能力、边播边缓存能力、视频全屏能力等多种能力。 效果展示&#xff1a; 下载安装 ohpm install ohos/gs…

IDEA中常见问题汇总

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现

代码下载&#xff1a;私信博主回复基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现 《基于蜘蛛蜂优化算法的无人机集群三维路径规划》 摘要 本研究针对无人机集群三维路径规划问题&#xff0c;提出了一种基于蜘蛛蜂优化算法的解决方案。以5个无人机构成的集群为研究对…

Deepseek系列从v3到R易背面经版

deepseek v3 base要点 MTP : Multi-Token Prediction 训练时&#xff1a; 1. 把前一个block中input tokens经过embedding layer和transformer block的输出&#xff0c;进入output head之前的内容记为h&#xff0c;与下一个block的input tokens经过embedding layer输出的内容都…

Maven入门核心知识点总结

Maven 1. POM&#xff08;Project Object Model&#xff09;2. 坐标&#xff08;Coordinates&#xff09;3. 依赖管理&#xff08;Dependency Management&#xff09;4. 常用五个生命周期&#xff08;Life Circle&#xff09;5. Maven 仓库&#xff08;Maven Repository&#x…

Blocked aria-hidden on an element because its descendant retained focus.

在使用el-popover和el-radio-group实现弹窗选择数据后调用el-popover的doClose()方法时一直报错&#xff01; 经过分析发现el-popover及el-radio__original有aria-hidden属性&#xff0c;具体aria-hidden属性应用自行搜索了解。既然是这个玩意引起的&#xff0c;则在显示时将a…

python爬虫--简单登录

1&#xff0c;使用flask框架搭建一个简易网站 后端代码app.py from flask import Flask, render_template, request, redirect, url_for, sessionapp Flask(__name__) app.secret_key 123456789 # 用于加密会话数据# 模拟用户数据库 users {user1: {password: password1}…

三次握手,四次挥手,服务器模型(多进程并发,线程),基于套接字的UDP通信

三次握手&#xff1a; 第一次握手&#xff1a;客户端向服务器发送SYN待确认数据x, 客户端进入SYN_SEND状态​ 第二次握手&#xff1a;服务器向客户端回传一条ACK应答数据x1, 同时发送一条SYN待确认数据y&#xff0c;服务器进入SYN_RECV状态​ 第三次握手&#xff1a;客户端向服…

Linux TCP 编程详解与实例

一、引言 在网络编程的领域中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下&#xff0c;使用 C 或 C 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面&…

Elasticsearch 开放推理 API 增加了 Azure AI Studio 支持

作者&#xff1a;来自 Elastic Mark Hoy Elasticsearch 开放推理 API 现已支持 Azure AI Studio。在此博客中了解如何将 Azure AI Studio 功能与 Elasticsearch 结合使用。 作为我们持续致力于为 Microsoft Azure 开发人员提供他们选择的工具的一部分&#xff0c;我们很高兴地宣…

提示工程:少样本提示(Few-shot Prompting)

少样本提示&#xff08;Few-shot Prompting&#xff09;是一种利用大语言模型从少量示例样本中学习并处理任务的方法。它的核心思想是利用大语言模型的上下文学习能力&#xff0c;通过在提示中增加“示例样本”来启发大语言模型达到举一反三的效果。这种方法避免了重新训练或者…

封装descriptions组件,描述,灵活

效果 1、组件1&#xff0c;dade-descriptions.vue <template><table><tbody><slot></slot></tbody> </table> </template><script> </script><style scoped>table {width: 100%;border-collapse: coll…