国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前后端分離實現(xiàn)博客系統(tǒng)

這篇具有很好參考價值的文章主要介紹了前后端分離實現(xiàn)博客系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

博客系統(tǒng)

前言

基于servlet+jdbc進(jìn)行后端開發(fā),設(shè)計了一個可以發(fā)布博客,查看博客詳情,刪除博客,登錄注銷功能的簡易博客系統(tǒng)。

1. 前端

1.1 登陸頁面

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

1.2 博客列表頁面

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

1.3 博客詳情頁面

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

1.4 博客編輯頁面

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

2. 后端

2.1 項目部署

2.1.1 創(chuàng)建maven項目

我們在idea里面點擊new project創(chuàng)建一個maven項目,然后一路next選擇好項目位置以及命名即可。
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

2.1.2 引入依賴

在創(chuàng)建完maven項目之后我們需要加載依賴,部分同學(xué)可能由于網(wǎng)絡(luò)問題難以加載,可以多試幾遍,實在不行可以更換國內(nèi)的鏡像下載此處不作多介紹。以下需要引入的依賴主要有:java.servlet-api、mysql-connector-java,以及后續(xù)發(fā)送json格式的數(shù)據(jù)需要的jackson依賴(jackson-databind)

我們通過maven倉庫官網(wǎng)https://mvnrepository.com/ 即可獲取。

如圖:復(fù)制鏈接黏貼到我們項目的pom.xml文件
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

代碼 : 以下是我部署的依賴可以直接復(fù)制黏貼

 <dependencies>
<!--        servlet依賴-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
<!--        jackson依賴-->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.2</version>
        </dependency>
<!--        數(shù)據(jù)庫依賴-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
2.1.3 創(chuàng)建目錄結(jié)構(gòu)

在我們的webapp目錄下面創(chuàng)建一個WEB-INF包并創(chuàng)建一個web.xml,此處結(jié)構(gòu)以及名字不能改動。
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet
web.xml內(nèi)容:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>
2.1.4 部署程序

我們在插件市場搜索 Smart Tomcat 插件,將Tomcat集成到idea就不用我們手動打包,之后點擊即可運(yùn)行。
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet
然后點擊新增運(yùn)行配置,將Smart Tomcat加入,此處選擇Tomcat路徑,如果還沒有下載Tomcat,可以通過官網(wǎng)下載。博主使用的是 3.1版本的servlet+tomcat 8 。

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet
前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

然后就可以點擊運(yùn)行:出現(xiàn)以下結(jié)果就是部署成功了。之后我們就可以通過127.0.0.1:8080/MessageWall/xx.html(html頁面)訪問,其中MessageWall是Context path,一般默認(rèn)是項目名。

前后端分離實現(xiàn)博客系統(tǒng),項目,java,數(shù)據(jù)庫,后端,servlet

2.2 邏輯設(shè)計

2.2.1 數(shù)據(jù)庫設(shè)計

我們博客系統(tǒng)主要有用戶登錄以及編寫博客的功能,基于此需求在當(dāng)前博客系統(tǒng)中主要涉及兩個實體,博客和用戶,所以我們需要創(chuàng)建兩張表用于存儲博客和用戶信息。

注意:用戶與博客之間是一對多的關(guān)系;以下設(shè)計blog表和user表

  1. blog表包含blogId,title,content,postTime,userId屬性;
  2. user表包含userId,userName,password;
  3. 通過userId建立關(guān)系,描述用戶有哪些博客。

sql代碼寫到文本文件中用于記錄,以便后續(xù)在別的機(jī)器上部署;
編寫封裝數(shù)據(jù)庫的連接操作,代碼如下:

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

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

/**
 * @author zq
 */
public class DBUtil {
    private static DataSource dataSource = new MysqlDataSource();

    static {
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");
    }
    public static Connection getConnection() throws SQLException {
        return (Connection) dataSource.getConnection();
    }

    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
        if (resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (preparedStatement!=null){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2.2.2 實體類設(shè)計

根據(jù)我們用戶表和博客表設(shè)計兩個對應(yīng)的實體類如下:

user類:

package model;

/**
 * @author zq
 */
public class User {
    private String username;
    private String password;
    private int userId;

    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;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }
}

blog類:

package model;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;

/**
 * @author zq
 */
public class Blog {
    private int blogId;
    private String title;
    private String content;
    private Timestamp postTime;
    private int userId;


    public int getBlogId() {
        return blogId;
    }

    public void setBlogId(int blogId) {
        this.blogId = blogId;
    }

    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 String getPostTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return simpleDateFormat.format(postTime);
    }
    public Timestamp getPostTimestamp(){
        return postTime;
    }

    public void setPostTime(Timestamp postTime) {

        this.postTime = postTime;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }
}

2.2.3 Dao層設(shè)計

封裝數(shù)據(jù)庫的增刪改查,針對博客表創(chuàng)建BlogDao,針對用戶表創(chuàng)建UserDao并且提供對應(yīng)的增刪改查方法。

2.2.3.1 BlogDao

針對本項目我們需要的功能有發(fā)布博客,也就是在博客表新增一條數(shù)據(jù);顯示博客詳情即根據(jù)博客id查詢博客內(nèi)容;刪除博客即根據(jù)博客id刪除博客;博客列表頁即查詢該用戶發(fā)布的所有博客;
具體實現(xiàn)如下:

package model;

import com.mysql.jdbc.Connection;
import model.Blog;
import model.DBUtil;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


/**
 * @author zq
 */
//針對博客表提供的基本操作,此處暫時不考慮修改
public class BlogDao {
    //1。新增一個博客
    public void add(Blog blog)  {
        //1.先于數(shù)據(jù)庫建立連接、
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            connection = DBUtil.getConnection();
            //2.構(gòu)造sql1語句
            String sql = "insert into blog values(null,?,?,now(),?)";
            preparedStatement = connection.prepareStatement(sql);

            preparedStatement.setString(1, blog.getTitle());
            preparedStatement.setString(2, blog.getContent());
           // preparedStatement.setTimestamp(3,blog.getPostTimestamp());
            preparedStatement.setInt(3,blog.getUserId());

            //3.執(zhí)行sql
            preparedStatement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,preparedStatement,null);
        }


    }
    //2.根據(jù)博客id查詢指定博客,也就是頁面的顯示全文
    public Blog selectById(int blogId){
        Connection connection =null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            //1.建立連接
            connection = DBUtil.getConnection();
            //2.構(gòu)造sql語句
            String sql = "select * from blog where blogId = ?";
            statement = connection.prepareStatement(sql);
            statement.setInt(1,blogId);
            //3.執(zhí)行sql語句
            resultSet = statement.executeQuery();
            //由于主鍵具有唯一性所以如果查到數(shù)據(jù)那么就只有一條
            //所以不需要用while遍歷所有結(jié)果,判斷是否有一條就行
            if (resultSet.next()){
                Blog blog = new Blog();
                blog.setBlogId(resultSet.getInt("blogId"));
                blog.setContent(resultSet.getString("content"));
                blog.setTitle(resultSet.getString("title"));
                blog.setUserId(resultSet.getInt("userId"));
                blog.setPostTime(resultSet.getTimestamp("postTime"));
                return blog;
            }

        }catch (SQLException throwables){
            throwables.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }

        return null;
    }
    //3.直接查詢數(shù)據(jù)庫所有的博客列表(博客列表頁)
    public List<Blog> selectAll(){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<Blog> blogs = new ArrayList<>();
        try{
            //建立鏈接
            connection = DBUtil.getConnection();
            //構(gòu)造sql語句
            String sql = "select * from blog order by postTime desc";
            statement = connection.prepareStatement(sql);
            //執(zhí)行sql
            resultSet = statement.executeQuery();
            while (resultSet.next()){
                Blog blog = new Blog();
                blog.setBlogId(resultSet.getInt("blogId"));
                //注意這里的正文內(nèi)容在博客列表頁,不需要全部顯示出來
                String content = resultSet.getString("content");
                if (content.length()>=100){
                    content = content.substring(0,100)+"....";
                }
                blog.setContent(content);
                blog.setTitle(resultSet.getString("title"));
                blog.setUserId(resultSet.getInt("userId"));
                blog.setPostTime(resultSet.getTimestamp("postTime"));

                blogs.add(blog);
            }

        }catch (SQLException throwables){
            throwables.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);

        }
        return blogs;
    }

    //4.實現(xiàn)刪除指定博客
    public void delete(int blogId){
        Connection connection = null;
        PreparedStatement statement = null;
        try{
            //建立鏈接
            connection = DBUtil.getConnection();
            //構(gòu)造sql語句
            String sql = "delete from blog where blogId =?";
            statement = connection.prepareStatement(sql);
            statement.setInt(1,blogId);
            //執(zhí)行sql
            statement.executeUpdate();

        }catch (SQLException throwables){
            throwables.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,null);

        }

    }
}

2.2.4 Dao層設(shè)計

本項目在設(shè)計用戶表的主要功能,登錄需要驗證用戶名與密碼即根據(jù)用戶名查詢用戶信息;主頁右側(cè)顯示的用戶信息即根據(jù)用戶id查詢用戶信息;

具體實現(xiàn):

package model;

import com.mysql.jdbc.Connection;
import model.DBUtil;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author zq
 */
//針對用戶表提供的基本操作,由于沒有寫注冊功能所以就不寫add,
// 也沒有注銷功能,所以也不寫delete
public class UserDao {
    //1.根據(jù)userID查詢用戶信息
    public User selecetById(int userId){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try{
            connection = DBUtil.getConnection();
            String sql = "select * from user where userId = ?";
            statement = connection.prepareStatement(sql);
            statement.setInt(1,userId);
            resultSet = statement.executeQuery();

           if (resultSet.next()){
               User user = new User();
               user.setUserId(resultSet.getInt("userId"));
               user.setUsername(resultSet.getString("username"));
               user.setPassword(resultSet.getString("password"));
               return user;
           }


        }catch (SQLException throwables){
            throwables.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }
        return null;
    }

    //2.根據(jù)用戶名查詢用戶信息
    public User selectByUsername(String username){

            Connection connection = null;
            PreparedStatement statement = null;
            ResultSet resultSet = null;
            try{
                connection = DBUtil.getConnection();
                String sql = "select * from user where username = ?";
                statement = connection.prepareStatement(sql);
                statement.setString(1,username);
                resultSet = statement.executeQuery();

                if (resultSet.next()){
                    User user = new User();
                    user.setUserId(resultSet.getInt("userId"));
                    user.setUsername(resultSet.getString("username"));
                    user.setPassword(resultSet.getString("password"));
                    return user;
                }

            }catch (SQLException throwables){
                throwables.printStackTrace();
            }finally {
                DBUtil.close(connection,statement,resultSet);
            }
            return null;
    }

}

2.2.3 接口設(shè)計

在前后端進(jìn)行數(shù)據(jù)交互時我們約定以json格式進(jìn)行數(shù)據(jù)傳輸,前端通過ajax向后端發(fā)送請求。

2.2.3.1 登錄接口

創(chuàng)建一個LoginServlet類繼承HttpServlet類,重寫doPost()方法實現(xiàn)對用戶密碼的校驗,重寫doGet()方法進(jìn)行用戶是否登錄校驗,只有登錄了的用戶才能進(jìn)行博客編輯。
具體實現(xiàn)如下:

package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.User;
import model.UserDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author zq
 */

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.讀取用戶名和密碼,由于是form表單格式所以不用jackson的類進(jìn)行讀取
        //注意如果此處的用戶名密碼如果包含中文會亂碼,所以要設(shè)置字符集
        req.setCharacterEncoding("utf8");
        resp.setContentType("text/html; charset=utf8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if (username==null||"".equals(username)||password==null||"".equals(password)){
            //登錄失敗
            String html = "<h3> 登陸失敗username或者password錯誤 </h3>" ;
            resp.getWriter().write(html);
            return;
        }
        //2.讀取數(shù)據(jù)庫看用戶名是否存在,密碼是否匹配
        UserDao userDao = new UserDao();
        User user = userDao.selectByUsername(username);
        if (user==null){
            //用戶不存在
            String html = "<h3> 用戶名或密碼錯誤 </h3>" ;
            resp.getWriter().write(html);
            return;
        }
        if (!password.equals(user.getPassword())){
            String html = "<h3> 用戶名或密碼錯誤 </h3>" ;
            resp.getWriter().write(html);
            return;
        }
        //3.驗證通過,接下來創(chuàng)建會話,使用會話保存用戶信息
        HttpSession session = req.getSession(true);
        session.setAttribute("user",user);
       //4.進(jìn)行重定向到博客列表頁
        resp.sendRedirect("blog_list.html");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json;charset=utf8");
        //獲取用戶的登錄狀態(tài),如果用戶未登錄當(dāng)前會話就拿不到
        HttpSession session = req.getSession(false);
        if (session==null){
            //未登錄,返回一個user對象
            User user = new User();
            String respJson = objectMapper.writeValueAsString(user);
            resp.getWriter().write(respJson);
            return;
        }
        //登錄了取出user對象
      User user = (User) session.getAttribute("user");
        if (user==null){
            //一般不會為空
            user = new User();
            String respJson = objectMapper.writeValueAsString(user);
            resp.getWriter().write(respJson);
            return;
        }
        //成功取出user對象,直接返回
        String respjson = objectMapper.writeValueAsString(user);
        resp.getWriter().write(respjson);
    }
}

2.2.3.2 注銷接口

創(chuàng)建一個LogoutServlet類繼承HttpServlet類,重寫doGet()方法直接將session中的該用戶移除,去除該用戶緩存如何自動跳轉(zhuǎn)到登錄頁面。
具體實現(xiàn)如下:

package api;

import model.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author zq
 */
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession httpSession = req.getSession(false);
        if (httpSession==null){
            //未登錄狀態(tài),直接提示出錯
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("當(dāng)前未登錄");
        }
         //然后直接romove
        httpSession.removeAttribute("user");
        //然后跳轉(zhuǎn)到登錄頁面
        resp.sendRedirect("blog_login.html");
    }
}

2.2.3.3 作者查詢接口

創(chuàng)建一個AuthorServlet類繼承HttpServlet類,重寫doGet()方法實現(xiàn)通過前端傳輸?shù)挠脩鬷d獲取用戶信息。
具體實現(xiàn)如下:

package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.Blog;
import model.BlogDao;
import model.User;
import model.UserDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author zq
 */
@WebServlet("/author")
public class AuthorServlet extends HttpServlet {
    private ObjectMapper objectMapper;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //博客詳情頁根據(jù)博客id獲取用戶,由于是queryString所以getParameter就能拿到
        String blogId = req.getParameter("blogId");
        if (blogId==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("參數(shù)非法缺少blogID");
            return;
        }
        //根據(jù)·blogId查詢blog對象
        BlogDao blogDao = new BlogDao();
        Blog blog = blogDao.selectById(Integer.parseInt(blogId));
        if (blog==null){
            //說明沒找到
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("沒有找到指定博客;blogId=" + blogId);
        }
        UserDao userDao = new UserDao();
        User author = userDao.selecetById(blog.getUserId());
        String respJson = objectMapper.writeValueAsString(author);
        resp.setContentType("application/json;charset=utf8");
        resp.getWriter().write(respJson);


    }
}

2.2.3.4 博客接口

創(chuàng)建一個BlogServlet類繼承HttpServlet類,重寫doGet()方法實現(xiàn)通過判斷博客id是否存在確定獲取所有博客還是博客詳情,重寫Post()方法實現(xiàn)博客發(fā)布功能。
具體實現(xiàn)如下:

package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.Blog;
import model.BlogDao;
import model.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

/**
 * @author zq
 */
//實現(xiàn)前后端交互的代碼

@WebServlet("/blog")
public class BlogServlet extends HttpServlet {
    private ObjectMapper objectMapper = new ObjectMapper();

    //加載頁面時顯示所有博客查詢數(shù)據(jù)庫
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BlogDao blogDao = new BlogDao();
        //嘗試獲取一下queryString中的blogId字段
        String blogId = req.getParameter("blogId");
        if (blogId==null){
            //說明本次獲取的是列表頁
             List<Blog> blogs =  blogDao.selectAll();
            //將blogs轉(zhuǎn)成符合要求的json格式字符串
            String respJson = objectMapper.writeValueAsString(blogs);
            resp.setContentType("application/json;charset=utf8");
            resp.getWriter().write(respJson);

        }else {
            //存在,說明此處獲取的是博客內(nèi)容頁
            //根據(jù)id查詢博客
            Blog blog = blogDao.selectById(Integer.parseInt(blogId));
            //可能存在博客Id不存在的情況
            if(blog==null){
                System.out.println("當(dāng)前blogId=" +blogId+ "對應(yīng)的博客不存在");
            }
            String respJson = objectMapper.writeValueAsString(blog);
            resp.setContentType("application/json;charset=utf8");
            resp.getWriter().write(respJson);
        }

    }

    @Override //實現(xiàn)發(fā)布博客
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //讀取請求,構(gòu)造blog對象,插入數(shù)據(jù)庫1即可

        HttpSession httpSession = req.getSession(false);
        if (httpSession==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("當(dāng)前未登錄,無法發(fā)布博客");
            return;
        }
        User user = (User) httpSession.getAttribute("user");
        if (user==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("當(dāng)前未登錄,無法發(fā)布博客");
            return;
        }
        //在登錄狀態(tài)時,就拿到作者

        //獲取博客正文和標(biāo)題,此時需要指定字符集,然后通過指定的字符集插入數(shù)據(jù)庫
        req.setCharacterEncoding("utf8");
        String title = req.getParameter("title");
        String content = req.getParameter("content");
        if (title==null||"".equals(title)||content==null||"".equals(content)){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("當(dāng)前數(shù)據(jù)為空,無法發(fā)布博客");
            return;
        }

        //不為空時構(gòu)造blog對象然后插入到數(shù)據(jù)庫
        Blog blog = new Blog();
        blog.setContent(content);
        blog.setTitle(title);
        blog.setUserId(user.getUserId());

        BlogDao blogDao = new BlogDao();
        blogDao.add(blog);//blog里面的新增博客方法
        //跳轉(zhuǎn)到博客列表頁
        resp.sendRedirect("blog_list.html");


    }
}

2.2.3.4 刪除博客接口

創(chuàng)建一個delBlogServlet類繼承HttpServlet類,重寫doGet()方法實現(xiàn)通過判斷用戶是否是登錄并且用戶是否是博客作者,確定是否能夠刪除博客。
具體實現(xiàn)如下:

package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.Blog;
import model.BlogDao;
import model.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

/**
 * @author zq
 */
@WebServlet("/delBlog")
public class delBlogServlet extends HttpServlet {
    //private ObjectMapper objectMapper;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.首先判斷是否登錄
        HttpSession session = req.getSession(false);
        if (session==null){
            resp.setStatus(403);
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().write("當(dāng)前未登錄請登錄");
            return;
        }
        //獲取到當(dāng)前用戶
        User user = (User) session.getAttribute("user");
        //2.判斷用戶是否為空
        if (user==null){
            resp.setStatus(403);
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().write("當(dāng)前未登錄請登錄");
            return;
        }

        BlogDao blogDao = new BlogDao();
        //3.嘗試獲取一下queryString中的blogId字段,判斷博客是否存在
        String blogId = req.getParameter("blogId");
        //查詢到博客對象
        Blog blog = blogDao.selectById(Integer.parseInt(blogId));
        if (blogId==null){
            resp.setStatus(404);
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("博客數(shù)據(jù)不存在");
            return;
        }
        //4.判斷登錄用戶是否是作者
        if (blog.getUserId()!= user.getUserId()){
            resp.setStatus(403);
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().write("當(dāng)前不能刪除別人的博客");
            return;
        }
            //根據(jù)博客Id刪除博客
            blogDao.delete(Integer.parseInt(blogId));

            resp.sendRedirect("blog_list.html");



    }
}

3. 小結(jié)

本項目可以在我的gitee上查看源碼,后續(xù)會通過SSM框架重新實現(xiàn)并完善博客系統(tǒng)功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-619793.html

到了這里,關(guān)于前后端分離實現(xiàn)博客系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SSM項目前后端分離+IDEA運(yùn)行環(huán)境(含前端源碼)(個人博客系統(tǒng))

    SSM項目前后端分離+IDEA運(yùn)行環(huán)境(含前端源碼)(個人博客系統(tǒng))

    目錄 ?后端項目環(huán)境配置 1、創(chuàng)建一個SpringBoot項目,添加MyBatis框架和數(shù)據(jù)庫MySQL驅(qū)動依賴 2、配置項目文件:application.yml 3、創(chuàng)建數(shù)據(jù)庫表 4、創(chuàng)建分層結(jié)構(gòu)目錄 返回統(tǒng)一數(shù)據(jù)格式? 創(chuàng)建統(tǒng)一數(shù)據(jù)格式返回類:AjaxResult 創(chuàng)建實現(xiàn)統(tǒng)一數(shù)據(jù)返回的保底類:ResponseAdvice 統(tǒng)一處理 登錄

    2024年02月13日
    瀏覽(49)
  • 【飛機(jī)票售票系統(tǒng)】山東大學(xué)大二暑期數(shù)據(jù)庫課程設(shè)計項目SSM+VUE2前后端分離(含源碼)

    【飛機(jī)票售票系統(tǒng)】山東大學(xué)大二暑期數(shù)據(jù)庫課程設(shè)計項目SSM+VUE2前后端分離(含源碼)

    一、系統(tǒng)概述 二、需求分析 2.1 系統(tǒng)功能分析 2.2 系統(tǒng)數(shù)據(jù)分析 2.3 系統(tǒng)非功能分析 三、系統(tǒng)設(shè)計 3.1 應(yīng)用程序設(shè)計 3.2 數(shù)據(jù)庫設(shè)計 3.2.1 概念設(shè)計 3.2.2 邏輯設(shè)計 四、系統(tǒng)實現(xiàn) 4.1 關(guān)鍵技術(shù)實現(xiàn) 4.2 功能實現(xiàn) 五、系統(tǒng)測試 六、問題記錄 飛機(jī)票售票系統(tǒng),分為兩個角色,系統(tǒng)管理

    2024年02月09日
    瀏覽(31)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:在線寵物商城系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:在線寵物商城系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月20日
    瀏覽(31)
  • JAVA+Springboot+Thymeleaf前后端分離項目:中介房屋租賃系統(tǒng)設(shè)計與實現(xiàn)

    JAVA+Springboot+Thymeleaf前后端分離項目:中介房屋租賃系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月22日
    瀏覽(33)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:網(wǎng)上茶葉商城購物系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月22日
    瀏覽(101)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:招生報名咨詢系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:招生報名咨詢系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月19日
    瀏覽(21)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:中介房屋租賃租房系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:中介房屋租賃租房系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月22日
    瀏覽(26)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:旅游網(wǎng)站管理系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:旅游網(wǎng)站管理系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月20日
    瀏覽(103)
  • 基于Java+SpringBoot+Vue前后端分離科研項目驗收管理系統(tǒng)設(shè)計和實現(xiàn)

    基于Java+SpringBoot+Vue前后端分離科研項目驗收管理系統(tǒng)設(shè)計和實現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月09日
    瀏覽(91)
  • 基于JAVA+Springboot+Thymeleaf前后端分離項目:酒店賓館房間預(yù)訂系統(tǒng)設(shè)計與實現(xiàn)

    基于JAVA+Springboot+Thymeleaf前后端分離項目:酒店賓館房間預(yù)訂系統(tǒng)設(shè)計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計教育和輔導(dǎo)。 所有項目都配有從入門到精通的基礎(chǔ)知識視頻課程,學(xué)習(xí)后應(yīng)對畢業(yè)設(shè)計答辯。 項目配有對應(yīng)開發(fā)文檔、

    2024年02月21日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包