jsp怎么实现点赞功能

在JSP中实现点赞功能通常涉及前端页面的设计、后端逻辑处理以及数据存储。为了实现点赞功能,你可以使用以下步骤:

  1. 前端(JSP页面)设计
    前端部分包括显示点赞按钮,并通过Ajax发送点赞请求,以避免页面刷新。

示例JSP代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head><title>点赞功能</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script type="text/javascript">function likePost(postId) {$.ajax({url: 'likeServlet',type: 'POST',data: {postId: postId},success: function(response) {// 更新点赞计数$('#like-count-' + postId).text(response.likeCount);},error: function() {alert('点赞失败,请稍后再试。');}});}</script>
</head>
<body><div id="post-1"><p>这是一个帖子内容...</p><button οnclick="likePost(1)">点赞</button><span id="like-count-1">0</span> 人点赞</div>
</body>
</html>
  1. 后端(Servlet)处理点赞请求
    后端使用Servlet来处理Ajax请求,更新数据库中的点赞数并返回最新的点赞数。

示例Servlet代码(LikeServlet.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.io.PrintWriter;// 数据库连接及操作需要导入相关包
// import java.sql.Connection;
// import java.sql.PreparedStatement;
// import java.sql.ResultSet;
// import javax.sql.DataSource;@WebServlet("/likeServlet")
public class LikeServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json");PrintWriter out = response.getWriter();// 获取帖子IDString postIdStr = request.getParameter("postId");int postId = Integer.parseInt(postIdStr);// 假设数据库中已经存储了该帖子ID的点赞数int updatedLikeCount = updateLikeCount(postId);// 返回JSON格式的点赞数out.print("{\"likeCount\":" + updatedLikeCount + "}");out.flush();}private int updateLikeCount(int postId) {// 这里是伪代码,实际需要连接数据库进行点赞数更新// 假设你使用了JDBC连接数据库来处理点赞数int likeCount = 0;try {// Connection conn = dataSource.getConnection();// String sql = "UPDATE posts SET likes = likes + 1 WHERE post_id = ?";// PreparedStatement ps = conn.prepareStatement(sql);// ps.setInt(1, postId);// ps.executeUpdate();// 更新点赞后查询最新的点赞数// String query = "SELECT likes FROM posts WHERE post_id = ?";// PreparedStatement ps2 = conn.prepareStatement(query);// ps2.setInt(1, postId);// ResultSet rs = ps2.executeQuery();// if (rs.next()) {//    likeCount = rs.getInt("likes");// }// 模拟点赞数增加likeCount += 1;} catch (Exception e) {e.printStackTrace();}return likeCount;}
}
  1. 数据库设计
    点赞功能通常需要在数据库中存储每个帖子的点赞数。假设你有一个posts表,结构如下:
CREATE TABLE posts (post_id INT PRIMARY KEY,content TEXT,likes INT DEFAULT 0
);

在实现点赞时,数据库中的likes字段会记录每个帖子的点赞数,每次用户点击点赞按钮时,这个值会更新。

  1. 后端数据库交互(JDBC示例)
    要让Servlet与数据库交互,你可以使用JDBC连接。以下是简单的JDBC操作示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class DatabaseHelper {private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";private static final String DB_USER = "your_username";private static final String DB_PASSWORD = "your_password";public int getLikeCount(int postId) {int likeCount = 0;try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {String sql = "SELECT likes FROM posts WHERE post_id = ?";PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, postId);ResultSet rs = ps.executeQuery();if (rs.next()) {likeCount = rs.getInt("likes");}} catch (Exception e) {e.printStackTrace();}return likeCount;}public void incrementLikeCount(int postId) {try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {String sql = "UPDATE posts SET likes = likes + 1 WHERE post_id = ?";PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, postId);ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}}
}
  1. 总结
    通过上面的步骤,前端点击按钮后,会通过Ajax请求调用后端的Servlet,Servlet再与数据库交互,更新点赞数并返回结果。这样的实现方式避免了页面刷新,使得点赞功能更加流畅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445208.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICLR 2024 Spotlight|SEAL:面向真实场景超分辨率的系统性评估框架

研究背景 现实世界图像超分辨率&#xff08;Real-World Super-Resolution, Real-SR&#xff09;技术&#xff0c;作为提升图像清晰度的关键技术&#xff0c;正变得越来越重要。然而&#xff0c;如何准确评估Real-SR方法的性能&#xff0c;一直是该领域的一大挑战。目前的评估…

步步精科技诚邀您参加2024慕尼黑华南电子展

尊敬的客户&#xff1a; 我们诚挚地邀请您参加即将于2024年10月14日至10月16日在深圳国际会展中心 &#xff08;宝安新馆&#xff09;举办的慕尼黑华南电子展(electronica South China)。本届将聚焦人工智能、数据中心、新型储能、无线通信、硬件安全、新能源汽车、第三代半导…

云原生(四十四) | 远程连接ECS服务器

文章目录 远程连接ECS服务器 一、自带连接工具连接ECS云服务器 二、为什么要使用远程连接工具 三、远程连接ECS服务器四要素 1、用户名 密码 2、IP地址&#xff08;公网IP&#xff09; 3、SSH端口号 4、阿里云安全组 四、使用MobaXterm远程连接ECS云服务器 五、ECS云…

讯飞星火与昇腾AI双向奔赴:本土化技术创新应对全球化挑战的一次成功验证

文 | 智能相对论 作者 | 陈泊丞 2019年&#xff0c;彼时的AI赛道还不像今天这么热。 这一年&#xff0c;人工智能连续第三年出现在政府工作报告中&#xff0c;政策关键词从“加快”“加强”转变为“深化”&#xff0c;开始进入行业需求快速增长的应用探索期。而华为也在这个…

爬虫(反调试)

其实就是一种给页面反爬机制&#xff0c;一般页面用不到。 万能解决反调试方法&#xff1a;

vue-插槽作用域实用场景

vue-插槽作用域实用场景 1.插槽1.1 自定义列表渲染1.2 数据表格组件1.3 树形组件1.4 表单验证组件1.5 无限滚动组件 1.插槽 插槽感觉知道有这个东西&#xff0c;但是挺少用过的&#xff0c;每次看到基本都会再去看一遍用法和概念。但是在项目里&#xff0c;自己还是没有用到过…

查看 Excel 应用程序中已打开的 Excel 文件的完整路径

要查看 Excel 应用程序中已打开的 Excel 文件的完整路径&#xff08;全路径&#xff09;&#xff0c;你可以通过以下几种方法获取具体路径&#xff0c;尤其是在 VSTO 应用程序中。 方法1&#xff1a;使用 VSTO Excel 外接程序代码 在 VSTO 外接程序代码中&#xff0c;您可以直接…

海外市场充电桩需求激增:充电基础设施展望

报告显示&#xff0c;在大多数欧盟国家的路网中&#xff0c;充电桩数量存在不足、不支持快速充电且分布不均匀的问题。具体而言&#xff0c;有6个欧洲国家的平均每百公里充电桩数量不足1个&#xff0c;17个国家的平均每百公里充电桩数量少于5个&#xff0c;仅有5个国家的平均每…

计算机网络之传输层

一、传输层提供的服务 1、传输层的功能 向上面的应用层提供通信服务&#xff0c;属于面向通信的最高层&#xff0c;用户功能的最低层。传输层为运行在不同主机上的进程中间提供了逻辑通信&#xff0c;网络层提供主机之间的逻辑通信。边缘部分两台主机使用网络核心部分的功能进…

网络编程(15)——服务器如何主动退出

十五、day15 服务器主动退出一直是服务器设计必须考虑的一个方向&#xff0c;旨在能通过捕获信号使服务器安全退出。我们可以通过asio提供的信号机制绑定回调函数即可实现优雅退出。 之前服务器的主函数如下 #include "CSession.h" #include "CServer.h"…

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…

Ngx+Lua+Redis 实时IP黑名单系统

实时黑名单系统&#xff0c;如果用php脚本实现很容易&#xff0c;但是效率惨不忍睹呀。 要想速度快还的在nginx层实现阻塞。如果iptables 层阻塞速度更快&#xff0c;但是黑名单列表如果有更新就必须要重载配置&#xff0c;实现还是有难度的。php管理后台把黑名单ip写入到redis…

万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快速成为AI大神

用AIdify完成前后端开发数据处理和数据清洗。 引言数据获取和数据处理dify构建workflow进行数据清洗前端页面构建和前后端交互总结 引言 AI时代对开发人员的加强是非常明显的&#xff0c;一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践…

生信初学者教程(二十八):单细胞数据标准化

文章目录 介绍加载R包导入数据消除测序深度影响评估细胞周期的影响识别高度可变的特征缩放数据降维聚类输出结果总结介绍 scRNA-seq的标准化是一个重要的预处理步骤,目的是消除技术变异(比如比如测序深度和基因长度等因素),使基因表达和/或样本之间的比较更加可靠。标准化方…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

Java 日志打印

使用日志打印&#xff1a; private static Logger log LoggerFactory.getLogger(DeptController.class);RequestMapping("/depts")public Result list() { // System.out.println("查询全部部门数据");log.info("查询全部部门数据");ret…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…

线程池简单原理

设置了isRun导致任务没有执行完是因为子线程在消费队列的时候的run内while循环取队列的值&#xff0c;如果isRun为flase会停掉所有线程&#xff0c;解决是不仅isRun为false还要求队列的数据10个全取出队列大小为0. 当线程池队列满的时候任务会不会丢 可以使用默认的rejectExc…

Superset SQL模板使用

使用背景 有时想让表的时间索引生效&#xff0c;而不是在最外层配置报表时&#xff0c;再套多一层时间范围。这时可以使用SQL模板 参考官方文档 https://superset.apache.org/docs/configuration/sql-templating/#:~:textSQL%20Lab%20and%20Explore%20supports%20Jinja 我…