学习教材为购物车系列教材 (一)- 使用Servlet结合JSP开发 购物车 功能 (how2j.cn)
一、产品模块
1.在sql server中创建数据库cart(这里我直接使用SSMS,并未用SQL语言进行创建)
2.在cart中创建表product
注意:教程中创建并未设置主键,因此此处我也未设置主键,将所有列属性均设置允许空并设置默认值为null。
3.在表中插入数据
4.具体代码
bean包中的Product类
package bean;
public class Product {
private int id;
private String name;
private float price;
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 float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
dao包中的ProductDAO类
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import bean.Product;
public class ProductDAO {
public static void main(String[] args) {
System.out.println(new ProductDAO().ListProduct().size());
}
public List<Product> ListProduct() {
List<Product> products = new ArrayList<Product>();
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=cart", "sa",
"123456");
String sql = "select * from product order by id desc";
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Product product = new Product();
int id = rs.getInt(1);
String name = rs.getString(2);
float price = rs.getFloat(3);
product.setId(id);
product.setName(name);
product.setPrice(price);
products.add(product);
}
ps.close();
c.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return products;
}
}
servlet包中的ProductListServlet
package servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.Product;
import dao.ProductDAO;
@WebServlet("/listProduct")
public class ProductListServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Product> products = new ProductDAO().ListProduct();
request.setAttribute("products", products);
request.getRequestDispatcher("listProduct.jsp").forward(request, response);
}
}
由于我没有按照教材中的配置xml,所以记得加上注解@WebServlet("/listProduct")
listProduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<table align='center' border='1' cellspacing='0'>
<tr>
<td>id</td>
<td>名称</td>
<td>价格</td>
<td>购买</td>
</tr>
<c:forEach items="${products}" var="product" varStatus="st">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>
<form action="addOrderItem" method="post">
数量<input type="text" value="1" name="num">
<input type="hidden" name="pid" value="${product.id}">
<input type="submit" value="购买">
</form>
</td>
</tr>
</c:forEach>
</table>
5.运行ProductListServlet,即可成功显示
二、用户模块
与产品模块类似,先在cart数据库中新建表user并插入相关数据;再分别编写bean包中的User类,dao包中的UserDAO类,servlet包中的UserLoginServlet,login.jsp,并修改listProduct.jsp(教程中有)。
遇到的问题:
解决:
当我将表名更改过后,不再出现上面的错误,而是显示找不到文件
但是经过反复检查后,发现文件名并没有写错也都存在。想起之前老师在群里发的这个解决方法各类问题汇总_wyhwust的博客-CSDN博客,按照上面所教将其他文件导出,但是还是未解决。
用在网上搜了相关错误的解决方法,并按照改了一些,但是还是有问题,打算明天再研究研究
2023.5.5:
昨天对于404错误,一直纠结文件名有没有写错,今天发现是因为response.sendRedirect("listProduct");中地址多加了/,删掉之后就可以成功找到文件并运行。