新闻平台系统要实现一个Web系统。系统必须要有注册登录功能,并且至少要实现基本的数据库操作(增删改查)。系统的实现需要使用我们这门课程学习的技术,包括JSP、Servlet、JDBC、EL、JSTL和过滤器。
2条回答 默认 最新
关注让【道友老李】来帮你解答,本回答参考通义千问qwen-plus编写,并整理提供,如果还有疑问可以点击头像关注,评论或留言
### 新闻平台系统设计与实现1. 系统概述
新闻平台系统是一个基于Web的新闻管理系统,用户可以通过该系统进行注册、登录,并对新闻进行增删改查等基本操作。系统将使用JSP、Servlet、JDBC、EL、JSTL和过滤器等技术实现。
2. 技术栈
- 前端:HTML, CSS, JavaScript, JSP, JSTL
- 后端:Java, Servlet, JDBC
- 数据库:MySQL
- 服务器:Tomcat
3. 系统模块
- 用户注册与登录
- 新闻管理(增删改查)
4. 数据库设计
假设数据库名为
news_platform,包含以下表:-
users 表
id(INT, 主键, 自增)username(VARCHAR)password(VARCHAR)email(VARCHAR)
-
news 表
id(INT, 主键, 自增)title(VARCHAR)content(TEXT)author(VARCHAR)created_at(DATETIME)
5. 详细设计与实现
5.1 用户注册与登录
5.1.1 注册页面 (
register.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册</title> </head> <body> <h1>用户注册</h1> <form action="RegisterServlet" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password" required><br><br> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required><br><br> <input type="submit" value="注册"> </form> </body> </html>5.1.2 注册处理 (
RegisterServlet.java)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; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet("/RegisterServlet") public class RegisterServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); try (Connection conn = DatabaseConnection.getConnection()) { String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); pstmt.setString(3, email); pstmt.executeUpdate(); response.sendRedirect("login.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } }5.1.3 登录页面 (
login.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录</title> </head> <body> <h1>用户登录</h1> <form action="LoginServlet" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password" required><br><br> <input type="submit" value="登录"> </form> </body> </html>5.1.4 登录处理 (
LoginServlet.java)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.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); try (Connection conn = DatabaseConnection.getConnection()) { String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("news_list.jsp"); } else { response.sendRedirect("login.jsp?error=true"); } } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } }5.2 新闻管理
5.2.1 新闻列表页面 (
news_list.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>新闻列表</title> </head> <body> <h1>新闻列表</h1> <a href="add_news.jsp">添加新闻</a> <table border="1"> <tr> <th>ID</th> <th>标题</th> <th>内容</th> <th>作者</th> <th>创建时间</th> <th>操作</th> </tr> <c:forEach var="news" items="${newsList}"> <tr> <td>${news.id}</td> <td>${news.title}</td> <td>${news.content}</td> <td>${news.author}</td> <td>${news.created_at}</td> <td> <a href="EditNewsServlet?id=${news.id}">编辑</a> <a href="DeleteNewsServlet?id=${news.id}">删除</a> </td> </tr> </c:forEach> </table> </body> </html>5.2.2 添加新闻页面 (
add_news.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>添加新闻</title> </head> <body> <h1>添加新闻</h1> <form action="AddNewsServlet" method="post"> <label for="title">标题:</label> <input type="text" id="title" name="title" required><br><br> <label for="content">内容:</label> <textarea id="content" name="content" required></textarea><br><br> <label for="author">作者:</label> <input type="text" id="author" name="author" required><br><br> <input type="submit" value="提交"> </form> </body> </html>5.2.3 添加新闻处理 (
AddNewsServlet.java)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; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet("/AddNewsServlet") public class AddNewsServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String title = request.getParameter("title"); String content = request.getParameter("content"); String author = request.getParameter("author"); try (Connection conn = DatabaseConnection.getConnection()) { String sql = "INSERT INTO news (title, content, author, created_at) VALUES (?, ?, ?, NOW())"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, title); pstmt.setString(2, content); pstmt.setString(3, author); pstmt.executeUpdate(); response.sendRedirect("news_list.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } }5.2.4 编辑新闻页面 (
edit_news.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.sql.*" %> <% int id = Integer.parseInt(request.getParameter("id")); Connection conn = DatabaseConnection.getConnection(); String sql = "SELECT * FROM news WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); rs.next(); %> <html> <head> <title>编辑新闻</title> </head> <body> <h1>编辑新闻</h1> <form action="UpdateNewsServlet" method="post"> <input type="hidden" name="id" value="<%= id %>"> <label for="title">标题:</label> <input type="text" id="title" name="title" value="<%= rs.getString("title") %>" required><br><br> <label for="content">内容:</label> <textarea id="content" name="content" required><%= rs.getString("content") %></textarea><br><br> <label for="author">作者:</label> <input type="text" id="author" name="author" value="<%= rs.getString("author") %>" required><br><br> <input type="submit" value="提交"> </form> </body> </html>5.2.5 编辑新闻处理 (
UpdateNewsServlet.java)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; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet("/UpdateNewsServlet") public class UpdateNewsServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); String title = request.getParameter("title"); String content = request.getParameter("content"); String author = request.getParameter("author"); try (Connection conn = DatabaseConnection.getConnection()) { String sql = "UPDATE news SET title = ?, content = ?, author = ? WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, title); pstmt.setString(2, content); pstmt.setString(3, author); pstmt.setInt(4, id); pstmt.executeUpdate(); response.sendRedirect("news_list.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } }5.2.6 删除新闻处理 (
DeleteNewsServlet.java)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; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet("/DeleteNewsServlet") public class DeleteNewsServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); try (Connection conn = DatabaseConnection.getConnection()) { String sql = "DELETE FROM news WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); pstmt.executeUpdate(); response.sendRedirect("news_list.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } }5.3 过滤器
为了确保用户在访问新闻管理页面时已经登录,可以使用过滤器进行拦截。
5.3.1 过滤器实现 (
AuthFilter.java)import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebFilter("/news_list.jsp") public class AuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; HttpSession session = req.getSession(false); if (session == null || session.getAttribute("username") == null) { res.sendRedirect("login.jsp"); } else { chain.doFilter(request, response); } } @Override public void destroy() { } }6. 数据库连接工具类 (
DatabaseConnection.java)import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { private static final String URL = "jdbc:mysql://localhost:3306/news_platform"; private static final String USER = "root"; private static final String PASSWORD = "password"; static { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } }7. 总结
通过上述设计和实现,新闻平台系统具备了用户注册、登录功能,并实现了新闻的增删改查操作。系统使用了JSP、Servlet、JDBC、EL、JSTL和过滤器等技术,确保了功能的完整性和安全性。
解决 无用评论 打赏 举报