当前位置: 首页 > news >正文

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再与数据库交互,更新点赞数并返回结果。这样的实现方式避免了页面刷新,使得点赞功能更加流畅。

相关文章:

jsp怎么实现点赞功能

在JSP中实现点赞功能通常涉及前端页面的设计、后端逻辑处理以及数据存储。为了实现点赞功能&#xff0c;你可以使用以下步骤&#xff1a; 前端&#xff08;JSP页面&#xff09;设计 前端部分包括显示点赞按钮&#xff0c;并通过Ajax发送点赞请求&#xff0c;以避免页面刷新。 …...

取消microsoft edge作为默认浏览器 ,修改方法,默认修改不了的原因

将Microsoft Edge或其它浏览器设置为默认浏览器&#xff0c;可以尝试以下方法来解决此问题&#xff1a; 一&#xff0c; 通过浏览器设置修改&#xff1a;打开Microsoft Edge浏览器&#xff0c;单击右上角的“更多”按钮&#xff0c;然后选择“设置”。在设置页面左侧找到“默认…...

C++面试速通宝典——17

283. Nginx负载均衡算法 ‌‌‌‌  Nginx支持多种负载均衡算法。 轮询&#xff08;Round Robin&#xff09;&#xff1a;默认算法&#xff0c;按顺序逐个分配请求到后端服务器。加权轮询&#xff08;Weighted Round Robin&#xff09;&#xff1a;与轮询类似&#xff0c;但…...

10、论文阅读:基于双阶对比损失解纠缠表示的无监督水下图像增强

Unsupervised Underwater Image Enhancement Based on Disentangled Representations via Double-Order Contrastive Loss 前言引言方法介绍解耦框架多尺度生成器双阶对比损失双阶对比损失总结损失函数实验前言 在水下环境中拍摄的图像通常会受到颜色失真、低对比度和视觉质量…...

Git配置token免密登录

配置token免密登录 如果不用ssh免密登录&#xff0c;还有其他基于Token那得免密登录方法吗&#xff1f; 2021年开始&#xff0c;github就不能使用密码登录git了&#xff0c;需要使用token作为密码登录&#xff0c;需要自己在setting中创建。 那么每次都需要我手动输入token密…...

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

第二十四届 GOPS 全球运维大会暨研运数智化技术峰会上海站将于2024年10月18日-19日在上海中庚聚龙酒店召开。大会将为期2天&#xff0c;侧重大模型、DevOps、SRE、AIOps、BizDevOps、云原生及安全等热门技术领域。特设了如大模型 运维/研发测试、银行/证券数字化转型、平台工程…...

Flutter技术学习

以下内容更适用于 不拘泥于教程学习&#xff0c;而是从简单项目入手的初学者。 在开始第一个项目之前&#xff0c;我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块&#xff0c;可以是任何 UI 元素。属性 是 widget 类中定义的变量&#xff0c;用于配…...

Kubernetes网络通讯模式深度解析

Kubernetes的网络模型建立在所有Pod能够直接相互通讯的假设之上&#xff0c;这构建了一个扁平且互联的网络空间。在如GCE&#xff08;Google Cloud Engine&#xff09;等云环境中&#xff0c;这一网络模型已预先配置&#xff0c;但在自建的Kubernetes集群中&#xff0c;我们需要…...

SBTI科学碳目标是什么?有什么重要意义

SBTI&#xff08;Science Based Targets initiative&#xff09;&#xff0c;即科学碳目标倡议&#xff0c;是一个由全球环境信息研究中心&#xff08;CDP&#xff09;、联合国全球契约组织&#xff08;UNGC&#xff09;、世界资源研究所&#xff08;WRI&#xff09;和世界自然…...

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏

英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市&#xff0c;该系列专注于每瓦性能&#xff0c;比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU&#xff08;…...

MySQL 启动失败 (code=exited, status=1/FAILURE) 异常解决方案

目录 前言1. 问题描述2. 查看错误日志文件2.1 确认日志文件路径2.2 查看日志文件内容 3. 定位问题3.1 问题分析 4. 解决问题4.1 注释掉错误配置4.2 重启 MySQL 服务 5. 总结结语 前言 在日常运维和开发过程中&#xff0c;MySQL数据库的稳定运行至关重要。然而&#xff0c;MySQ…...

通信工程学习:什么是RIP路由信息协议

RIP&#xff1a;路由信息协议 RIP&#xff08;Routing Information Protocol&#xff09;路由信息协议是一种基于距离矢量算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于在自治系统&#xff08;AS&#xff09;内部进行路由信息的交换和传播。以下是关于RI…...

SQL调优指南与高级技巧:打造高效数据库查询

在当今数据驱动的世界中&#xff0c;SQL&#xff08;结构化查询语言&#xff09;作为与关系型数据库交互的主要语言&#xff0c;其性能直接影响着整个应用系统的响应速度和用户体验。本文将深入探讨SQL调优的方法论和高级技巧&#xff0c;帮助开发者和数据库管理员提升查询效率…...

实惠又好用的云手机推荐【高性价比云手机盘点】

随着云计算技术的蓬勃发展&#xff0c;云手机已经成为现代工作和生活中的重要工具。面对种类繁多的云手机产品&#xff0c;用户往往在选择时关注价格与性能的平衡。今天&#xff0c;我们就为大家推荐几款性价比高、实用性强的云手机&#xff0c;帮助你轻松选择到最适合的产品。…...

Pear Admin Flask Master开启步骤

由于我学的是数控技术&#xff0c;对编程是从小白自学的&#xff0c;在运行pearflask时一直没搞懂初始化数据库这一步是在哪里执行的&#xff0c;网上查了很多资料都没写&#xff0c;找了一天半的资料后终于查到了。 使用系统&#xff1a;Windows 10 Python版本&#xff1a;Py…...

知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。

在知识图谱开发中&#xff0c;数据格式和语义表达至关重要。本文将详细论述OWL、RDF、XML、GraphML、JSON、CSV等格式的特点、优缺点及适用场景&#xff0c;帮助读者全面理解这些数据结构及其在知识图谱中的应用。 专栏&#xff1a;知识图谱&#xff1a;从0到 ∞ 文章目录 0. 对…...

离线使用k8s部署项目

docker的安装与完全卸载&#xff08;亲测可用&#xff09; docker的安装与完全卸载 然后配置镜像加速器 vi /etc/docker/daemon.json 将找到的镜像仓库地址写入 具体内容可以参考此网站时刻更新镜像源仓库 然后保存退出 执行 systemctl daemon-reloadsystemctl restart…...

【CF2021E】Digital Village(All Version)

题目 给你一张 n n n 个点 m m m 条边的无向图&#xff0c;有 p p p 个关键点。你需要选择 k k k 个点染黑&#xff0c;使得这 p p p 个关键点到这 k k k 个黑点的代价和最小。定义代价为两点之间边权最大的边的最小值。 你需要求出 k 1,2,…,n 的所有答案 E1 n,m,p&l…...

[C++]使用纯opencv部署yolov11目标检测onnx模型

yolov11官方框架&#xff1a;https://github.com/ultralytics/ultralytics 【算法介绍】 在C中使用纯OpenCV部署YOLOv11进行目标检测是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTor…...

【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用

在 Go 语言中&#xff0c;time 包提供了强大的时间处理功能&#xff0c;适用于各种场景&#xff1a;获取当前时间、格式化和解析时间、计算时间间隔、设置定时器、处理超时等。在开发过程中&#xff0c;熟练掌握 time 包能够帮助我们轻松处理时间相关的操作&#xff0c;尤其是定…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...