技术支持:JAVA、JSP
服务器:TOMCAT 7.0.86
编程软件:IntelliJ IDEA 2021.1.3 x64
前文三篇登录和注册功能的实现
基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)
https://blog.csdn.net/m0_64056556/article/details/140684858?spm=1001.2014.3001.5502
基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录功能实现
https://blog.csdn.net/m0_64056556/article/details/140708897?spm=1001.2014.3001.5502
基于JSP、java、Tomcat三者的项目实战--校园交易网(2)注册功能实现
https://blog.csdn.net/m0_64056556/article/details/140710605?spm=1001.2014.3001.5502
下面我展示主页

在我们的网址上加上denglu.jsp跳转到登陆页面,同时昵称,账号和密码都是注册过,存放到数据库中的,假设是都是2(我已注册过的),点击登录之后,就会跳转到我们的l主页面。
主页如下

上面几个功能我们就要注意到,都是我们要做的,有些逻辑功能我们写了一个服务,而有些逻辑功能的实现我们是直接在jsp页面实现了。
我们放上主页的代码
shopping.jsp
<%@ page import="java.util.Date" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="entiy.Product" %> <%@ page import="java.util.List" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 购物车 交易平台
商品 单价(元) 操作 <% List products = (List) request.getAttribute("goods"); if (products == null) { System.out.println("Products list is null!"); // 可以根据实际情况做进一步处理,如返回到上一页或者显示错误信息。 } else { for (int i=0; i <%=e.getName()%> <%=e.getPrice()%> ">修改 <% } } %>
购物车
这段代码实现了一个简单的购物车系统,允许用户添加商品、调整数量、删除商品,并计算总金额。同时,还包括一个历史清单按钮,点击后会跳转到历史清单页面。
JSP 页面结构:
用户信息显示:
数据展示和交互:
List products ),然后遍历显示每个商品的名称、价格,并提供修改和加入购物车的链接或按钮。动态数据处理:
Date 类和 SimpleDateFormat 类来获取和格式化当前的日期时间,显示在页面上。交互性功能:
后端数据处理:
HTML结构:
标签展示购物车内容,每行显示商品信息、单价、数量、金额以及删除按钮。- 使用表单
包裹整个购物车,设置action="total"表示在提交表单时将数据发送到名为total的后端服务。 JavaScript函数:
add_shoppingcart(btn):用于将商品添加到购物车。
- 获取所点击按钮的父元素,并从中获取商品信息(名称和价格)。
- 检查购物车中是否已有相同商品,若有则增加其数量,更新金额;若无则创建新行添加商品信息。
- 调用
total()函数重新计算总金额。
del(btn):用于删除购物车中的商品行。
- 获取点击按钮的父元素,并从中获取其所在的行(
元素)。- 从DOM中移除该行,并调用
total()函数重新计算总金额。 add(btn) 和 minu(btn):分别用于增加和减少商品数量。
- 通过操作DOM来增加或减少商品数量,并根据数量重新计算商品行的金额,然后调用
total()更新总金额。
total():计算购物车中所有商品的总金额。
- 获取所有商品行的金额并累加,最后将总金额显示在页面相应的输入框中。
与服务的连接:
- 这段代码通过 Servlet(可能是
Shopping Servlet)处理用户请求,例如获取用户信息和商品数据。 - 商品数据(
List)可能是从数据库或其他数据存储中获取的,通过 Servlet 将其设置为请求属性,在 JSP 页面中通过 <%= ... %> 输出到 HTML 中 - 表单提交:当用户点击"去支付"按钮时,会触发
form标签的提交事件,数据将被发送到名为total的后端服务(假设是服务器上的一个处理请求的端点)。后端服务可以接收提交的数据,如总金额等,然后执行支付操作或者进一步处理。
服务层
Shopping.Servlet
package Servlet; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.sql.*; public class ShoppingServlet extends HttpServlet { // 数据库连接信息(这里假设你使用MySQL数据库) private String jdbcURL = "jdbc:mysql://localhost:3306/sdjyy"; private String jdbcUsername = "root"; private String jdbcPassword = "asd123"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); String idname = (String) session.getAttribute("idname"); if (idname != null) { // 如果成功获取到 idname,可以继续处理逻辑 // 在这里可以根据 idname 进行数据库查询或者其他业务逻辑 Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword); String sql = "SELECT * FROM users WHERE idname = ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, idname); rs = stmt.executeQuery(); if (rs.next()) { // 从结果集中获取其他信息或者执行其他操作 String username = rs.getString("idname"); System.out.println("Username retrieved: " + username); // 将用户名存储到 session 中(如果需要的话) session.setAttribute("username", username); // 转发到 shopping.jsp 页面或者其他需要的页面 RequestDispatcher dispatcher = request.getRequestDispatcher("/shopping.jsp"); dispatcher.forward(request, response); } else { // 如果未能从数据库中找到对应的记录,处理逻辑(例如跳转到错误页面) response.sendRedirect("/denglu.jsp"); } } catch (SQLException se) { se.printStackTrace(); response.getWriter().println("数据库连接错误"); } finally { // 关闭资源 try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } } else { // 如果未能成功取 idname,处理逻辑(例如跳转到登录页面或者错误页面) response.sendRedirect("/denglu.jsp"); } } }
Servlet基本信息:
- 这是一个名为
ShoppingServlet 的Servlet类,继承自 HttpServlet,用于处理POST请求。
数据库连接信息:
- 定义了三个私有变量
jdbcURL, jdbcUsername, jdbcPassword,分别存储了MySQL数据库的URL、用户名和密码。这些信息用于与数据库建立连接。
doPost方法:
doPost 方法接收 HttpServletRequest 和 HttpServletResponse 对象作为参数,处理用户的POST请求。- 首先从会话中获取
idname,这通常是用户登录后存储在会话中的用户名或标识。
会话检查:
- 检查
idname 是否为null。如果成功获取到 idname,表示用户已经登录,可以继续处理业务逻辑;否则,重定向到登录页面(这里是 /denglu.jsp)。
数据库操作:
- 使用
DriverManager 建立数据库连接。 - 准备SQL语句并执行查询,查询条件为
idname,以获取与之对应的用户信息。 - 如果查询到结果,从结果集中获取用户名等信息,并将用户名存储到会话中(如果需要的话)。
- 将请求转发到
shopping.jsp 页面或其他需要的页面,这里使用 RequestDispatcher 实现转发。
异常处理和资源释放:
- 在操作数据库过程中可能会发生
SQLException,在 catch 块中打印异常信息,并向响应中写入错误信息。 - 在
finally 块中关闭数据库连接、语句和结果集,确保资源被正确释放。
未找到用户处理:
- 如果未从数据库中找到与
idname 对应的记录,可能是因为用户不存在或其他错误,将响应重定向到登录页面
更多的,这个服务层的代码是为了解决
将登陆成功的信息传到session中,如果在登录页面显示登录成功的话,就会把用户名存进去,然后再在这个地方拿出来,显示“你好,xxx”
web-xml
Shopping Servlet.ShoppingServlet Shopping /Shopping
相关内容
热门资讯
迎来新发展!wepoker游戏...
迎来新发展!wepoker游戏安装教程,德州透视插件(透视)秘籍教程(好像真的有挂)1、下载好wep...
透视揭幕!扑克之星辅助(透视)...
透视揭幕!扑克之星辅助(透视)we-poker是什么软件,教程大纲(真的有挂)-哔哩哔哩1、很好的工...
今天下午!红龙poker辅助平...
今天下午!红龙poker辅助平台,hhpoker德州透视挂(透视)资料教程(竟然真的是有挂)小薇(辅...
透视解密!xpoker辅助控制...
透视解密!xpoker辅助控制(透视)wepoker代打辅助机器人,教程方针(有挂分享)-哔哩哔哩1...
据玩家消息!wpk免费辅助,w...
您好,wepoker免费脚本咨询这款游戏可以开挂的,确实是有挂的,需要了解加去威信【13670430...
透视辅助!hhpoker有后台...
透视辅助!hhpoker有后台操作吗(透视)hhpoker是真的吗,教程法子(有挂技巧)-哔哩哔哩1...
目前来看!pokemmo手机脚...
目前来看!pokemmo手机脚本,德州局怎么透视(透视)绝活教程(一贯真的有挂)德州局怎么透视辅助器...
透视透视!xpoker辅助神器...
透视透视!xpoker辅助神器(透视)wepoker安装教程,教程方案(有挂秘籍)-哔哩哔哩亲,关键...
今日!wpk安卓下载辅助,大菠...
今日!wpk安卓下载辅助,大菠萝789辅助器下载(透视)机巧教程(总是是真的挂)1、任何大菠萝789...
透视分享!wpk免费辅助(透视...
透视分享!wpk免费辅助(透视)wpk辅助购买,教程资料(新版有挂)-哔哩哔哩1、在wpk辅助购买插...