这里只发了一部分,未完善,后期完善
实体有用户和购物车,商品在前端写死了,通过用户名来连接用户表和购物车表。
弊端:
1.逻辑写在了dao层 所以代码逻辑有点乱
过滤器
package com.hyy.taobao.filter; import com.hyy.taobao.api.entity.User; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebFilter("/*") public class LoginFilter implements Filter { /** * 代表filter对象初始化方法 filter对象创建时执行 * * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { } /** * 代表是filter销毁方法 当filter对象销毁时执行该方法 */ @Override public void destroy() { } /** * 代表filter执行过滤的核心方法, * 如果某资源在已经被配置到这个filter进行过滤的话, * 那么每次访问这个资源都会执行doFilter方法 * * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 基于HTTP HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; // 得到请求的路径 String path = httpServletRequest.getRequestURI(); // 指定放行页面,即不需要登录就可以进入的页面 if (path.contains("index.jsp")||path.contains("Login.jsp")||path.contains("insertUserWeb.jsp")){ // 放行 filterChain.doFilter(servletRequest,servletResponse); return; } // 2、放行静态页面(例如CSS、JS、Image等资源) if (path.contains("/js")){ filterChain.doFilter(servletRequest, servletResponse); return; } // 3、放行指定操作:不需要登录即可进行的操作(如登录操作、注册操作) // 检查你是否在做登录或注册操作 是 放行 否则拦截 if (path.contains("/insertUser")||path.contains("/login")){ filterChain.doFilter(servletRequest,servletResponse); return; } User myUser = (User) httpServletRequest.getSession().getAttribute("myUser"); if (myUser != null) { filterChain.doFilter(servletRequest,servletResponse); return; } httpServletResponse.sendRedirect("index.jsp"); return; } }
监听器
package com.hyy.taobao.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class InitLoginCountListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { sce.getServletContext().setAttribute("onlineCount",0); } @Override public void contextDestroyed(ServletContextEvent sce) { } }
package com.hyy.taobao.listener; import javax.servlet.ServletContext; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener public class MaxLoginCountListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); int onlineCount = (int) servletContext.getAttribute("onlineCount"); onlineCount++; servletContext.setAttribute("onlineCount",onlineCount); } @Override public void sessionDestroyed(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); int onlineCount = (int) servletContext.getAttribute("onlineCount"); onlineCount--; servletContext.setAttribute("onlineCount",onlineCount); } }
# 连接数据库代码封装类
import java.sql.*; /** * 连接数据库的代码,封装到类中,可以使代码更加简洁。 * JDBC连接数据库: * 1.加载驱动 * 2.获取连接 * 3.获取数据库操作对象 * 4.执行sql语句 * 5.处理结果集 * 6.释放资源 * 在封装类中只需要写1.2.6.即可! */ public class DBUtil { private static String driver = "com.mysql.cj.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/taobao"; private static String userName = "root"; private static String password = "020826"; /** * 静态代码块 * 静态代码块在类加载时仅仅执行一次 * 达到在类加载的时候就加载驱动 */ static { /** * 加载驱动 */ try { Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } public static Connection connection() { Connection connection = null; try { connection = DriverManager.getConnection(url, userName, password); } catch (Exception e) { e.printStackTrace(); } return connection; } /** * 关闭 Statement 时使用 * @param resultSet * @param statement * @param connection */ public static void close(ResultSet resultSet, Statement statement, Connection connection) { try { if (resultSet != null) { resultSet.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (statement != null) { statement.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (connection != null) { connection.close(); } }catch (Exception e){ e.printStackTrace(); } } /** *关闭 preparedStatement 时使用 * @param resultSet * @param preparedStatement * @param connection */ public static void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection) { try { if (resultSet != null) { resultSet.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (preparedStatement != null) { preparedStatement.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (connection != null) { connection.close(); } }catch (Exception e){ e.printStackTrace(); } } }
JDBC配置文件
checkSql=select userName from user1 where userName = ?; insertSql=insert into user1 (userName,userPassword,userSecurityQuestion,userSecurityAnswer) values(?,?,?,?); deleteSql=delete from user1 where userName=? and userPassword=? and userSecurityAnswer=?; checkGoodSql = select * from myCart where userName = ?; deleteGoodsSql = delete from myCart where userName = ?; userLoginSql=select * from user1 where userName = ? and userPassword = ?; updateSql=update user1 set userPassword = ? where userName = ?; checkMyCartSql=select * from myCart where userName =? and goodsName = ?; myCartInsertSql=insert into myCart (userName,goodsName,goodsPrice,goodsNumber) values(?,?,?,?); myCartInsert_updateSql=update myCart set goodsNumber=? where userName =? and goodsName = ?; myCartSelectGoodsSql=select goodsName,goodsPrice,goodsNumber from myCart where userName = ?; myCartDeleteGoodsSql=delete from myCart where userName =? and goodsName = ?; myCartDeleteGoodsUpdateSql=update myCart set goodsNumber=? where userName =? and goodsName = ?; myCartDeleteAllGoodsSql = delete from myCart where userName = ?;
dao层(数据库访问层)
接口没有发出来,下面的是实现类。
UserDaoImpl.java
用户
package com.hyy.taobao.dao.impl; import com.hyy.taobao.api.entity.User; import com.hyy.taobao.api.util.DBUtil; import com.hyy.taobao.dao.IUserDao; import java.sql.*; import java.util.ResourceBundle; public class UserDaoImpl implements IUserDao { @Override public boolean insertUser(User user) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String checkSql = resourceBundle.getString("checkSql"); String insertSql = resourceBundle.getString("insertSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(checkSql); preparedStatement.setString(1, user.getUserName()); resultSet = preparedStatement.executeQuery(); if (!"".equals(user.getUserName()) || !"".equals(user.getUserPassword()) || !"".equals(user.getSecurityQuestion()) || user.getSecurityAnswer() != "") { if (!resultSet.next()) { preparedStatement = connection.prepareStatement(insertSql); preparedStatement.setString(1, user.getUserName()); preparedStatement.setString(2, user.getUserPassword()); preparedStatement.setString(3, user.getSecurityQuestion()); preparedStatement.setString(4, user.getSecurityAnswer()); preparedStatement.executeUpdate(); } else { System.out.println("用户已存在!"); return false; } } else { return false; } } catch (Exception e) { System.out.println("注册用户失败!"); e.printStackTrace(); return false; } finally { DBUtil.close(resultSet, preparedStatement, connection); } return true; } @Override public boolean deleteUser(User user) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String checkSql = resourceBundle.getString("checkSql"); String deleteSql = resourceBundle.getString("deleteSql"); String checkGoodSql = resourceBundle.getString("checkGoodSql"); String deleteGoodsSql = resourceBundle.getString("deleteGoodsSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(checkSql); preparedStatement.setString(1, user.getUserName()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { preparedStatement = connection.prepareStatement(deleteSql); preparedStatement.setString(1, user.getUserName()); preparedStatement.setString(2, user.getUserPassword()); preparedStatement.setString(3, user.getSecurityAnswer()); int count = preparedStatement.executeUpdate(); if (count == 0) { return false; } preparedStatement = connection.prepareStatement(checkGoodSql); preparedStatement.setString(1, user.getUserName()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { preparedStatement = connection.prepareStatement(deleteGoodsSql); preparedStatement.setString(1, user.getUserName()); int count1 = preparedStatement.executeUpdate(); } else { System.out.println("用户购物车里没有东西!"); } } else { System.out.println("用户可能不存在/用户信息错误!"); return false; } } catch (Exception e) { System.out.println("dao用户删除失败!"); e.printStackTrace(); return false; } finally { DBUtil.close(resultSet, preparedStatement, connection); } return true; } @Override public User userLogin(User user) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; User MyUser; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String userLoginSql = resourceBundle.getString("userLoginSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(userLoginSql); preparedStatement.setString(1, user.getUserName()); preparedStatement.setString(2, user.getUserPassword()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { String userName = resultSet.getString("userName"); String userPassword = resultSet.getString("userPassword"); String question = resultSet.getString("userSecurityQuestion"); String answer = resultSet.getString("userSecurityAnswer"); MyUser = new User(userName, userPassword, question, answer); } else { System.out.println("用户可能不存在/用户信息错误!"); return null; } } catch (Exception e) { System.out.println("dao用户登录失败!"); e.printStackTrace(); return null; } finally { DBUtil.close(resultSet, preparedStatement, connection); } return MyUser; } @Override public boolean updateUser(User user) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String checkSql = resourceBundle.getString("checkSql"); String updateSql = resourceBundle.getString("updateSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(checkSql); preparedStatement.setString(1, user.getUserName()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { preparedStatement = connection.prepareStatement(updateSql); preparedStatement.setString(1, user.getUserPassword()); preparedStatement.setString(2, user.getUserName()); preparedStatement.executeUpdate(); } else { System.out.println("用户信息修改失败"); return false; } } catch (Exception e) { System.out.println("用户信息修改失败!"); e.printStackTrace(); return false; } finally { DBUtil.close(resultSet, preparedStatement, connection); } return true; } }
MyCartDaoImpl.java
购物车
package com.hyy.taobao.dao.impl; import com.hyy.taobao.api.entity.MyCart; import com.hyy.taobao.api.util.DBUtil; import com.hyy.taobao.dao.IMyCartDao; import java.sql.*; import java.util.HashSet; import java.util.ResourceBundle; import java.util.Set; public class MyCartDaoImpl implements IMyCartDao { @Override public boolean myCartInsertGoods(MyCart myCart) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String checkMyCartSql = resourceBundle.getString("checkMyCartSql"); String myCartInsertSql = resourceBundle.getString("myCartInsertSql"); String myCartInsertUpdateSql = resourceBundle.getString("myCartInsert_updateSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(checkMyCartSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.setString(2, myCart.getGoodsName()); resultSet = preparedStatement.executeQuery(); if (!resultSet.next()) { preparedStatement = connection.prepareStatement(myCartInsertSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.setString(2, myCart.getGoodsName()); preparedStatement.setInt(3, myCart.getGoodsPrice()); preparedStatement.setInt(4, myCart.getGoodsNumber()); preparedStatement.executeUpdate(); } else { int goodsNumber = resultSet.getInt("goodsNumber"); int newNumber = myCart.getGoodsNumber() + goodsNumber; preparedStatement = connection.prepareStatement(myCartInsertUpdateSql); preparedStatement.setInt(1, newNumber); preparedStatement.setString(2, myCart.getUserName()); preparedStatement.setString(3, myCart.getGoodsName()); preparedStatement.executeUpdate(); } } catch (Exception e) { System.out.println("添加失败咯!"); e.printStackTrace(); return false; } finally { DBUtil.close(resultSet,preparedStatement,connection); } return true; } @Override public Set<MyCart> myCartSelectGoods(MyCart myCart) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; Set<MyCart> myCartSet = new HashSet<>(); ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String myCartSelectGoodsSql = resourceBundle.getString("myCartSelectGoodsSql"); try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(myCartSelectGoodsSql); preparedStatement.setString(1, myCart.getUserName()); resultSet = preparedStatement.executeQuery(); if (resultSet != null) { while (resultSet.next()) { String goodsName = resultSet.getString("goodsName"); int goodsPrice = resultSet.getInt("goodsPrice"); int goodsNumber = resultSet.getInt("goodsNumber"); MyCart myCart1 = new MyCart(goodsName, goodsPrice, goodsNumber); myCartSet.add(myCart1); } } else { return null; } } catch (Exception e) { System.out.println("查看失败!"); e.printStackTrace(); return null; } finally { DBUtil.close(resultSet,preparedStatement,connection); } return myCartSet; } @Override public boolean myCartDeleteGoods(MyCart myCart, int judgement) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; ResourceBundle resourceBundle = ResourceBundle.getBundle("JDBC"); String checkMyCartSql = resourceBundle.getString("checkMyCartSql"); String myCartDeleteGoodsSql = resourceBundle.getString("myCartDeleteGoodsSql"); String myCartDeleteGoodsUpdateSql = resourceBundle.getString("myCartDeleteGoodsUpdateSql"); String myCartDeleteAllGoodsSql = resourceBundle.getString("myCartDeleteAllGoodsSql"); try { connection = DBUtil.getConnection(); if (judgement == 10) { preparedStatement = connection.prepareStatement(myCartDeleteAllGoodsSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.executeUpdate(); } else { preparedStatement = connection.prepareStatement(checkMyCartSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.setString(2, myCart.getGoodsName()); resultSet = preparedStatement.executeQuery(); if (judgement == 0 && resultSet != null) { resultSet.next(); preparedStatement = connection.prepareStatement(myCartDeleteGoodsSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.setString(2, myCart.getGoodsName()); preparedStatement.executeUpdate(); } else if ((judgement == 1 || judgement == -1) && resultSet != null) { resultSet.next(); int goodsNumber = resultSet.getInt("goodsNumber"); int newGoodsNumber = judgement + goodsNumber; preparedStatement = connection.prepareStatement(myCartDeleteGoodsUpdateSql); preparedStatement.setInt(1, newGoodsNumber); preparedStatement.setString(2, myCart.getUserName()); preparedStatement.setString(3, myCart.getGoodsName()); preparedStatement.executeUpdate(); if (judgement == -1 && goodsNumber == 1) { preparedStatement = connection.prepareStatement(myCartDeleteGoodsSql); preparedStatement.setString(1, myCart.getUserName()); preparedStatement.setString(2, myCart.getGoodsName()); preparedStatement.executeUpdate(); } } } } catch (Exception e) { e.printStackTrace(); return false; } finally { DBUtil.close(resultSet,preparedStatement,connection); } return true; } }
Controller层(在这里充当web层)
这里只发了用户登录和商品删除
UserLoginServlet.java
package com.hyy.taobao.controller; import com.hyy.taobao.api.IUserService; import com.hyy.taobao.api.entity.User; import com.hyy.taobao.service.UserServiceImpl; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/login") public class UserLoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置客户端发送到服务端 的请求的内容类型 req.setCharacterEncoding("UTF-8"); // 设置服务端发送到客户端 的响应的内容类型 resp.setContentType("text/html;utf-8"); String userName = req.getParameter("userName"); String userPwd = req.getParameter("userPwd"); User user = new User(userName, userPwd); IUserService iUserService = new UserServiceImpl(); User user1 = iUserService.userLogin(user); if (user1!=null){ HttpSession session = req.getSession(); session.setAttribute("myUser",user1); // Cookie cookie = new Cookie("cookie",session); req.getRequestDispatcher("taobaoIndex.jsp").forward(req,resp); }else { req.setAttribute("msg","登录失败,用户名或密码错误!"); req.getRequestDispatcher("Login.jsp").forward(req,resp); } } }
MyCartDeleteGoodsServlet .java
package com.hyy.taobao.controller; import com.hyy.taobao.api.IMyCartService; import com.hyy.taobao.api.entity.MyCart; import com.hyy.taobao.api.entity.User; import com.hyy.taobao.service.MyCartServiceImpl; 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 javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Set; @WebServlet("/deleteGoods") public class MyCartDeleteGoodsServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;utf-8"); HttpSession session = req.getSession(); User myUser = (User) session.getAttribute("myUser"); String userName = myUser.getUserName(); String goodsName = req.getParameter("goodsName"); MyCart myCart = new MyCart(userName, goodsName); String judge = req.getParameter("judgement"); int judgement = Integer.parseInt(judge); IMyCartService iMyCartService = new MyCartServiceImpl(); switch (judgement) { case -1: boolean sb1 = iMyCartService.myCartDeleteGoods(myCart, judgement); if (sb1) { MyCart myCart1 = new MyCart(userName); IMyCartService iMyCartService1 = new MyCartServiceImpl(); Set<MyCart> myCartSet = iMyCartService1.myCartSelectGoods(myCart1); req.setAttribute("myCartSet", myCartSet); req.getRequestDispatcher("myCart.jsp").forward(req, resp); } else { req.setAttribute("msg", "操作失败!"); req.getRequestDispatcher("goodsResult.jsp").forward(req, resp); } break; case 0: boolean sb2 = iMyCartService.myCartDeleteGoods(myCart, judgement); if (sb2) { MyCart myCart1 = new MyCart(userName); IMyCartService iMyCartService1 = new MyCartServiceImpl(); Set<MyCart> myCartSet = iMyCartService1.myCartSelectGoods(myCart1); req.setAttribute("myCartSet", myCartSet); req.getRequestDispatcher("myCart.jsp").forward(req, resp); } else { req.setAttribute("msg", "操作失败!"); req.getRequestDispatcher("goodsResult.jsp").forward(req, resp); } break; case 1: boolean sb3 = iMyCartService.myCartDeleteGoods(myCart, judgement); if (sb3) { MyCart myCart1 = new MyCart(userName); IMyCartService iMyCartService1 = new MyCartServiceImpl(); Set<MyCart> myCartSet = iMyCartService1.myCartSelectGoods(myCart1); req.setAttribute("myCartSet", myCartSet); req.getRequestDispatcher("myCart.jsp").forward(req, resp); } else { req.setAttribute("msg", "操作失败!"); req.getRequestDispatcher("goodsResult.jsp").forward(req, resp); } break; case 10: MyCart myCart0 = new MyCart(userName); boolean sb4 = iMyCartService.myCartDeleteGoods(myCart0, judgement); if (sb4) { MyCart myCart1 = new MyCart(userName); IMyCartService iMyCartService1 = new MyCartServiceImpl(); Set<MyCart> myCartSet = iMyCartService1.myCartSelectGoods(myCart1); req.setAttribute("myCartSet", myCartSet); req.getRequestDispatcher("myCart.jsp").forward(req, resp); } else { req.setAttribute("msg", "清空失败!"); req.getRequestDispatcher("goodsResult.jsp").forward(req, resp); } break; default: System.out.println("sb"); } } }
前端页面
购物车.jsp
<%@ page import="java.util.Set" %> <%@ page import="com.hyy.taobao.api.entity.MyCart" %> <%@ page import="com.hyy.taobao.api.entity.User" %> <%-- Created by IntelliJ IDEA. User: Lenovo Date: 2021/4/14 Time: 9:26 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>购物车</title> <style> .right { display: inline-block; } table { display: inline-block; } </style> </head> <body> <h3>${msg}</h3> <hr> <table border="1"> <tr> <th>商品名称</th> <th>商品单价</th> <th>商品数量</th> </tr> <c:if test="${myCartSet!=null}"> <c:forEach items="${myCartSet}" var="myCart"> <c:if test="${myCart != null}"> <tr> <td>${myCart.goodsName}</td> <td>${myCart.goodsPrice}</td> <td>${myCart.goodsNumber}</td> <td> <form action="/deleteGoods" class="right"> <input type="hidden" name="goodsName" value="${myCart.goodsName}"> <input type="hidden" name="judgement" value="-1"> <button type="submit">-</button> </form> </td> <td> <form action="/deleteGoods" class="right"> <input type="hidden" name="goodsName" value="${myCart.goodsName}"> <input type="hidden" name="judgement" value="0"> <button type="submit">删除该商品</button> </form> </td> <td> <form action="/deleteGoods" class="right"> <input type="hidden" name="goodsName" value="${myCart.goodsName}"> <input type="hidden" name="judgement" value="1"> <button type="submit">+</button> </form> </td> </tr> </c:if> <c:if test="${myCart == null}"> <h3>空</h3> </c:if> </c:forEach> <c:if test="${myCartSet == null}"> <h3>空</h3> </c:if> </c:if> </table> <h3>商品总价: <c:set scope="request" var="sum" value="0"/> <c:if test="${myCartSet!=null}"> <c:forEach items="${myCartSet}" var="myCart"> <c:if test="${myCart!=null}"> <c:set scope="request" var="goods" value="${myCart.goodsNumber*myCart.goodsPrice}"></c:set> <c:set scope="request" var="sum" value="${requestScope.sum+requestScope.goods}"></c:set> </c:if> </c:forEach> ${requestScope.sum}元 </c:if> <c:if test="${myCartSet==null}"> 0元 </c:if> </h3> <form action="/deleteGoods" class="right"> <input type="hidden" name="judgement" value="10"> <button type="submit">清空购物车</button> </form> <form action="taobaoIndex.jsp" method="post"> <button>返回首页</button> </form> </body> </html>