项目-Java Web购物车-JSP实现

article/2025/10/17 23:01:11

文章目录

  • 源码地址
  • 界面演示
  • 目录结构
  • 准备工作
  • 登录注册功能
  • 定义Dao
    • BaseDao
    • ProductDaoImp
  • 定义Entity
    • Product
    • CartItem
  • 商品列表与详情界面
  • ★购物车页面
  • 更多

源码地址

点击文章底部打赏后私信发送源码地址
在这里插入图片描述

界面演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


介绍(旧)

浏览器打开http://localhost:8080/ShopCart/login.jsp,即可得到如下界面在这里插入图片描述
点击登录(用户名与密码已经在数据库中存在),直接跳到商品列表界面
在这里插入图片描述
点击商品,然后跳转到商品详情界面,这里有个放大图片的效果
在这里插入图片描述
点击加入购物车,跳转到购物车界面,如下图:
在这里插入图片描述

目录结构

在这里插入图片描述
src展开如下图:
在这里插入图片描述

准备工作

创建数据库shop,然后运行SQL文件,通过ShopCart.sql创建,完成后如下图,包含两个表user与product:
在这里插入图片描述
在这里插入图片描述
通过IDE导入项目,然后以tomcat运行

登录注册功能

前端登录页面 login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html>
<head>
<title>login</title>
<link href="css/semantic.css"rel="stylesheet">
</head>
<body><!-- <p1>test!</p1> --><br><br><br><div class="loginpage"><br> <br> <br><h2 align="center">欢迎登录</h2><!--do_login.jsp  --><form name=loginForm action="<%= request.getContextPath() %>/PostServlet" method=post><table align="center"><tr><td>用户名:</td><td><div class="ui input focus"><input type="text" placeholder="" name=username></div></td></tr><tr><td>密码:</td><td><div class="ui input focus"><input type="password" placeholder="" name=pwd></div></td><tr /><br></table><div class="submit-p"><div class="submit-button"><input type="submit" value="login" class="ui primary button" /></div><div class="reset-button"><input type="reset" value="reset" class="ui button" /></div></div></form></div><style>
.loginpage {/*height: 300px;*//*padding-bottom: 64px;*//*height: 500px;*//*position: relative;*/height: 400px;border: 1px solid #d7d7d7;box-shadow: 0 0 20px #d7d7d7;background-color: #fff;position: absolute;width: 382px;color: #818181;margin: 80px auto;position: absolute;left: 0;right: 0;
}.submit-button {display: inline;
}.reset-button {display: inline;
}.submit-p {margin-left: 120px;margin-top:20px;
}
</style>
</body>
</html>

登录逻辑处理代码: doLogin.jsp (用jsp实现,没有用servlet), 用户名与密码都正确后跳转到 list.jsp .

<%@ page language="java" import="dao.*,entity.*,java.util.*,java.sql.*"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%String users = request.getParameter("username");String pass = request.getParameter("pwd");boolean flag = false;PreparedStatement sql = null;ResultSet rs = null;Connection conn = null;
%><%String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://127.0.0.1:3306/shop";String use = "root";String password = "password";Class.forName(driver);conn = DriverManager.getConnection(url, use, password);sql = conn.prepareStatement("select * from user where username=? and password=?");sql.setString(1, users);sql.setString(2, pass);rs = sql.executeQuery();if (rs.next()) {flag = true;}rs.close();sql.close();conn.close();
%>
<!-- 判断是否是正确的登录用户 -->
<%if (flag == true) {
%>
<jsp:forward page="list.jsp" />
<%} else if (flag == false) {
%>
<script>alert("用户名或密码错误,请重新输入");window.location = "login.jsp";
</script><%}
%>

注册界面与上面登录界面类似

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html>
<head>
<title>注册</title>
https://cdn.bootcss.com/semantic-ui/2.3.1/semantic.css"rel="stylesheet">
</head>
<body><!-- <p1>test!</p1> --><br><br><br><div class="loginpage"><br> <br> <br><h2 align="center">请注册</h2><form name=loginForm action="doRegister.jsp" method=post><table align="center"><tr><td>用户名:</td><td><div class="ui input focus"><input type="text" placeholder="" name=username></div></td></tr><tr><td>密码:</td><td><div class="ui input focus"><input type="password" placeholder="" name=pwd></div></td><tr /><br></table><div class="submit-p"><div class="submit-button"><input type="submit" value="register" class="ui primary button" /></div><div class="reset-button"><input type="reset" value="reset" class="ui button" /></div></div></form></div><style>
.loginpage {/*height: 300px;*//*padding-bottom: 64px;*//*height: 500px;*//*position: relative;*/height: 400px;border: 1px solid #d7d7d7;box-shadow: 0 0 20px #d7d7d7;background-color: #fff;position: absolute;width: 382px;color: #818181;margin: 80px auto;position: absolute;left: 0;right: 0;
}.submit-button {display: inline;
}.reset-button {display: inline;
}.submit-p {margin-left: 120px;margin-top:20px;
}
</style>
</body>
</html>

注册逻辑处理代码: doRegister.jsp

<%@ page language="java" import="dao.*,entity.*,java.util.*,java.sql.*"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%request.setCharacterEncoding("utf-8");String users = request.getParameter("username");String pass = request.getParameter("pwd");%><%String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://127.0.0.1:3306/shop";String use = "root";String password = "password";Class.forName(driver);Connection conn = DriverManager.getConnection(url, use, password);PreparedStatement sql = conn.prepareStatement("insert into user(username,password)values(?,?)");sql.setString(1, users);sql.setString(2, pass);int rtn = sql.executeUpdate();sql.close();conn.close();%><script>alert("注册成功");window.location = "login.jsp";</script>
</body>
</html>

定义Dao

BaseDao

dao下BaseDao.java 用于连接数据库

package dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.security.auth.x500.X500Principal;//import com.mysql.jdbc.Statement;public class BaseDao {Connection conn = null;Statement stmt = null;ResultSet rs = null;Connection con;public static Connection getConnection() throws SQLException {Connection connection = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/shop";connection = DriverManager.getConnection(url,"root","password");} catch (ClassNotFoundException e) {// TODO: handle exceptione.printStackTrace();}return connection;}public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {try {if (rs != null)rs.close();if (stmt != null)stmt.close();if (conn != null)conn.close();} catch (SQLException e) {// TODO: handle exceptione.printStackTrace();}}}

ProductDaoImp

ProductDaoImp.java用于查询商品,实现了商品查询的两个方法,

  • 一种是findAll()用于商品列表页面 list.jsp
  • 一种是findById()用于商品详情页面 detail.jsp
package dao;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;import org.apache.tomcat.jni.Proc;
//import java.sql.*;
import org.omg.CORBA.PUBLIC_MEMBER;import com.sun.org.apache.regexp.internal.recompile;import entity.Product;
import jdk.internal.org.objectweb.asm.commons.StaticInitMerger;//操作产品的实现类
public class ProductDaoImp {/* 作用,按照条件查询产品 */public ArrayList findAll() {ArrayList list = new ArrayList();Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1.打开数据库连接conn = BaseDao.getConnection();// 2.创建执行sql语句对象stmt = conn.createStatement();// 3.发送sql语句到mysqlString sql = "select * from product";rs = stmt.executeQuery(sql);// rs结果集--->遍历--->封装product--->放入ArrayListwhile (rs.next())// 循环一次只代表一行{Product p = new Product();p.setId(rs.getInt("id"));p.setName(rs.getString("name"));p.setImg(rs.getString("img"));p.setDesc(rs.getString("desc"));p.setNum(rs.getInt("num"));p.setPrice(rs.getDouble("price"));System.out.println(p.getName());list.add(p);}// 4.} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {BaseDao.closeAll(conn, (com.mysql.jdbc.Statement) stmt, rs);}return list;}public Product findById(int id) {//ArrayList list = new ArrayList();Product p = new Product();Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1.打开数据库连接conn = BaseDao.getConnection();// 2.创建执行sql语句对象stmt = conn.createStatement();// 3.发送sql语句到mysqlString sql = "select * from product where id =" + id;rs = stmt.executeQuery(sql);// rs结果集--->遍历--->封装product--->放入ArrayListwhile (rs.next())// 循环一次只代表一行{//Product p = new Product();p.setId(rs.getInt("id"));p.setName(rs.getString("name"));p.setImg(rs.getString("img"));p.setDesc(rs.getString("desc"));p.setNum(rs.getInt("num"));p.setPrice(rs.getDouble("price"));//System.out.println(p.getName());//list.add(p);}// 4.} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {BaseDao.closeAll(conn, (com.mysql.jdbc.Statement) stmt, rs);}return p;}
//	public static void main(String[] args)throws Throwable{
//		new ProductDaoImp().findAll();
//	}}

定义Entity

Product

实体类Product.java,定义商品的基本属性.

package entity;import sun.nio.cs.ext.DoubleByteEncoder;public class Product {private int id;private String name;private double price;private String desc;private String img;private int num;public static void main(String[] args) {// TODO Auto-generated method stub}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getImg() {return img;}public void setImg(String img) {this.img = img;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}}

CartItem

CartItem 定义购物车对象, 里面包括 商品对象 以及 商品数目;

package entity;public class CartItem {private  Product p;private  int  sum;public Product getP() {return p;}public void setP(Product p) {this.p = p;}public int getSum() {return sum;}public void setSum(int sum) {this.sum = sum;}
}

商品列表与详情界面

商品列表界面核心代码 list.jsp

<% 
ProductDaoImp dao = new ProductDaoImp();
ArrayList list = dao.findAll();
for(int i=0;i<list.size();i++){ Product p = (Product)list.get(i);
%><li><a href="detail.jsp?id=<%= p.getId() %>"><div class="i-pic limit"><img src="images/small-<%= p.getImg() %>" />                                            <p class="title fl"><%= p.getName() %></p><p class="price fl"><b>¥</b><strong><%= p.getPrice() %></strong></p><p class="number fl">销量<span><%= p.getNum() %></span></p></div></a></li><%
}
%>

detail界面核心代码 detail.jsp

<% 
String idStr = request.getParameter("id");
if("".equals(idStr) || idStr == null){response.sendRedirect("login.jsp");
}else{int id = Integer.parseInt(request.getParameter("id"));
ProductDaoImp dao = new ProductDaoImp();
Product p = dao.findById(id);
%>......
......省略(用渲染p的各个属性)
......<%
}
%>

★购物车页面

detail.jsp和cart.jsp页面之间跳转通过doCart.jsp来连接
doCart.jsp (将商品添加到购物车的逻辑)

{"商品id":"cartItem"
}
<%@ page language="java" import="dao.*,entity.*,java.util.*"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%// 1.获得购物车 Map// getAttribute的返回值类型是Object,需要向下转型,// 转成你的userName类型的,简单说就是存什么,取出来还是什么.HashMap map = (HashMap) session.getAttribute("cart");// 2.判断购物车 Map是否存在,不存在则创建if (map == null) {map = new HashMap();}// 3.把产品添加到购物车// 3.1 根据 id 查询商品String id = request.getParameter("id");ProductDaoImp dao = new ProductDaoImp();Product p = dao.findById(Integer.parseInt(id));// 3.2判断 Map 中是否由此商品 , 注意这里id不加引号CartItem cartItem = (CartItem) map.get(id);// 有--> 把数量+1// 无--> 把商品放入购物车 数量设置为1if (cartItem != null) {cartItem.setSum(cartItem.getSum() + 1);} else {cartItem = new CartItem();cartItem.setP(p); // 关键步骤cartItem.setSum(1);}// 3.3 将产品加入map集合,id+""拼接成字符串型map.put(id, cartItem);// out.print(map.size());// 4.把集合存储到session作用域session.setAttribute("cart", map);response.sendRedirect("cart.jsp");
%>

遍历map, 前端显示购物车商品

<%
HashMap map = (HashMap)session.getAttribute("cart");
Iterator it = map.keySet().iterator();
while(it.hasNext()){Object key = it.next();CartItem cartItem = (CartItem)map.get(key);Product p = cartItem.getP();int sum = cartItem.getSum();%>
......
<%
}
%>

用于增删商品数量的js代码

<script>
function fun1(id, price) {var sum = parseInt(document.getElementById("sum" + id).value) + 1;var m = sum * parseFloat(price);document.getElementById("m" + id).innerHTML = m;document.getElementById("J_Total").innerHTML = m;var sum1 = parseInt(document.getElementsByClassName("text_box")[0].value) + 1;document.getElementById("J_SelectedItemsCount").innerHTML = sum1;}function fun2(id, price) {var sum = parseInt(document.getElementById("sum" + id).value) - 1;var m = sum * parseFloat(price);document.getElementById("m" + id).innerHTML = m;document.getElementById("J_Total").innerHTML = m;document.getElementById("J_SelectedItemsCount").innerHTML = document.getElementsByClassName("text_box")[0].value;}
</script>

更多

看参考

servlet+jsp实现小小购物车功能
https://blog.csdn.net/freshbin000/article/details/52348754/


http://chatgpt.dhexx.cn/article/eLKWItfm.shtml

相关文章

jsp购物车(session版)

目录 一、要用到的 js 和 css 文件 二、数据库表实体类Dao类 1、数据库表 2、实体类 3、Dao类方法(GoodsDao) 四、商品主页面&#xff08;index.jsp&#xff09; 1、代码分析 2、完整代码 五、购物车页面&#xff08;spcar.jsp&#xff09; 1、代码分析 2、完整代码 3、删除…

jsp实现购物车

文章目录 一、案例演示二、实现步骤1.info.jsp2.UserServlet3.cart.jsp4.UserServlet 一、案例演示 点击购买进入到购物车页面&#xff0c;增加减少数量都会对小计&#xff0c;总计产生影响&#xff0c;点击继续购买&#xff0c;回到挑选页面product_list.jsp 二、实现步骤 …

图像识别技术

图像识别算法实现收藏 <script type"text/javascript"></script> <script></script> 以往的图像处理函数实现&#xff0c;多是针对图像句柄。算法实现 需要操作复杂的图像文件。 但是&#xff0c;这种方式算法实现和调试的周期比较长。为了加…

神经网络图像识别算法,神经网络提取特征值

哪些神经网络可以用在图像特征提取上 BP神经网络、离散Hopfield网络、LVQ神经网络等等都可以。 1.BP&#xff08;BackPropagation&#xff09;神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出&#xff0c;是一种按误差逆传播算法训练的多层前馈网络&#xff0c;…

基于神经网络的图像识别

一、目的 1. 了解深度学习的基本原理&#xff1b; 2. 能够使用 PaddleHub 深度学习开源工具进行图像识别&#xff1b; 3. 能够使用 PaddlePaddle 训练神经网络模型&#xff1b; 4. 能够使用 Paddle 完成手写实验. 5. 能够使用 keras 训练神经网络模型。 二、环境配置&#xff1…

机器学习决策树算法解决图像识别

算法介绍 什么是决策树算法 决策树又称判定树&#xff0c;是一个类似于流程图的树结构&#xff1a;其中&#xff0c;每个内部结点表示在一个属性上的测试&#xff0c;每个分支代表一个属性输出&#xff0c;而每个树叶结点代表类或类分布。树的最顶层是根结点。 构造决策树的基…

opencv 图像识别

opencv的目标是使计算机可以快速准确地从数字图像中提取和分析特征。它使用了许多新的算法和技术&#xff0c;例如改进的模板匹配、基于统计的特征分析以及深度学习等。opencv支持多种平台&#xff0c;包括 Windows、 MacOS、 Linux和 Android&#xff0c;开发者可以使用 OpenC…

图像识别算法(二)

一、线性分类器 线性分类器&#xff08;Linear Classification&#xff09;是比KNN分类器更有效的一种分类器。这个方法有两个重要的部分&#xff1a;分数函数&#xff08;score function&#xff09;和损失函数&#xff08;loss function&#xff09;。分数函数是江原始数据匹…

基于KNN算法的图像识别

你需要完成一个图像识别的任务&#xff0c;主要使用的模型是KNN算法。使用的数据集是cifar-10&#xff0c;是图像识别领域最为经典的数据及之一。具体的数据可以从以下的链接下载&#xff1a; https://www.cs.toronto.edu/~kriz/cifar.html&#xff0c; 下载之后把是数据集解压…

opencv图像算法

图像的对比度增强 一&#xff1a; 绘制直方图 就是把各个像素值所含有的个数统计出来&#xff0c;然后画图表示。 可以看到在当前图像中&#xff0c;哪个像素值的个数最多。 同时&#xff0c;可以看当前图像总体的像素值大小在哪些范围。。靠近0的话&#xff0c;说明图像偏暗…

图像识别中的深度学习

图像识别中的深度学习 来源&#xff1a;《中国计算机学会通讯》第8期《专题》 作者&#xff1a;王晓刚 深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破。它在语音识别、自然语言处理、计算机视觉、图像与视频分析、多媒体等诸多领域的应用取得了巨大成功。现有…

图像识别

图像识别主要用到了两个第三方的iOS框架&#xff1a;OpenCV和TesseractOCR&#xff0c;OpenCV用来做图像处理&#xff0c;定位到身份证号码的区域&#xff0c;TesseractOCR则是对定位到的区域内的内容进行识别。 OpenCV中的一些简单的处理图像的方法&#xff1a;灰度处理、二…

深度学习与图像识别 图像检测

主要做了基于深度学习的图像识别与检测的研究&#xff0c;下面是一些整理内容 1、深度学习的优势 &#xff08;1&#xff09;从统计&#xff0c;计算的角度看&#xff0c;DL特别适合处理大数据 a、用较为复杂的模型降低模型偏差 b、用大数据提升统计估计的准确度 c、用可扩展的…

人工智能-图像识别

图像识别技术是信息时代的一门重要的技术&#xff0c;其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展&#xff0c;人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。简单…

神经网络图像识别算法,神经网络图像识别技术

目前进行图像处理,通常使用什么神经网络 谷歌人工智能写作项目&#xff1a;小发猫 数字图像处理的主要方法 数字图像处理的工具可分为三大类&#xff1a;第一类包括各种正交变换和图像滤波等方法&#xff0c;其共同点是将图像变换到其它域&#xff08;如频域&#xff09;中进…

人工智能中的图像识别技术

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 伴随着图像处理技术的飞速发展&#xff0c;推动了图像识别技术的产生和发展&#xff0c;并逐渐成为人工智能领域中重要的组成部分&#xff0c;并广泛地运用于面部识别、…

图像处理那些算法

图像的几何变换 1&#xff09;旋转 借助矩阵运算来实现图像的旋转功能 2&#xff09;平移 借助矩阵运算来实现图像的旋转功能 3&#xff09;对称 借助矩阵运算来实现图像的对称功能 水平镜像变换&#xff1a; 垂直镜像变换&#xff1a; 图片裁剪 借助 get (gca, ‘cu…

最新开源的图像识别算法来了!

Datawhale开源 方向&#xff1a;图像识别开源项目 人脸、车辆、人体属性、卡证、交通标识等经典图像识别能力&#xff0c;在我们当前数字化工作及生活中发挥着极其重要的作用。业内也不乏顶尖公司提供的可直接调用的API、SDK&#xff0c;但这些往往面临着定制化场景泛化效果不…

神经网络的图像识别技术,神经网络图像识别算法

神经网络提取图像的概率分布特征 神经网络提取图像的概率分布特征&#xff1a;由于一个映射面上的神经元共享权值&#xff0c;因而减少了网络自由参数的个数&#xff0c;降低了网络参数选择的复杂度。 卷积神经网络中的每一个特征提取层&#xff08;C-层&#xff09;都紧跟着…

相似图像识别算法是什么,机器图像识别常用算法

计算图像相似度的算法有哪些 SIM Structural SIMilarity&#xff08;结构相似性&#xff09;&#xff0c;这是一种用来评测图像质量的一种方法。 由于人类视觉很容易从图像中抽取出结构信息,因此计算两幅图像结构信息的相似性就可以用来作为一种检测图像质量的好坏.首先结构…