2402_83870430 2024-12-16 10:19 采纳率: 0%
浏览 17

java web新闻平台系统

新闻平台系统要实现一个Web系统。系统必须要有注册登录功能,并且至少要实现基本的数据库操作(增删改查)。系统的实现需要使用我们这门课程学习的技术,包括JSP、Servlet、JDBC、EL、JSTL和过滤器。

  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2024-12-16 10:22
    关注
    让【道友老李】来帮你解答,本回答参考通义千问qwen-plus编写,并整理提供,如果还有疑问可以点击头像关注,评论或留言
    ### 新闻平台系统设计与实现

    1. 系统概述

    新闻平台系统是一个基于Web的新闻管理系统,用户可以通过该系统进行注册、登录,并对新闻进行增删改查等基本操作。系统将使用JSP、Servlet、JDBC、EL、JSTL和过滤器等技术实现。

    2. 技术栈

    • 前端:HTML, CSS, JavaScript, JSP, JSTL
    • 后端:Java, Servlet, JDBC
    • 数据库:MySQL
    • 服务器:Tomcat

    3. 系统模块

    1. 用户注册与登录
    2. 新闻管理(增删改查)

    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和过滤器等技术,确保了功能的完整性和安全性。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月16日