目录
一、功能和效果
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){