博客系統(tǒng)
前言
基于servlet+jdbc進(jìn)行后端開發(fā),設(shè)計了一個可以發(fā)布博客,查看博客詳情,刪除博客,登錄注銷功能的簡易博客系統(tǒng)。
1. 前端
1.1 登陸頁面
1.2 博客列表頁面
1.3 博客詳情頁面
1.4 博客編輯頁面
2. 后端
2.1 項目部署
2.1.1 創(chuàng)建maven項目
我們在idea里面點擊new project創(chuàng)建一個maven項目,然后一路next選擇好項目位置以及命名即可。
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文件
代碼 : 以下是我部署的依賴可以直接復(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)以及名字不能改動。
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)行。
然后點擊新增運(yùn)行配置,將Smart Tomcat加入,此處選擇Tomcat路徑,如果還沒有下載Tomcat,可以通過官網(wǎng)下載。博主使用的是 3.1版本的servlet+tomcat 8 。
然后就可以點擊運(yùn)行:出現(xiàn)以下結(jié)果就是部署成功了。之后我們就可以通過127.0.0.1:8080/MessageWall/xx.html(html頁面)訪問,其中MessageWall是Context path,一般默認(rèn)是項目名。
2.2 邏輯設(shè)計
2.2.1 數(shù)據(jù)庫設(shè)計
我們博客系統(tǒng)主要有用戶登錄以及編寫博客的功能,基于此需求在當(dāng)前博客系統(tǒng)中主要涉及兩個實體,博客和用戶,所以我們需要創(chuàng)建兩張表用于存儲博客和用戶信息。
注意:用戶與博客之間是一對多的關(guān)系;以下設(shè)計blog表和user表
- blog表包含blogId,title,content,postTime,userId屬性;
- user表包含userId,userName,password;
- 通過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)如下:文章來源:http://www.zghlxwxcb.cn/news/detail-619793.html
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)!