基于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项目】 的相关文章

  • Eclipse 中的 Java 简单电子邮件程序

    我想制作一个简单的程序 您可以从其中发送电子邮件命令行 我找到了这个教程 http www tutorialspoint com java java sending email htm http www tutorialspoint com
  • 如何检查 Java 中的间隔列表 (Joda-Time) 是否完全覆盖一个月

    我在用着乔达时间 http www joda org joda time Java 中用于跟踪时间列表的库间隔 http www joda org joda time key interval html 我想检查是否有一个列表Interva
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • 如何更改 JComboBox 下拉列表的宽度?

    我有一个可编辑的JComboBox其中包含单个字母值的列表 因此 组合框非常小 每个字母都有特殊的含义 对于很少使用的字母 有时用户并不清楚 因此我创建了一个自定义ListCellRenderer显示下拉列表中每个字母的含义 不幸的是 这个
  • 如何向 OkHttp 请求拦截器添加标头?

    我将这个拦截器添加到我的 OkHttp 客户端 public class RequestTokenInterceptor implements Interceptor Override public Response intercept C
  • 从 Java 启动外部进程:stdout 和 stderr

    我正在使用标准从 java 启动一个外部进程java lang Process 我试图弄清楚该过程的输出是什么 但是采用结合了两者的格式stdout and stderr 目前 我有Process getInputStream它提供了访问s
  • BigDecimal 中 Divide 方法的 Scale()

    new BigDecimal 37146555 53880000 divide new BigDecimal 1000000 scale 这返回10 但根据API divide method 返回一个 BigDecimal 其值为 这个 除
  • 从另一个类添加 Swing 组件

    我正在学习java 我正在尝试从另一个类向我的框架添加一个菜单栏 练习将代码划分为多个类以更好地组织程序 这是我的代码示例 public class MainApp public static void main String args C
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 更改 Spring Web 应用程序的默认会话超时

    我必须测试一个由 spring 和 jsp 编写的 Web 应用程序 应用程序的默认会话超时为 30 分钟 我想减少会话超时 为此 我改变了web xml文件输入tomcatInstallationLocation conf 但这不起作用
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • C3P0:生产中未返回的连接超时?

    参数unreturnedConnectionTimeout给定时间段后未返回的连接超时 我正在尝试决定是否应该在我的制作中使用它persistence xml 使用它的一大优点是连接池将能够从泄漏的连接中恢复 一个很大的缺点是泄漏的连接将很
  • org.apache.catalina.core.JreMemoryLeakPreventionListener 中急切调用 URLConnection 的 setDefaultUseCaches(false) 是什么原因

    这个问题可能有点难以找到答案 这是一个系列中的问题考虑使用 Policy getPolicy 的原因是什么 因为它将保留对上下文的静态引用并可能导致内存泄漏 https stackoverflow com questions 7057421
  • JSF“总”变量类似于 JSTL 中的 c:set

    我不喜欢 JSF 但我需要用它来解决这个问题 我正在 纯 JSF 中工作 所以这就是我基本上需要的 但我不知道如何用 JSF 来实现它
  • 需要同步仅增量计数器吗?

    我使用整数作为计数器 该整数只会增加 并且肯定有多个线程会同时增加它 当没有其他线程尝试访问其值时 在程序执行结束时读取该计数器的值 我假设我不必为这种仅增量计数器使用锁或任何类型的同步 这是正确的吗 如果这有什么区别的话 我用 Java
  • 从 IntelliJ 运行 JavaFX 应用程序

    Versions openjdk版本 11 0 11 2021 04 20 OpenJDK 运行时环境 build 11 0 11 9 Ubuntu 0ubuntu2 20 10 OpenJDK 64 位服务器虚拟机 内部版本 11 0 1
  • Hibernate 命名查询使用 Like 和 % % 运算符?

    在我的 Hibernate JPA 示例代码中 public List
  • 是什么让热部署成为“难题”?

    在工作中 我们经常遇到这样的问题 永久代内存不足 http www jroller com agileanswers entry preventing java s java lang例外 团队负责人认为这是 JVM 中的一个错误 与代码的

随机推荐

  • 【项目实战】基于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平台 可以满足用户简单的博文管理需求 操作简单 主要包含以下几个方面 登录注册 查看所有用户的博客文章 对博文进行