基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页

news2024/11/19 14:26:52

前文功能的实现

 技术支持:JAVA、JSP

服务器:TOMCAT 7.0.86

编程软件:IntelliJ IDEA 2021.1.3 x64


前文三篇登录和注册功能的实现

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录功能实现

基于JSP、java、Tomcat三者的项目实战--校园交易网(2)注册功能实现

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页-CSDN博客


主页中我们其实看到了许多功能,我们先来说说

由于这么多功能,集中在这一个网页中,所以我也不水字数,主页的JSP文件在这篇博客中
基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页-CSDN博客


首先,我们是将所有的商品放在我的sdjyy的数据库中,接下来新建一个名为goods的数据表,里面的属性分别为name和price

由于我的数据库编码格式有点问题,在数据库中会显示问号。
但在网页和服务端调试时没有出现问题,问题应该是在我的数据库格式之中,我的数据库版本较低,无法应用utf8mb4。


所有我们先说的是在成功登录后,会呈现出数据库中所记录的表单list。

①-服务层所写的文件,代码

②-要呈现所有的商品,我们最主要的逻辑就是应用了dao层的findallgoods方法

服务层

listServlet

package Servlet;

import dao.StudentDAO;
import entiy.Product;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
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.util.List;

public class listServlet extends HttpServlet {
    public void service(HttpServletRequest request,
                        HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        try {
            StudentDAO dao = new StudentDAO();
            List<Product> products = dao.findAllgoods();
            request.setAttribute("goods",products);
            RequestDispatcher rd = request.getRequestDispatcher("shopping.jsp");
            rd.forward(request,response);
        } catch (Exception e) {
            e.printStackTrace();
            out.println("系统繁忙,请稍后再试!");
        }
    }
}

--用于处理客户端的请求并返回相应的商品列表

  1. Servlet基本信息

    • 这是一个名为 listServlet 的Servlet类,继承自 HttpServlet,用于处理客户端请求。
  2. 服务方法

    • service 方法重写了父类的方法,接收 HttpServletRequest 和 HttpServletResponse 对象作为参数,用于处理客户端的请求和返回响应。
  3. 响应设置

    • 使用 response.setContentType("text/html;charset=utf-8"); 设置响应内容类型为HTML,并指定UTF-8编码,确保正确显示中文字符。
  4. 数据库访问

    • 创建了一个 StudentDAO 的实例 dao,这通常是一个数据访问对象,用于访问数据库并执行查询操作。
    • 调用 dao.findAllgoods() 方法,该方法返回一个 List<Product>,即商品列表。
  5. 请求属性设置

    • 使用 request.setAttribute("goods", products); 将查询到的商品列表存储为请求属性,属性名为 "goods"。这样可以将数据传递给请求转发的目标页面。
  6. 请求转发

    • 创建 RequestDispatcher 对象 rd,并使用 request.getRequestDispatcher("shopping.jsp"); 获取到目标页面 "shopping.jsp" 的请求转发器。
    • 调用 rd.forward(request, response); 方法实现请求转发,将请求和响应传递给目标页面 "shopping.jsp",在该页面中可以使用 ${goods} 来获取存储在请求属性中的商品列表数据。
  7. 异常处理

    • 使用 try-catch 块捕获可能抛出的异常。如果发生异常,通过 e.printStackTrace(); 打印异常堆栈信息到控制台。
    • 在响应中输出 "系统繁忙,请稍后再试!" 提示用户系统暂时无法处理请求。

dao层


dao层findallgoods方法

public List<Product> findAllgoods() throws Exception {
        List<Product> products = new ArrayList<Product>();
        Connection conn = null;
        PreparedStatement prep = null;
        ResultSet rst = null;
        try {
            conn = DBUtil.getConnection();
            prep = conn.prepareStatement("select * from goods");
            rst = prep.executeQuery();
            while (rst.next()){
                int id = rst.getInt("id");
                String name = rst.getString("name");
                double price = rst.getDouble("price");
                Product e1 = new Product();
                e1.setId(id);
                e1.setName(name);
                e1.setPrice(price);
                products.add(e1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw  e;
        }finally {
            DBUtil.close(conn);
        }

        return products;
    }

--这一段用于从数据库中查询所有商品信息并返回一个包含所有商品的列表 

通过 JDBC 与数据库进行交互,查询表 goods 中的所有商品信息,并将每个商品的 idnameprice 封装到 Product 对象中,最终以 List<Product> 的形式返回所有商品的信息。它利用了 JDBC 的基本功能和异常处理机制,同时确保了数据库连接在使用完毕后被正确关闭,是一个典型的数据库查询与处理代码片段。
 

    • 方法声明了一个 findAllgoods 方法,它返回一个 List<Product> 类型的集合,表示所有商品的列表。方法声明了抛出 Exception 异常,表示可能会有数据库连接或查询过程中的异常需要处理。
  1. 初始化了一个空的 ArrayList<Product>,用于存储查询到的商品信息。
  2. 声明了 ConnectionPreparedStatement 和 ResultSet,用于执行SQL查询并处理结果集。
    • 使用 DBUtil.getConnection() 获取数据库连接,DBUtil 可能是一个自定义的工具类,用于管理数据库连接。
    • 准备并执行查询语句 "select * from goods",将结果存储在 ResultSet rst 中。
  3. 使用 ResultSet 的 next() 方法遍历每一行结果。
  4. 从每行结果中提取商品的 idname 和 price
  5. 创建一个新的 Product 对象,设置其属性,并将其添加到 products 列表中。
  6. 如果在连接数据库、执行查询或处理结果集时发生异常,将异常打印出来,并重新抛出以通知调用者。
  7. 在 finally 块中调用 DBUtil.close(conn) 来确保数据库连接被正确关闭,以避免资源泄漏。
  8.  最后,将装有所有商品信息的 products 列表作为方法的返回值返回给调用者。

web-xml 

   <servlet>
        <servlet-name>list</servlet-name>
        <servlet-class>Servlet.listServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>list</servlet-name>
        <url-pattern>/list</url-pattern>
    </servlet-mapping>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go 协程池的实现

使用场景 这次需求是做一个临时的数据采集功能&#xff0c;为了将积压的数据快速的消耗完&#xff0c;但是单一的脚本消耗的太慢&#xff0c;于是乎就手写了一个简单的协程池&#xff1a; 为了能加快数据的收集速度为了稳定协程的数量&#xff0c;让脚本变得稳定 设计图如下…

【JUC】线程局部变量ThreadLocal

文章目录 ThreadLocal简介面试题是什么&#xff1f;能干吗&#xff1f;API介绍initialValue方法&#xff08;不推荐&#xff09;withInitial方法&#xff08;推荐&#xff09;remove ThreadLocal入门案例原始需求需求变更线程池 总结 ThreadLocal源码分析Thread、ThreadLocal、…

区块链——hardhat使用

一、引入hardhat yarn add --dev hardhat // 引入验证合约的插件 yarn add --dev nomicfoundation/hardhat-verify 二、创建hardhat项目 yarn hardhat 三、编写我们的合约 四、编译我们的合约 yarn hardhat compile 五、编写脚本部署合约以及验证合约 // 获取hardhat环境对象 c…

Flutter大型项目架构:私有组件包管理

随着项目功能模块越来越多&#xff0c;怎么去管理这些私有组件包是一个不得不面对的问题&#xff0c;特别对于团队开发来讲&#xff0c;一些通用的公共组件往往会在多个项目间使用&#xff0c;多的有几十个&#xff0c;每个组件包都有有自己的版本&#xff0c;组件包之间还有依…

AI的欺骗游戏:揭示多模态大型语言模型的易受骗性

人工智能咨询培训老师叶梓 转载标明出处 多模态大型语言模型&#xff08;MLLMs&#xff09;在处理包含欺骗性信息的提示时容易生成幻觉式响应。尤其是在生成长响应时&#xff0c;仍然是一个未被充分研究的问题。来自 Apple 公司的研究团队提出了MAD-Bench&#xff0c;一个包含8…

漏洞复现-F6-11泛微-E-Cology-SQL

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://www.wwlib.cn/index.php/artread/artid/15575.html 0x01 产品简介 泛微协同管理应用平台e-cology是一套企业级大型协同管理平台 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤&#xff0…

CentOS_7.9历史版本官网下载

文章目录 1. 官网下载1.1. 打开官网1.2. download1.3. Older Versions-click here1.4. RPMs1.5. Vault mirror1.6. 7.9.2009/1.7. isos1.8. x86_641.9. 选择安装包下载 2. 阿里云镜像站下载 1. 官网下载 下载地址(如果下载地址已失效&#xff0c;参考下面的步骤) iso是安装包…

【前端】一文带你了解 CSS

文章目录 1. CSS 是什么2. CSS 引入方式2.1 内部样式2.2 外部样式2.3 内联样式 3. CSS 常见选择器3.1 基础选择器3.1.1 标签选择器3.1.2 类选择器3.1.3 id 选择器3.1.4 通配符选择器 3.2 复合选择器3.2.1 后代选择器 4. CSS 常用属性4.1 字体相关4.2 文本相关4.3 背景相关4.4 设…

基于sklearn的机器学习 — 决策树与随机森林

基于树的学习算法是一种广泛而流行的非参数、有监督的分类和回归方法。 基于树的学习算法的基础是决策树&#xff08;decision tree&#xff09;&#xff0c;它将一系列决策规则串联起来&#xff0c;看起来像一棵倒立的树&#xff0c;第一条决策规则位于树顶&#xff0c;称之为…

第十四篇——军争篇:怎样在行军中设计战场

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过不利的战场&#xff0c;用方式方法&#xff0c;让战场逐渐转化成对自…

[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/140754278 出自【进步*于辰的博客】 参考笔记一&#xff0c;P10.4、P13.2&#xff1b;笔记三&am…

城市交通工具目标检测数据集自行车、公交车、小汽车、行人

数据整理不易&#xff0c;下载地址点这里&#xff1b; yolo格式数据集之交通工具检测5种&#xff1b; 数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用&#xff1b; 本数据为交通工具检测检测数据集&#xff0c;数据集数量如下&#xff1a; 总共有:6633张 训练集&…

尚庭公寓(四)

房间基本属性管理共有五个接口&#xff0c;分别是**保存或更新属性名称**、**保存或更新属性值**、**查询全部属性名称和属性值列表**、**根据ID删除属性名称**、**根据ID删除属性值**。下面逐一是实现。 首先在AttrController中注入AttrKeyService和AttrValueService&#xf…

计数器与阻塞队列

目录 一&#xff1a;阻塞队列 模拟阻塞队列 二&#xff1a;线程池&#xff1a; 三&#xff1a;计数器&#xff1a; 定时器模拟实现 一&#xff1a;阻塞队列 阻塞队列是在原有的普通队列上做了扩充&#xff0c;标准库中原有的队列和子类都是线程不安全的。 1.线程安全 2.…

OSMDroidOfflineDemo源码调试记录

文章目录 源码下载环境配置尝试不同离线加载遇到的问题 尝试安卓端加载离线地图&#xff0c;下载了使用osmdroid的离线版项目源码&#xff0c;更改JDK环境、gradle环境&#xff0c;一顿操作下来&#xff0c;踉踉跄跄的把程序跑起来了&#xff0c;但是离线的地图一直加载不出来。…

49.TFT_LCD液晶屏驱动设计与验证(2)

&#xff08;1&#xff09;Visio视图&#xff1a; &#xff08;2&#xff09;控制模块Verilog代码&#xff1a; module tft_ctrl(input clk_33M ,input reset_n ,input [23:0] data_in ,output [9:0] hang…

如何使用 SQLite ?

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统&#xff08;RDBMS&#xff09;。它是一种 C 库&#xff0c;实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的&#xff0c;完全在公共领域。它被广泛用于各种应用程序&#xff0c;包括浏览…

Python | ValueError: could not convert string to float: ‘example’

Python | ValueError: could not convert string to float: ‘example’ 在Python编程中&#xff0c;类型转换是一个常见的操作。然而&#xff0c;当尝试将一个字符串转换为浮点数时&#xff0c;如果字符串的内容不是有效的浮点数表示&#xff0c;就会遇到“ValueError: could…

【python_将一个列表中的几个字典改成二维列表,并删除不需要的列】

def 将一个列表中的几个字典改成二维列表(original_list,headersToRemove_list):# 初始化一个列表用于存储遇到的键&#xff0c;保持顺序ordered_keys []# 遍历data中的每个字典&#xff0c;添加其键到ordered_keys&#xff0c;如果该键还未被添加for d in original_list:for …

SpringCloud之@FeignClient()注解的使用方式

FeignClient介绍 FeignClient 是 Spring Cloud 中用于声明一个 Feign 客户端的注解。由于SpringCloud采用分布式微服务架构&#xff0c;难免在各个子模块下存在模块方法互相调用的情况。比如订单服务要调用库存服务的方法&#xff0c;FeignClient()注解就是为了解决这个问题的…