前文功能的实现
技术支持: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("系统繁忙,请稍后再试!");
}
}
}
--用于处理客户端的请求并返回相应的商品列表
-
Servlet基本信息:
- 这是一个名为
listServlet
的Servlet类,继承自HttpServlet
,用于处理客户端请求。
- 这是一个名为
-
服务方法:
service
方法重写了父类的方法,接收HttpServletRequest
和HttpServletResponse
对象作为参数,用于处理客户端的请求和返回响应。
-
响应设置:
- 使用
response.setContentType("text/html;charset=utf-8");
设置响应内容类型为HTML,并指定UTF-8编码,确保正确显示中文字符。
- 使用
-
数据库访问:
- 创建了一个
StudentDAO
的实例dao
,这通常是一个数据访问对象,用于访问数据库并执行查询操作。 - 调用
dao.findAllgoods()
方法,该方法返回一个List<Product>
,即商品列表。
- 创建了一个
-
请求属性设置:
- 使用
request.setAttribute("goods", products);
将查询到的商品列表存储为请求属性,属性名为"goods"
。这样可以将数据传递给请求转发的目标页面。
- 使用
-
请求转发:
- 创建
RequestDispatcher
对象rd
,并使用request.getRequestDispatcher("shopping.jsp");
获取到目标页面"shopping.jsp"
的请求转发器。 - 调用
rd.forward(request, response);
方法实现请求转发,将请求和响应传递给目标页面"shopping.jsp"
,在该页面中可以使用${goods}
来获取存储在请求属性中的商品列表数据。
- 创建
-
异常处理:
- 使用
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
中的所有商品信息,并将每个商品的 id
、name
和 price
封装到 Product
对象中,最终以 List<Product>
的形式返回所有商品的信息。它利用了 JDBC 的基本功能和异常处理机制,同时确保了数据库连接在使用完毕后被正确关闭,是一个典型的数据库查询与处理代码片段。
-
- 方法声明了一个
findAllgoods
方法,它返回一个List<Product>
类型的集合,表示所有商品的列表。方法声明了抛出Exception
异常,表示可能会有数据库连接或查询过程中的异常需要处理。
- 方法声明了一个
- 初始化了一个空的
ArrayList<Product>
,用于存储查询到的商品信息。 - 声明了
Connection
、PreparedStatement
和ResultSet
,用于执行SQL查询并处理结果集。 -
- 使用
DBUtil.getConnection()
获取数据库连接,DBUtil
可能是一个自定义的工具类,用于管理数据库连接。 - 准备并执行查询语句
"select * from goods"
,将结果存储在ResultSet rst
中。
- 使用
- 使用
ResultSet
的next()
方法遍历每一行结果。 - 从每行结果中提取商品的
id
、name
和price
。 - 创建一个新的
Product
对象,设置其属性,并将其添加到products
列表中。 - 如果在连接数据库、执行查询或处理结果集时发生异常,将异常打印出来,并重新抛出以通知调用者。
- 在
finally
块中调用DBUtil.close(conn)
来确保数据库连接被正确关闭,以避免资源泄漏。 - 最后,将装有所有商品信息的
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>