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

前文功能的实现

 技术支持: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>

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值