基于Servlet实现博客系统

本文详细描述了一个Web应用的后端开发过程,包括数据库设计(如blogs和users表)、登录功能(客户端请求、服务器响应)、博客列表页和详情页展示、用户信息显示以及强制登陆和退出登陆的逻辑。涉及到数据库操作、数据验证和前后端交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、功能和效果

1、实现的功能

2、页面效果

二、功能具体实现

1、数据库

(1)设计数据库

(2)创建数据库表

(3)实现对blogs表和users表的操作并封装

2、登陆功能实现

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)效果

3、显示博客列表页

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)客户端收到响应后显示在页面上

(4)效果

4、显示博客详情页

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)客户端收到响应后显示在页面上

(4)效果

5、显示列表页用户信息

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)客户端收到响应后显示在页面

(4)效果

6、显示详情页用户信息

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)客户端收到响应后显示在页面

(4)效果

7、发布博客

(1)客户端发送请求

(2)服务器接收请求并做出响应

(3)效果

8、强制要求登陆

(1)客户端发送请求

(2)服务器接收请求并做出响应

​编辑

(3)效果

9、退出登陆

(1)客户端发送请求

(2)服务器处理请求 并做出响应

(3)效果


一、功能和效果

1、实现的功能

登陆功能、显示博客列表页、显示博客详情页、显示列表页用户信息、显示详情页用户信息、强制要求登陆、发布博客、退出登陆。

2、页面效果

(1)登陆

(2)博客列表页

(3)博客详情页

(4)列表页用户信息

(5)详情页用户信息

(5)发布博客

以上markdown编辑器需要引入第三方库editor.md,editor.md需要在github上下载好,放入webapp目录即可。

需注意:以上效果图只是基于前端代码,还未写入后端代码具体实现。

二、功能具体实现

1、数据库
(1)设计数据库

考虑到博客和用户两个实体,设计两张表。blogs表包括博客id、用户id、标题、时间、正文。users表包括用户id、密码、用户名。

(2)创建数据库表
create database if not exists blog_system charset utf8;
use blog_system;
drop table if exists blogs;
create table blogs (
    blogid int primary key auto_increment,
    useid int,
    title varchar(1024),
    postTime datetime,
    content varchar(4096)
);
drop table if exists users;
create table users(
    useid int primary key auto_increment,
    username varchar(50) unique,
    password varchar(50)
);
insert into blogs values (1 ,1, '这是第一篇博客',now(), '# 从前天开始我要认真写代码');
insert into blogs values (2, 1, '这是第二篇博客', now(), '# 从昨天开始我要认真写代码');
insert into blogs values (3, 1, '这是第三篇博客', now(), '# 从今天开始我要认真写代码');
insert into users values (1, 'gyn', '123');
insert into users values (2, 'gyq', '000');

(3)实现对blogs表和users表的操作并封装

①blog类对应的对象即为blogs表的每条数据

package model;

import java.sql.Timestamp;

public class blog {
    private int blogid;
    private int useid;
    private String title;
    private String content;
    private Timestamp postTime;

    public int getBlogid() {
        return blogid;
    }

    public void setBlogid(int blogid) {
        this.blogid = blogid;
    }

    public int getUseid() {
        return useid;
    }

    public void setUseid(int useid) {
        this.useid = useid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Timestamp getPostTime() {
        return postTime;
    }

    public void setPostTime(Timestamp postTime) {
        this.postTime = postTime;
    }

    @Override
    public String toString() {
        return "blog{" +
                "blogid=" + blogid +
                ", useid=" + useid +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", postTime=" + postTime +
                '}';
    }
}

②user类对应的对象即为user表中的每条数据

package model;

public class user {
    private int useid;
    private String username;
    private String password;

    public int getUseid() {
        return useid;
    }

    public void setUseid(int useid) {
        this.useid = useid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "user{" +
                "useid=" + useid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

③建立数据库连接和释放资源

获取数据源时,可以考虑使用单例模式中的懒汉模式。又考虑到懒汉模式是线程不安全的,且一个服务器会处理不同客户端的请求,所以需要加锁。

package model;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {
    private static volatile DataSource dataSource=null;
    public static DataSource getdataSource(){  //获得数据源
        if(dataSource==null){
            synchronized (DBUtil.class){
                if (dataSource==null){
                    dataSource=new MysqlDataSource();
                    ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8&useSSL=false");
                    ((MysqlDataSource) dataSource).setUser("root");
                    ((MysqlDataSource) dataSource).setPassword("272222");
                }
            }
        }
        return dataSource;
    }
    
    public static Connection getConnection() throws SQLException {  //建立连接
        return getdataSource().getConnection();
    }
    
    //释放资源
    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
        if(resultSet==null){   
            try {
                resultSet.close();
            }catch (SQLException e){
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ambition…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值