基于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实现的简单博客系统实例(附源码) - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring Security的过滤器链机制

    Spring Security 是 Spring 提供的一个重要的安全框架,可以方便地实现安全认证和授权等功能。其中最核心的特性是 Spring Security 的过滤器链机制。 什么是过滤器链 Spring Security 的过滤器链机制是指将一组过滤器串联起来,对指定的请求进行逐个过滤处理,以完成功能的实现和安全保障。 Spring Security…

    Java 2023年5月20日
    00
  • Java使用POI实现导出Excel的方法详解

    首先我们来讲解一下Java使用POI实现导出Excel的方法详解。 一、POI介绍 Apache POI是Apache软件基金会的开源项目,是用于Java编程语言处理Microsoft Office格式文件的开源库。POI提供API给用户对Excel、Word和PowerPoint等文件进行读和写的功能。POI提供了对Excel 97-2003及Excel …

    Java 2023年5月26日
    00
  • Java实现搜索功能代码详解

    Java实现搜索功能代码详解 在Java Web应用程序开发中,搜索功能通常是必不可少的一个功能。本文将介绍如何使用Java实现搜索功能,包括搜索框处理、全文搜索等功能。 处理搜索框请求 在Java Web应用程序中,处理搜索功能的第一步是处理搜索框的请求。搜索框通常是一个包含输入框和提交按钮的HTML表单。例如,以下是一个简单的搜索框: <form …

    Java 2023年5月18日
    00
  • SpringBoot自定义Starter与自动配置实现方法详解

    SpringBoot自定义Starter与自动配置实现方法详解 什么是SpringBoot Starter SpringBoot Starter是一种用于扩展SpringBoot框架功能的一种技术手段,它可以将应用程序中涉及到的依赖库集成到SpringBoot环境中,使得应用程序更加简单、灵活且易于扩展。 Starter的实现过程主要有自定义Starter和…

    Java 2023年5月20日
    00
  • Window下安装Tomcat服务器的教程

    下面是详细的“Window下安装Tomcat服务器的教程”攻略: 环境准备 Tomcat服务器下载 首先,需要从官网下载Tomcat服务器的安装包。Tomcat官网地址:http://tomcat.apache.org/ 在页面选择“Downloads” -> “Tomcat 10” -> “64-bit Windows zip”进行下载。 Ja…

    Java 2023年5月19日
    00
  • RocketMQ ConsumeQueue与IndexFile实时更新机制源码解析

    RocketMQ ConsumeQueue与IndexFile实时更新机制源码解析 RocketMQ是一个高性能、高可靠、可伸缩、分布式的消息中间件。在消息投递和消费的过程中,RocketMQ的ConsumeQueue与IndexFile起到了至关重要的作用,本篇文章将对其实时更新机制进行源码解析。 ConsumeQueue介绍 ConsumeQueue是R…

    Java 2023年5月20日
    00
  • 七个Spring核心模块详解

    下面是关于“七个Spring核心模块详解”的完整攻略,包含两个示例说明。 七个Spring核心模块详解 Spring框架是一个开源的JavaEE应用程序框架,它提供了一系列的核心模块,用于简化企业级应用程序的开发。下面我们将详细介绍Spring框架的七个核心模块。 1. Spring Core Spring Core是Spring框架的核心模块,它提供了Io…

    Java 2023年5月17日
    00
  • java中int初始化可以为0,但不能为NULL问题

    在Java中,int类型的变量可以被初始化为0,但不能被初始化为NULL。这是因为在Java中,int是原始数据类型,而NULL是引用数据类型的特殊值,不适用于原始数据类型的变量。 如果我们试图初始化一个int变量为NULL,将会得到一个编译时错误: int a = NULL; // 编译报错 相反,我们可以将int变量初始化为0: int a = 0; 在…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部