基于jsp+servlet实现的简单博客系统实例(附源码)

这篇文章将会详细讲解如何通过使用JSP和Servlet来实现一个简单的博客系统。我们将会从搭建环境开始,到完成整个系统的构建。

这篇文章将会详细讲解如何通过使用JSP和Servlet来实现一个简单的博客系统。我们将会从搭建环境开始,到完成整个系统的构建。

环境搭建

工具准备

在开始之前,我们需要准备以下工具:

  • Java SE Development Kit(JDK)
  • Eclipse IDE for Java EE Developers
  • Tomcat服务器

创建项目

  1. 打开Eclipse,选择File -> New -> Dynamic Web Project。
  2. 给项目命名为“BlogSystem”,选择Target runtime为之前下载的Tomcat服务器。
  3. 点击Next,选择Generate web.xml deployment descriptor。
  4. 点击Finish。

添加Jar包

我们需要通过添加一些必要的Jar包来构建博客系统,具体步骤如下:

  1. 在Eclipse中的Package Explorer视图中选择“BlogSystem”项目,右键点击并选择Properties。
  2. 选择Java Build Path,点击Libraries选项卡,然后点击Add Library。
  3. 选择Server Runtime,然后点击Next。
  4. 选择你的Tomcat容器,然后点击Finish。

创建数据库

我们会使用MySQL数据库存储博客信息。下面是创建数据库并插入一些数据的示例SQL语句:

create database blog_system;

use blog_system;

create table if not exists posts (
  id int(11) not null auto_increment,
  title varchar(255) not null,
  content text not null,
  created_at timestamp default current_timestamp,
  primary key (id)
);

insert into posts values (1, '第一篇博客', '这是我的第一篇博客', now());
insert into posts values (2, '第二篇博客', '这是我的第二篇博客', now());

博客系统实现

创建JSP页面

我们需要创建以下JSP页面,用于展示博客信息:

  • index.jsp - 展示所有博客列表。
  • show.jsp - 展示一篇博客的详细信息。
  • new.jsp - 创建一篇新博客的表单。

所有的页面都将依赖于一个公共的头部和尾部。这些公共元素将被存储在includes/header.jsp和includes/footer.jsp中。

index.jsp

index.jsp将展示所有博客列表,我们需要使用JSTL标签来获取数据和渲染页面。下面是index.jsp的源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ include file="includes/header.jsp" %>

<h2>All Posts</h2>

<p><a href="new.jsp">New Post</a></p>

<table>
  <tr>
    <th>Title</th>
    <th>Created At</th>
  </tr>

  <c:forEach var="post" items="${posts}">
    <tr>
      <td><a href="show.jsp?id=${post.id}">${post.title}</a></td>
      <td>${post.created_at}</td>
    </tr>
  </c:forEach>
</table>

<%@ include file="includes/footer.jsp" %>

我们使用了c:foreach标签来遍历每一篇博客,并展示它们的标题和创建时间。每篇博客的标题都是一个链接,点击链接可跳转到相应的show.jsp页面。

show.jsp

show.jsp用于展示一篇博客的详细信息。下面是show.jsp的源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ include file="includes/header.jsp" %>

<c:set var="id" value="${param.id}" />

<c:forEach var="post" items="${posts}">
  <c:if test="${post.id == id}">
    <h2>${post.title}</h2>
    <p>${post.created_at}</p>
    <p>${post.content}</p>
  </c:if>
</c:forEach>

<%@ include file="includes/footer.jsp" %>

我们使用了c:set标签来获取post的编号,之后使用c:if标签把与该编号匹配的博客展示出来,包括标题、创建时间和详细内容。

new.jsp

new.jsp用于创建一篇新博客的表单。下面是new.jsp的源代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ include file="includes/header.jsp" %>

<h2>New Post</h2>

<form action="create_post" method="POST">
  <label for="title">Title:</label>
  <input type="text" name="title"><br>

  <label for="content">Content:</label>
  <textarea name="content"></textarea><br>

  <input type="submit" value="Create">
</form>

<%@ include file="includes/footer.jsp" %>

我们使用了一个简单的表单来收集博客的标题和内容,并通过POST方法把它们发送到create_post Servlet。

创建Servlet

我们需要创建Servlet类来处理来自JSP页面的请求。下面是我们需要实现的两个Servlet:

  • PostsController - 处理展示所有博客列表的请求和展示一篇博客详细信息的请求。
  • NewPostController - 处理创建一篇新博客的请求。

PostsController

PostsController作为Servlet类会处理来自index.jsp和show.jsp的请求。下面是PostsController的源代码:

package com.blogsystem.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.blogsystem.model.Post;

public class PostsController extends HttpServlet {
  private static final long serialVersionUID = 1L;

  private Connection connection;

  public PostsController() throws SQLException {
    super();

    String url = "jdbc:mysql://localhost:3306/blog_system";
    String username = "root";
    String password = "";

    this.connection = DriverManager.getConnection(url, username, password);
  }

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
      List<Post> posts = new ArrayList<Post>();

      PreparedStatement statement = this.connection.prepareStatement("SELECT * FROM posts");
      ResultSet result = statement.executeQuery();

      while (result.next()) {
        Post post = new Post();
        post.setId(result.getInt("id"));
        post.setTitle(result.getString("title"));
        post.setContent(result.getString("content"));
        post.setCreatedAt(result.getTimestamp("created_at"));

        posts.add(post);
      }

      request.setAttribute("posts", posts);
      request.getRequestDispatcher("/index.jsp").forward(request, response);

    } catch (SQLException e) {
      e.printStackTrace();
      response.getWriter().append("Error: " + e.getMessage());
    }
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 暂不需要实现
  }
}

我们连接MySQL数据库,然后从数据库中检索出博客信息,并通过request.setAttribute把它们作为一个List,传递到index.jsp页面。

NewPostController

NewPostController作为Servlet类会处理来自new.jsp的请求。下面是NewPostController的源代码:

package com.blogsystem.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NewPostController extends HttpServlet {
  private static final long serialVersionUID = 1L;

  private Connection connection;

  public NewPostController() throws SQLException {
    super();

    String url = "jdbc:mysql://localhost:3306/blog_system";
    String username = "root";
    String password = "";

    this.connection = DriverManager.getConnection(url, username, password);
  }

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/new.jsp").forward(request, response);
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
      String title = request.getParameter("title");
      String content = request.getParameter("content");

      PreparedStatement statement = this.connection.prepareStatement("INSERT INTO posts (title, content) VALUES (?, ?)");
      statement.setString(1, title);
      statement.setString(2, content);
      statement.executeUpdate();

      response.sendRedirect(request.getContextPath() + "/");

    } catch (SQLException e) {
      e.printStackTrace();
      response.getWriter().append("Error: " + e.getMessage());
    }
  }
}

我们使用doGet方法来展示填写新博客的表单,使用doPost方法来存储新博客的信息到数据库中,最后重定向到index.jsp页面。

部署项目

我们完成了博客系统的代码编写,现在需要在Tomcat服务器上部署它。下面是具体步骤:

  1. 右键点击“BlogSystem”项目,选择Export -> WAR file。
  2. 选择Export destination和Finish,保存WAR文件。
  3. 在Tomcat服务器的webapps目录中创建BlogSystem文件夹。
  4. 把WAR文件复制到BlogSystem文件夹中。
  5. 启动Tomcat服务器并访问http://localhost:8080/BlogSystem。

现在你可以看到展示博客列表的index.jsp页面和创建新博客的new.jsp页面!

总结

到这里,我们已经实现了一个基于JSP和Servlet的简单博客系统。本文展示的示例代码只是一个基础的实现,你可以在此基础上添加更多的功能,如编辑博客、添加标签、用户认证等等。

希望这篇攻略能对你学习JSP和Servlet有所帮助!

本文标题为:基于jsp+servlet实现的简单博客系统实例(附源码)