基于MVC的博客系统【JavaWeb项目】

2023-11-10

项目说明书

一、摘要

博客系统是一个使用JavaWeb技术开发的博文及不同用户交流的平台。

博客系统是一个简单的博文交流的web平台,可以满足用户简单的博文管理需求,操作简单,主要包含以下几个方面:

  • 登录注册
  • 查看所有用户的博客文章
  • 对博文进行检索
  • 管理个人发布的博文
  • 对博文进行评论

二、项目概述

项目概述是在调研分析的基础上,对现系统的现状和用户要求进行的概述。

系统概述

中国随着经济的发展,信息化的进一步发展,越来越多的人拥有个人电脑,使用电脑的人群也各式各样,当前市面上有着很多博客平台,就像CSDN,博客园等很多有着强大功能。

博文管理和检索是博客系统的基础。

系统业务流程

image-20201226162625353

三、系统功能模块

image-20201226163421572

系统需求分析

一、博客简介

博客是人们在网络上展现自己个性的一种方式。自从互联网走进千家万户,大受人们喜爱。大家都喜欢通过网络来获取各种各样的信息。而在网络上,你也可以畅所欲言,而个人博客也是其中一种。在博客上,你可以发表自己的心路旅程,发表自己的工作经验,发表技术博客等等。

博客,它也被称为网络日志。博客其实就是一个网页,它是由各种各样的帖子组成。这些帖子可以是你某一天观看电影的感慨,也可以是阅读到某篇书籍的读后感,更可以是你在自己技术领域的心得。它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。

博客与论坛有许多的相似之处,许多朋友都分不清他们两的区别。首先,论坛和博客都可以进行交友和交流等。而其中论坛注重的是集体讨论,博客注重的是个人分享。它们两者的核心点就有着很大的区别。论坛的创建的用户是基于为众人服务,而博客是为了博主服务。它们的不同点还有在形式上的不同。博客是独立存在的。而论坛并不是。总结起来,论坛是多人一起交流的地方,互动性强,社交性强。博客是发表个人文章的地方,虽然也可以交流,但更多的还是自娱自乐。

二、目的

开发一个个人的博客管理系统,具备基本的博客功能,主要用于发表个人博客,记录个人生活日常,学习心得,技术分享等,供他人浏览,查阅,评论等。

三、功能目标

  1. 发布文章
  2. 浏览所有文章和个人文章
  3. 文章检索
  4. 评论
  5. 查看文章详情

PS:进行项目演示。

四、 E-R图

image-20211223132023426

五、数据库分析

表数据分析:

用户表:账号、密码、用户id、昵称、粉丝数、性别等

文章表:文章id、标题、关键字、文章内容、点赞数量、发布时间、用户id

评论表:评论id、评论用户id、文章id、评论用户昵称、评论内容、评论日期。

数据字典

  1. 文章表

    image-20201226163841378

  2. 用户表

    image-20201226164135418

  3. 评论表

    image-20201226164302204

六、原型图

https://www.processon.com/view/link/5f17b8c25653bb7fd248b268

任务说明书

项目名称

博客系统

软硬件配置

  • 硬件环境:个人计算机
  • 操作系统:可以采用 Windows XP 以上系统
  • 数据库系统:MySQL
  • Web 服务器:Tomcat
  • Java 运行环境:采用 JDK8及以上版本
  • 编译器:IDEA(或者eclipse)

知识基础

  • servlet
  • jsp
  • request、response
  • ajax
  • json
  • mysql
  • html+css+js+jquery
  • MVC模式

第三方工具

  • jackson
  • druid
  • commons-beanutils
  • JdbcTemplate(Spring的)

开发流程

第一周

一、开发前准备(1天)

  • 了解项目需求
  • 相关软件的安装
  • 了解项目的技术栈

PS:相关技术栈可在时候进行串讲

二、环境搭建(1天)

  • 搭建JavaWeb环境
  • 测试servlet+jsp
  • 连接mysql
  • 数据库的增删改查

三、登录注册(1天)

  • 完善登录注册的静态页面
  • 注册,并将用户信息存储到数据库
  • 登录

四、发布博客(1天)

  • 完善发布博客的静态页面
  • 发布博客并保存到数据库

第二周

五、查看博客(1天)

  • 查看所有博客
  • 查看个人博客
  • 检索博客
  • 查看博客详情

六、管理博客(1天)

  • 修改博客
  • 删除博客

任务目标

  • 通过本次项目实战,不仅可以让大家深入JavaWeb技术的核心编程,而且能熟练的应用集成开发环境开发应用项目,而且更重要的是对软件设计可以达到一个新的认识高度。

  • 通过这次项目,带着大家掌握项目开发的流程,如何开发项目,遇到问题如何去解决,以及分享一些我的编程经验和学习方法和思想。

代码

1. 基本环境搭建

2. 登陆模块

html:

a. 验证码

html代码

 <li>
          <span class="login-input">验证码:</span>
          <input type="text" class="input-con login-verify">
          <img class="verify-img" src="/login/code">
          <span id="verift-update">点击切换</span>
 </li>

js代码

$(function () {
    window.onload = function () {
        //点击图片切换
        //获取图片
        $(".verify-img").click(function () {
            let date = new Date().getTime();
            $(this).attr("src","/login/code?date="+date);
        })
        $(".verift-update").click(function () {
            let date = new Date().getTime();
            $(".verify-img").attr("src","/login/code?date="+date);
        })
    }
})

servlet:

@WebServlet("/login/servlet")
public class CheckCodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建一个对象,在内存中存图片(验证码图片对象)
        int width =100;
        int height= 50;
        BufferedImage image  =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//宽,高,格式
        //2.美化图片
        //2.1化背景颜色
        Graphics graphics = image.getGraphics();//画笔对象
        graphics.setColor(Color.pink);//设置画笔颜色
        graphics.fillRect(0,0,width,height);//填充一个蓝色的矩形  填充的位置和大小
        //2.2画边框
        graphics.setColor(Color.BLUE);//设置颜色
        graphics.drawRect(0,0,width-1,height-1);//画边框
        //2.3写验证码
        graphics.setFont(new Font("宋体",Font.BOLD,25));
        String str ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  //验证码包含的所有字符数字
        StringBuffer sb= new StringBuffer();
        Random random = new Random();//画验证码验证符
        for (int i = 1; i < 5; i++) {
            int s = random.nextInt(str.length());//随机获取字符串的角标,长度在字符串长度的范围内
            char c = str.charAt(s);//获取随机的字符
            graphics.drawString(c+"",i*20,25);//字符串的内容和位置
            sb.append(c);
        }
        String checkCode = sb.toString();
        HttpSession session = request.getSession();
        //将验证码存储到session中,用于登录后的判断。
        session.setAttribute("checkCode",checkCode);
        //2.4画干扰线
        graphics.setColor(Color.black);
        for (int i = 0; i < 5; i++) {
            int x1 = random.nextInt(100);
            int x2 = random.nextInt(100);
            int y1 = random.nextInt(50);
            int y2 = random.nextInt(50);
            graphics.drawLine(x1,y1,x2,y2);
        }

        //3.将图片输入到页面展示
        ImageIO.write(image,"jpg",response.getOutputStream());//输出对象,后缀名,输出流输出
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

代码下载:(免费 不要积分)

- 途径一

下载链接:基于MVC的博客系统

在这里插入图片描述

- 途径二

git地址:gitee下载地址
作者所有,仅供参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MVC的博客系统【JavaWeb项目】 的相关文章

  • Spring Security 通过并发登录尝试将用户锁定

    我是安全新手 遇到了一个问题 该问题导致用户帐户被锁定 只有重新启动应用程序才能修复它 我有一个带有 spring security 4 0 2 RELEASE 应用程序的 spring boot 1 3 0 BUILD SNAPSHOT
  • 如何编写 Hibernate HQL 查询来删除所有“孙子”元素?

    我有学校 里面有团体 里面有学生 我想删除特定学校的所有学生 在 SQL 中我可以编写以下查询 DELETE FROM students1 WHERE students1 group id IN SELECT id FROM group1
  • 在Java中清空数组/处理

    除了循环遍历数组中的每个元素并将每个元素设置为 null 之外 Java 处理中是否有一个本机函数可以简单地清空数组 或销毁它 以便能够将其重新声明为新数组 There s Arrays fill myArray null 并不是说它执行的
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • 使用 jpql 和 jpa 从日期字段中提取年份

    我想从数据库中的一行中提取年份部分 以便将其与值进行比较 这是我的功能 public List
  • 无法实例化接收器 com.parse.GcmBroadcastReceiver

    我正在编写一个使用 GCM 通知和解析推送的离子应用程序 这个应用程序正在使用这些插件 com ionic keyboard 1 0 3 Keyboard com phonegap plugins PushPlugin 2 4 0 Push
  • firebase推送通知错误Spring Boot服务器端

    我正在尝试从 Spring Boot 服务器端发送通知到客户端 android 服务器运行良好 一切都很好 2020 09 01 08 13 07 691 INFO 18941 restartedMain e DevToolsPropert
  • 如何将自定义日志处理程序添加到 Google App Engine?

    我正在尝试向我的 java 应用程序添加自定义日志处理程序 我已经实现了一个扩展 java util Logging Handler 类的 InnerLogger 类 在我的logging properties中声明为处理程序 handle
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • 从 sbt 程序集运行 uber jar 会导致错误:无法找到或加载主类

    我有一个使用 sbt 程序集插件打包为 uber jar 的 Spark 作业 这build sbt指定一个可运行的 main 作为生成的 uber jar 的目标 mainClass in assembly Some com foo Ba
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • 不要模拟值对象:过于通用的规则,没有解释

    以下是 Mockito 单元测试框架的引用 不要模拟值对象 为什么有人会想要这样做呢 因为实例化对象太痛苦了 gt 无效 原因 如果创造新的装置太困难 那就是一个迹象 代码可能需要一些认真的重构 另一种方法是创建 价值对象的构建者 有一些工
  • 使用Java开发跨平台,不同平台字体缩放不同

    我正在为我的大学制作一些软件 需要一个 GUI 在它的第一个版本中 我让它使用系统外观 因此它看起来像 Linux Mac Windows 中的本机应用程序 我发现这很麻烦 因为我必须根据操作系统使所有 JLabel 具有不同的大小 无论分
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 我找不到 IntelliJ 快捷方式

    我使用 vim 一段时间 我知道有一个 intellij vim 插件 我很好奇内置的 IntelliJ 文本导航存在什么 如何打开实时模板来创建模板 如何查看以 tr 开头的现有模板列表 如何进行全局搜索并在当前文档中进行搜索 然后转到下

随机推荐

  • 【项目实战】基于python+pycharm+OpenCV的信用卡数字识别

    一 pycharm实现参数配置 直接运行程序会报错 usage ocr template match py h i IMAGE t TEMPLATE ocr template match py error the following arg
  • 当AI遇到IoT:开启智能生活的无限可能

    文章目录 1 AI和IoT的融合 1 1 什么是人工智能 AI 1 2 什么是物联网 IoT 1 3 AI和IoT的融合 2 智能家居 2 1 智能家居安全 2 2 智能家居自动化 3 医疗保健 3 1 远程监护 3 2 个性化医疗 4 智
  • 泰勒(Taylor)公式

    泰勒公式 如果函数f x 在含的某个开区间 a b 内具有直到 n 1 阶导数 则可以用泰勒展开公式去逼近原函数 麦克劳林公式 特殊 0 几个常见的初等函数的带有佩亚诺余项的麦克劳林公式
  • Windows10本地搭建网站教程 - 内网穿透发布公网访问

    文章目录 概述 1 搭建一个静态Web站点 2 本地浏览测试站点是否正常 3 本地站点发布公网可访问 3 1 安装cpolar内网穿透 3 2 创建隧道映射公网地址 3 3 获取公网URL地址 4 公网远程访问内网web站点 5 配置固定二
  • 硬件3D加速指南

    硬件3D加速指南 内容 1 解释 2 安装Xorg和配置内核 3 配置直接渲染 4 测试3D加速 5 疑难解答 6 参考 1 解释 什么是硬件3D加速 为什么我需要它 使用硬件3D加速 三维渲染将会使用显卡上的图形处理器来进行 而不会占据宝
  • macOS 软件推荐&避雷指南 - 让 mac 更像 windows 的装机必备软件

    网络上有很多 macOS 软件推荐的文章 但是那些文章大部分有下面的问题 没有结合使用场景 没有差评 从来不会说一个软件有什么缺点 是否稳定 所以这篇文章就围绕下面 2 点展开 安装哪些软件 可以让 macOS 的体验更加接近 window
  • 解决maven依赖冲突,这篇就够了!

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Python电脑随机生成1~100之间的整数, 让用户来猜,猜错时,会提示猜的数 字是大了还是小了,直到用户猜对为止,游戏结束

    定义一个函数 完成用户输入的三个数字的求和 以及在另一个函数求该和的平均值 用到函数传参 函数返回值 def sum num1 num2 num3 return num1 num2 num3 def average num1 num2 nu
  • AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置

    AD默认的丝印不大美观 那么多位号的丝印 想一个个单个去修改显得不现实 这里借助全局批量修改 快速更改丝印的字体 大小 显示中文 相对元件位置 AD20批量修改丝印大小 字体 选中其中一个丝印 右键 查找相似对象 将 Designator
  • COM读书笔记---- 编程工作的简化

    参考书籍 lt
  • Java中InputStream转化为MultipartFile类型

    由于工作需要 涉及到文件类型的转化 实际上MultipartFile有方法可以直接转化为InputStream 但是并没有办法可以从InputStream直接转化为MultipartFile 网上的资料大概看了下 有两种简单的方案Commo
  • ADC-dma死循环问题

    方法一 初始化dma时候 里面会先使能dma 然后打开相应的中断 然后结果会导致main函数中卡死 卡在箭头处 也就是打不开adc和dma 解决方案 全部注释 只留第一个配置dma的函数 11 16 补充 同样的现象 程序卡死在HAL AD
  • stm32Cubemx实用篇(一):PWM控制SG90舵机

    stm32Cubemx 一 PWM控制SG90舵机 本章将介绍使用stm32Cubemx软件配置PWM来控制SG90舵机角度 硬件平台 Stm32H743IIT6 舵机 SG90 0 180 旋转范围 网购5元一个 软件 Stmcubemx
  • [ 容器 ] Docker 基本管理

    目录 一 Docker 概述 1 1 Docker 是什么 1 2 Docker 的宗旨 1 3 容器的优点 1 4 Docker 与 虚拟机的区别 1 5 容器在内核中支持的两种技术 namespace的六大类型 二 Docker核心概念
  • ubuntu卸载软件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 打开终端 你将使用 apt get 命令 这是用于管理已安装程序的通用命令 在卸载程序时 你可能需要输入管理员密码 当你输入密码时 密码将不会被显示 完成输入后按回车即
  • PrintWriter返回乱码的分析及解决

    用response得到输出流 即response getOuptStream 返回值为ServletOutputStream 对象 即JSP的out对象 要么用response得到输出对象PrintWriter即response getWr
  • 十三、Linux中虚拟化的使用

    十三 Linux中虚拟化的使用 13 1 Linux中kvm虚拟化软件的安装及硬件设定 安装条件 对于Intel的cpu 要有vmx 对于amd的cpu 要有svm 执行cat proc cpuinfo grep vmx查看 1 搭建好软件
  • 保姆级mysql8.0.32安装配置教程(windows 64位)以及mysql的root密码忘记怎么办

    1 官网下载MySQL 下载Mysqlhttps dev mysql com downloads mysql 可能需要登录Oracle账户 下载完成后解压到某一个文件夹 记住这个路径 一会要用到 我的配置环境习惯性放在E盘 2 配置初始化文
  • leetcode1588、所有奇数长度子数组的和(c++)

    leetcode1588 所有奇数长度子数组的和 c 难度 简单 给你一个正整数数组 arr 请你计算所有可能的奇数长度子数组的和 子数组 定义为原数组中的一个连续子序列 请你返回 arr 中 所有奇数长度子数组的和 示例1 输入 arr
  • 基于MVC的博客系统【JavaWeb项目】

    项目说明书 一 摘要 博客系统是一个使用JavaWeb技术开发的博文及不同用户交流的平台 博客系统是一个简单的博文交流的web平台 可以满足用户简单的博文管理需求 操作简单 主要包含以下几个方面 登录注册 查看所有用户的博客文章 对博文进行