JSP 技术仿写 CSDN 社区

用 JSP 技术搞出个假 CSDN

关键词:软件工程课设、网页设计与网站建设(JSP)实验、网页设计与网站建设(JSP)课设、课程设计、完整源码,可运行,运行截图。


课程设计名称

CPPSDN 仿 CSDN 实现一个在线技术社区。

需求

完成 CPPSDN 在线平台,让技术爱好者和专业人士可以分享知识、交流经验和互相学习。通过这个网站,用户可以发布技术文章、参与讨论等活动,以扩展自己的技术知识和技能。

目的

通过 CPPSDN 实践,深入了解 JSP 技术的基本概念、原理和应用。提高自己的编程能力和 Web 应用开发技能,加深对 Web 技术的理解和应用。通过实现具体的 CPPSDN 网站,掌握 JSP 技术的基本要素,如 Servlet 和 JSP 页面的交互方式、JSP 标签、表达式和脚本等。同时,JSP 实验还可以让学生了解 JSP 技术与其他 Web 技术,如 HTML、CSS、JavaScript、JDBC 和 SQL 等的关系和配合使用。

概要设计

用户管理

用户登录与退出:系统应该提供用户名和密码验证机制,用于验证用户的身份。实现用户鉴权登录和退出。

用户界面设计:系统应该提供友好的用户界面,让用户能够轻松使用各种功能。

文章管理

文章发布:系统应该允许用户发布文章,包括标题、内容、作者等信息。

文章修改:系统应该允许文章的作者对已发布的文章进行修改和编辑。

文章查询:系统应该提供查询文章的功能,包括按关键词等条件查询文章。

用户界面设计:系统应该提供友好的用户界面,让用户能够轻松使用各种功能。

详细设计

用户管理
  • 用户登录与退出

用户登录首先从请求参数中获取用户名和密码,然后使用 JDBC API 连接 MySQL 数据库,查询指定用户名的用户记录。如果找到对应的记录并且密码匹配,则将用户信息保存到会话(Session)中,并返回一个成功的结果,否则返回一个失败的结果。最后,将结果对象设置到请求属性中,转发请求到 “/frame/toast.jsp” 页面。

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     var username = req.getParameter("username");
     var password = req.getParameter("password");
     var found = false;

     try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/csdn", "root",
             "123456")) {
         String sql = "SELECT * FROM users WHERE username = ?";
         PreparedStatement stmt = conn.prepareStatement(sql);
         stmt.setString(1, username);
         ResultSet rs = stmt.executeQuery();

         while (rs.next()) {
             if (username.equals(rs.getString("username")) && password.equals(rs.getString("password"))) {
                 req.getSession().setAttribute("user",
                         new BeanUser(rs.getInt("id"), username, password, rs.getString("avatar")));
                 found = true;
                 break;
             }
         }
     } catch (SQLException e) {
         System.out.println("SQLException: " + e.getMessage());
     }
     if (!found) {
         req.setAttribute("rsp", new BeanResult("-1", "账号或密码错误"));
     } else {
         req.setAttribute("rsp", new BeanResult("0", ""));
     }
     req.getRequestDispatcher("/frame/toast.jsp").forward(req, resp);
 }

用户登录退出从会话(Session)中移除名为 “user” 的属性,然后获取请求头中的 “referer” 属性,将其转换为 URL 对象,并从中获取路径信息。最后,使用 sendRedirect 方法将请求重定向到获取到的路径。

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      req.getSession().removeAttribute("user");
      var url = new URL(req.getHeader("referer"));
      resp.sendRedirect(url.getPath());
  }
  • 用户界面设计

首页使用 JSP 标签引入了一个名为 header.jsp 的页面,该页面用于展示页面头部,例如网站名称、导航菜单等。使用 HTML 5 中的 section 元素来定义一个文章列表的区域,并定义一个名为 articles 的表单,用于向服务器请求文章列表的数据。

如果用户未登录,则显示登录链接。当点击登录链接时,弹出登录模态框,用户可以输入用户名和密码进行登录。当用户点击登录时,表单会提交到 “/login” 这个 URL,并在 “frame-login” 这个 iframe 中进行提交。在表单的下方,还有一个 “忘记密码” 的链接。当用户点击 “忘记密码” 时,可以执行一些 JavaScript 代码来进行密码找回等操作。

如果用户已经登录,则显示用户头像和下拉菜单,包含个人中心、内容管理、退出等链接。

文章管理
  • 文章发布与修改

从当前用户的 session 中获取 BeanUser 对象,以确定当前用户的身份。然后,从 HTTP 请求中获取文章的标题、内容和 ID(如果有的话)。使用 JDBC 连接到 MySQL 数据库,将更新或创建文章的 SQL 语句作为 PreparedStatement 对象创建,并使用用户提供的数据填充占位符。最后,通过执行 SQL 语句更新或创建文章。

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     var user = (BeanUser) req.getSession().getAttribute("user");
     var content = req.getParameter("content").replaceAll("`", "\\\\`");;
     var id = req.getParameter("id");
     var title = req.getParameter("title");
     try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/csdn", "root",
             "123456")) {
         if (id != null && !id.isEmpty()) {
             String sql = "UPDATE articles SET content = ?, title = ? WHERE user_id = ? AND id = ?";
             PreparedStatement stmt = conn.prepareStatement(sql);
             stmt.setString(1, content);
             stmt.setString(2, title);
             stmt.setLong(3, user.getId());
             stmt.setString(4, id);
             stmt.executeUpdate();
         } else {
             String sql = "INSERT INTO articles (title, content, user_id) VALUES (?, ?, ?)";
             PreparedStatement stmt = conn.prepareStatement(sql);
             stmt.setString(1, title);
             stmt.setString(2, content);
             stmt.setLong(3, user.getId());
             stmt.executeUpdate();
         }

     } catch (SQLException e) {
         System.out.println("SQLException: " + e.getMessage());
     }
     resp.sendRedirect("/mp_blog/manage/article");
 }

  • 文章查询

创建一个空的文章列表,然后使用JDBC连接到MySQL数据库,并执行一个SELECT语句来查询数据库中的所有文章。查询结果将存储在ResultSet对象中,通过循环遍历ResultSet,将每个文章的id、标题、内容和用户id封装成一个BeanArticle对象,并添加到文章列表中。最后,将查询结果和文章列表添加到请求对象的属性中,转发到"/frame/article.jsp"页面进行展示。

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     List<BeanArticle> articles = new ArrayList<>();
     try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/csdn", "root",
             "123456")) {
         PreparedStatement stmt = conn.prepareStatement("SELECT * FROM articles");
         ResultSet rs = stmt.executeQuery();
         while (rs.next()) {
             long id = rs.getLong("id");
             String title = rs.getString("title");
             String content = rs.getString("content");
             Long userId = rs.getLong("user_id");
             articles.add(new BeanArticle(id, title, content, userId));
         }
     } catch (SQLException e) {
         req.setAttribute("rsp", new BeanResult("-1", "查询文章失败"));
         System.out.println("SQLException: " + e.getMessage());
         req.getRequestDispatcher("/frame/article.jsp").forward(req, resp);
     }
     req.setAttribute("rsp", new BeanResult("0", ""));
     req.setAttribute("articles", articles);
     req.getRequestDispatcher("/frame/article.jsp").forward(req, resp);
 }

  • 用户界面设计

发布和更改包含一个表单,分为左右两边,左边输入,右边预览。通过发布文章按钮提交表单。

文章查询页面是一个简单的博客文章列表,其中每篇文章都有一个标题和“编辑”和“浏览”链接,用户可以单击这些链接以编辑或浏览文章。<c:if>标签测试请求方法是否为“POST”,如果是,则显示“编辑”链接,其中onclick属性是一个JavaScript函数,将页面重定向到URL“/md?id=article.id”。

心得

独立完成了 CPPSDN 在线平台的编写,深入了解 JSP 技术的基本概念、原理和应用。提高自己的编程能力和 Web 应用开发技能,加深对 Web 技术的理解和应用。通过实现具体的 CPPSDN 网站,掌握 JSP 技术的基本要素,如 Servlet 和 JSP 页面的交互方式、JSP 标签、表达式和脚本等。同时,JSP 实验还可以让学生了解 JSP 技术与其他 Web 技术,如 HTML、CSS、JavaScript、JDBC 和 SQL 等的关系和配合使用。

附件

源码

【CPPSDN】

可运行文件

Download: 【CPPSDN】
GitCode: 【CPPSDN】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值