这篇文章将会详细讲解如何通过使用JSP和Servlet来实现一个简单的博客系统。我们将会从搭建环境开始,到完成整个系统的构建。
环境搭建
工具准备
在开始之前,我们需要准备以下工具:
- Java SE Development Kit(JDK)
- Eclipse IDE for Java EE Developers
- Tomcat服务器
创建项目
- 打开Eclipse,选择File -> New -> Dynamic Web Project。
- 给项目命名为“BlogSystem”,选择Target runtime为之前下载的Tomcat服务器。
- 点击Next,选择Generate web.xml deployment descriptor。
- 点击Finish。
添加Jar包
我们需要通过添加一些必要的Jar包来构建博客系统,具体步骤如下:
- 在Eclipse中的Package Explorer视图中选择“BlogSystem”项目,右键点击并选择Properties。
- 选择Java Build Path,点击Libraries选项卡,然后点击Add Library。
- 选择Server Runtime,然后点击Next。
- 选择你的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服务器上部署它。下面是具体步骤:
- 右键点击“BlogSystem”项目,选择Export -> WAR file。
- 选择Export destination和Finish,保存WAR文件。
- 在Tomcat服务器的webapps目录中创建BlogSystem文件夹。
- 把WAR文件复制到BlogSystem文件夹中。
- 启动Tomcat服务器并访问http://localhost:8080/BlogSystem。
现在你可以看到展示博客列表的index.jsp页面和创建新博客的new.jsp页面!
总结
到这里,我们已经实现了一个基于JSP和Servlet的简单博客系统。本文展示的示例代码只是一个基础的实现,你可以在此基础上添加更多的功能,如编辑博客、添加标签、用户认证等等。
希望这篇攻略能对你学习JSP和Servlet有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于jsp+servlet实现的简单博客系统实例(附源码) - Python技术站