购物车展示类
package net.lmq.shop.servlet;
import net.lmq.shop.bean.Product;
import net.lmq.shop.service.ProductService;
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.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@WebServlet("/showCart")
public class ShowCartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取商品类别标识符
int categoryId = Integer.parseInt(request.getParameter("categoryId"));
//获取session对象
HttpSession session = request.getSession();
//获取购物车
LinkedHashMap<Integer,Integer> cart = (LinkedHashMap<Integer, Integer>) session.getAttribute("cart");
//判断购物车是否为空
if(cart != null){
//定义购物表
List<HashMap<String,Object>> shoppingTable = new ArrayList<HashMap<String,Object>>();
//创建商品服务对象
ProductService productService = new ProductService();
//购物总金额
double totalPrice = 0.0;
//遍历购物车
for(Integer id:cart.keySet()){//这个id是什么
//获取商品对象
Product product = productService.findProductById(id);
//生成购物表记录
HashMap<String,Object> shoppingItem = new HashMap<String, Object>();
shoppingItem.put("id",product.getId());
shoppingItem.put("name",product.getName());
shoppingItem.put("price",product.getPrice());
shoppingItem.put("amount",cart.get(id));
shoppingItem.put("sum",product.getPrice()*cart.get(id));
//将购物表记录添加到购物表中
shoppingTable.add(shoppingItem);
//累加购买金额
totalPrice = totalPrice + (Double) shoppingItem.get("sum");
}
//将购物表和购物总金额保存到session里
session.setAttribute("shoppingTable",shoppingTable);
session.setAttribute("totalPrice",totalPrice);
//重定向跳转
response.sendRedirect(request.getContextPath()+"/showProduct?categoryId="+categoryId);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
网页输入:showCart?categoryId=1
控制台输出:
**操作购物车,**增删
package net.lmq.shop.servlet;
import net.lmq.shop.bean.Product;
import net.lmq.shop.service.ProductService;
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.LinkedHashMap;
@WebServlet("/operateCart")
public class OperateCartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取商品标识符
int id = Integer.parseInt(request.getParameter("id"));
//获取商品操作
String operation = request.getParameter("operation");
//获取session
HttpSession session = request.getSession();
//从session里获取购物车(键:商品标识符,值:购买数量)
LinkedHashMap<Integer,Integer> cart = (LinkedHashMap<Integer, Integer>) session.getAttribute("cart");
//判断购物车是否为空
if(cart == null){
//创建购物车
cart = new LinkedHashMap<Integer, Integer>();
//将购物车保存到session里,便于在不同页面访问购物车
session.setAttribute("cart",cart);
}
if(operation.equals("add")){
//将商品添加到购物车
if(cart.containsValue(id)){//该商品已经购买过
//购买数量增加1
cart.put(id,cart.get(id)+1);
}else {
cart.put(id,1);
}
}else if(operation.equals("delete")){
//将商品从购物车删除
if(cart.get(id)>1){
cart.put(id,cart.get(id)-1);
}else {
cart.remove(id);
}
}
//创建商品服务对象
ProductService productService = new ProductService();
//获取该商品标识符
int categoryId = productService.findProductById(id).getCategoryId();
//重定向到显示购物车控制程序
response.sendRedirect(request.getContextPath()+"/showCart?categoryId="+categoryId);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
订单处理类,添加订单并显示
/**
* 功能:生成订单控制程序
* 作者:赖明庆
* 日期:2019.12.18
*/
package net.lmq.shop.servlet;
import net.lmq.shop.bean.Order;
import net.lmq.shop.service.OrderService;
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 java.io.IOException;
import java.util.Date;
@WebServlet("/makeOrder")
public class MakeOrderServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求对象的字符编码
request.setCharacterEncoding("utf-8");
// 获取表单提交数据
String username = request.getParameter("username");
String telephone = request.getParameter("telephone");
Double totalPrice = Double.parseDouble(request.getParameter("totalPrice"));
String deliveryAddress = request.getParameter("deliveryAddress");
// 创建订单对象
Order order = new Order();
// 设置订单属性
order.setUsername(username);
order.setTotalPrice(totalPrice);
order.setTelephone(telephone);
order.setDeliveryAddress(deliveryAddress);
order.setOrderTime(new Date());
// 创建订单服务
OrderService orderService = new OrderService();
// 添加订单
orderService.addOrder(order);
// 获取最后一个订单
Order lastOrder = orderService.findLastOrder();
// 保存到session里
request.getSession().setAttribute("lastOrder", lastOrder);
// 重定向到显示订单页面
response.sendRedirect(request.getContextPath() + "/frontend/showOrder.jsp");
System.out.println(lastOrder);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
支付处理类
/**
* 功能:生成订单控制程序
* 作者:赖明庆
* 日期:2019.12.18
*/
package net.lmq.shop.servlet;
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 java.io.IOException;
@WebServlet("/pay")
public class PayServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求对象的字符编码
request.setCharacterEncoding("utf-8");
//待做
//让session失效
request.getSession().invalidate();
//重定向到登录页面
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
**显示用户信息**
```java
/**
* 功能:生成订单控制程序
* 作者:赖明庆
* 日期:2019.12.18
*/
package net.lmq.shop.servlet;
import net.lmq.shop.bean.User;
import net.lmq.shop.service.UserService;
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.List;
@WebServlet("/showUser")
public class ShowUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建用户服务对象
UserService userService = new UserService();
//获取全部用户
List<User> users = userService.findAllUsers();
//获取session对象
HttpSession session = request.getSession();
session.setAttribute("users",users);
//重定向到显示用户页面
response.sendRedirect(request.getContextPath()+"/backend/showUser.jsp");
for(User user:users){
System.out.println(user);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
网页输入:
跳转:
接下来开始写jsp页面,
基础的图片,css,scrip和架包t都准备好
登录页面:
这次用到了c:标签,这个学了两次课了,但感觉还是没学懂
出了一点小问题,页面会一直调用第一次写的css样式,解决:改一下css的包名
登录页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
<base href="${basePath}">
<script src="style/scripts/check.js" type="text/javascript"></script>
<link href="style/css/main.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="login">
<div class="websiteTitle">
<h1>西蒙购物网</h1>
</div>
<div class="title">
<h3>用户登录</h3>
</div>
<div class="main">
<form id="frmLogin" action="login" method="post">
<table>
<tr>
<td align="center">账号</td>
<td><input id="username" type="text" name="username"/></td>
</tr>
<tr>
<td align="center">密码</td>
<td><input id="password" type="password" name="password"/></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="登录" οnclick="return checkLoginForm();"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</div>
<div class="footer">
<p>如果你不是本站用户,单击<a href="frontend/register.jsp">此处</a>注册。</p>
</div>
</div>
<c:if test="${registerMsg!=null}">
<script type="text/javascript">alert("${registerMsg}")</script>
<c:remove var="registerMsg"/>
</c:if>
<c:if test="${loginMsg!=null}">
<script type="text/javascript">alert("${loginMsg}")</script>
<c:remove var="loginMsg"/>
</c:if>
</body>
</html>
登录成功:
控制台输出:这是之前写的servlet的输出
登录失败:
登录错误:
注册页面:
遇到了一点问题,开始css和js无法加载,解决:路径问题,css和js是绝对路径,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>用户注册</title>
<base href="${basePath}">
<script src="styles/scripts/check.js" type="text/javascript"></script>
<link href="styles/css/main.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="register">
<div class="websiteTitle">
<h1>西蒙购物</h1>
</div>
<div class="title">
<h3>用户注册</h3>
</div>
<div class="main">
<form action="register" method="post">
<table>
<tr>
<td>账号</td>
<td><input id="username" type="text" name="username"/> </td>
</tr>
<tr>
<td>密码</td>
<td><input id="password" type="password" name="password"/> </td>
</tr>
<tr>
<td>电话</td>
<td><input id="telephone" type="text" name="telephone"/> </td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="注册" onclick="return checkRegisterForm();"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</div>
</div>
<c:if test="${registerMsg!=null}">
<script type="text/javascript">alert("${registerMsg}")</script>
<c:set var="registerMsg" value=""/>
</c:if>
</body>
</html>
注册成功:
注册失败:已存在用户,这个正则处理有点问题
当用户名或密码为空
显示商品类别:
package net.lmq.shop.servlet;
import net.lmq.shop.bean.Category;
import net.lmq.shop.bean.Product;
import net.lmq.shop.service.CategoryService;
import net.lmq.shop.service.ProductService;
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.List;
@WebServlet("/showProduct")
public class ShowProductServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取商品类别标识
int categoryId = Integer.parseInt(request.getParameter("categoryId"));
//创建商品类别服务对象
CategoryService categoryService = new CategoryService();
Category category = categoryService.findCategoryById(categoryId);
if(category != null) {
//由标识得到商品类别名称
String categoryName = category.getName();
//创建商品服务对象
ProductService productService = new ProductService();
//获取指定商品类别的商品
List<Product> products = productService.findProductsByCategoryId(categoryId);
//获取session
HttpSession session = request.getSession();
//将商品信息放到session
session.setAttribute("products", products);
//重定向到显示商品信息页面
response.sendRedirect(request.getContextPath() + "/frontend/showProduct.jsp?categoryName=" + categoryName);
//在控制台显示商品信息
for (Product product : products) {
System.out.println(product);
}
}else {
System.out.println("没有该商品类别");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
显示购物车:
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>显示购物车</title>
<base href="${basePath}">
</head>
<body>
<h3>${username}的购物车</h3>
<table>
<tr>
<<th>商品编号</th>
<th>商品名称</th>
<th>销售价格</th>
<th>购买数量</th>
<th>合计金额</th>
<th>用户操作</th>
</tr>
<c:forEach var="shoppingItem" items="${shoppingTable}">
<tr>
<td>${shoppingItem.id}</td>
<td>${shoppingItem.name}</td>
<td>${shoppingItem.price}</td>
<td>${shoppingItem.amount}</td>
<td>${shoppingItem.sum}</td>
<td><a href="operateCart?id=${shoppingItem.id}&operation=delete" ><删除/a></td>
</tr>
</c:forEach>
<tr>
<th>总金额</th>
<td></td>
<td></td>
<td></td>
<c:choose>
<c:when test="${totalPrice==null}">
<th style="color:red">¥0.00</th>
</c:when>
<c:otherwise>
<th style="color:red">¥${totalPrice}</th>
</c:otherwise>
</c:choose>
</tr>
</table>
<hr width="800px">
<c:choose>
<c:when test="${totalPrice=null}">
<a href="frontend/makeOrder.jsp?totalPrice=0.00">生成订单</a>
</c:when>
<c:otherwise>
<a href="frontend/makeOrder.jsp?totalPrice=${totalPrice}">生成订单</a>
</c:otherwise>
</c:choose>
<c:if test="${orderMsg!=null}">
<script type="text/javascript">alert("${orderMsg}")</script>
<c:remove var="orderMsg"/>
</c:if>
</body>
</html>
显示商品:(session和传输数据的得到方式是一样的,${名字})
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>商品显示信息</title>
<base href="${basePath}">
<link href="styles/css/main.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>西蒙购物</h1>
<hr width="700px"/>
登录用户;<span style="color:red">${username}</span>
<c:forEach var="i" begin="1" end="5">
</c:forEach>
<a href="login">注销</a>
<hr width="700px"/>
欢迎选购【<span style="color:blue;;font-weight: bold;">${categoryName}</span> 】
<table border="0">
<c:forEach varStatus="status" var="product" items="${products}">
<c:if test="${status.count%5==0}">
<tr>
</c:if>
<td>
<table border="0">
<tr><img src="images/product${product.id}.jpg" width="60px" height="60px"></tr>
<tr>
<td><b>商品编号:</b></td>
<td>${product.id}</td>
</tr>
<tr>
<td><b>商品名称:</b></td>
<td>${product.name}</td>
</tr>
<tr>
<td><b>销售价格:</b></td>
<td>${product.price}</td>
</tr>
<tr>
<td><b>上架时间:</b></td>
<td><fmt:formatDate value="${product.addTime}" pattern="yyyy-MM-dd"/></td>
</tr>
<tr>
<td><b>用户操作:</b></td>
<td><a href="operateCart?id=${product.id}&operation=add">加入购物车</a></td>
</tr>
</table>
</td>
<c:if test="${status.count%4==0}">
</tr>
</c:if>
</c:forEach>
</table>
<hr width="700px">
<a href="showCategory">返回商品类别展示页面</a>
<hr width="700px">
<jsp:include page="showCart.jsp"/>
</body>
</html>
生成订单:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>生成订单</title>
<base href="${basePath}">
<link href="styles/css/main.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="makeOrder">
<div class="websiteTitle">
<h1>西蒙购物网</h1>
</div>
<div>
登录用户:<span style="color: red;">${username}</span>
<c:forEach var="i" begin="1" end="5">
</c:forEach>
<a href="logout">注销</a>
</div>
<div class="title">
<h3>生成订单</h3>
</div>
<div class="main">
<form action="makeOrder" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username" readonly="readonly"
value="${username}"/></td>
</tr>
<tr>
<td>联系电话</td>
<td><input type="text" name="telephone"/></td>
</tr>
<tr>
<td>总金额</td>
<td><input type="text" name="totalPrice" readonly="readonly"
value="${totalPrice}"/></td>
</tr>
<tr>
<td>送货地址</td>
<td><input type="text" name="deliveryAddress"/></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="生成订单"/> <input
type="reset" value="重置"/></td>
</tr>
</table>
</form>
</div>
<div class="footer">
<p><a href="showCategory">返回商品类别页面</a></p>
</div>
</div>
</body>
</html>
显示订单:
管理员用户
基础页面:
查看用户:
新写的类:添加用户
添加了js控制,在页面里写的,js如果写在外部文件里就是一次性,所以js写的时候可以先在页面里写,写完整了再移到外部文件
addUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<c:set var="basePath"
value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${path}/"/>
<!DOCTYPE html>
<html>
<head>
<title>显示用户信息</title>
<base href="${basePath}">
<link href="styles/css/main.css" rel="stylesheet" type="text/css"/>
<script src="styles/scripts/check.js" type="text/javascript"></script>
</head>
<body>
<hr>
<table width="90%" border="0px">
<tr>
<td align="left">登录用户:<span style="color: red;">${username}</span></td>
<td align="right"><a href="user/logout" target="_parent">注销</a></td>
</tr>
</table>
<form action="addUser" method="post">
<table>
<tr>
<td>用户名</td>
<td><input id="username" type="text" name="username"/> </td>
</tr>
<tr>
<td>密码</td>
<td><input id="password" type="password" name="password"/> </td>
</tr>
<tr>
<td>电话</td>
<td><input id="telephone" type="text" name="telephone"/> </td>
</tr>
<tr>
<td>权限(1/0)</td>
<td><input id="popedom" type="text" name="popedom"></td>
</tr>
<tr>
<td colspan="2">
<input id="tj" type="submit" value="添加" onclick="return checkRegisterForm();"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
<script>
document.getElementById("tj").onclick = function () {
var popedom = document.getElementById("popedom");
if (popedom.value == "") {
alert("权限不能为空!");
password.focus();
return false;
}
switch (popedom.value) {
case "1":
return true;
break;
case "0":
return true;
break;
default:
alert("1:普通用户,0:管理员权限,其他不可以");
popedom.focus();
return false;
}
}
</script>
</body>
</html>
添加用户处理servlet
package net.lmq.shop.servlet;
import net.lmq.shop.bean.User;
import net.lmq.shop.service.UserService;
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.sql.Timestamp;
import java.util.List;
@WebServlet("/addUser")
public class addUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求对象的编码
request.setCharacterEncoding("utf-8");
//获取session
HttpSession session = request.getSession();
//获取页面用户信息
String username = request.getParameter("username");
String password = request.getParameter("password");
String telephone = request.getParameter("telephone");
Timestamp registerTime = new Timestamp(System.currentTimeMillis());
int popedom =Integer.parseInt(request.getParameter("popedom")) ;
//创建用户对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setTelephone(telephone);
user.setRegisterTime(registerTime);
user.setPopedom(popedom);
//创建用户服务对象
UserService userService = new UserService();
List<User> coun = userService.findUsersByUsername(username);
//判断用户是否已存在
if(coun.size() > 0 ){
System.out.println("已经有此用户"+coun);
//设置session
session.setAttribute("registerMsg","抱歉,用户注册失败");
//重定向跳转注册页面
response.sendRedirect(request.getContextPath()+"/backend/addUser.jsp");
//控制台输出
System.out.println("用户已存在,注册失败,跳转到注册页面");
}else {
//调用添加用户方法
int count = userService.addUser(user);
//判断是否注册成功
if(count > 0){
//设置session
session.setAttribute("registerMsg","恭喜添加成功");
//重定向跳转
response.sendRedirect(request.getContextPath()+"/backend/main.jsp");
//控制台输出
System.out.println("恭喜,用户添加成功,跳转到管理员页面");
}else {
//设置session
session.setAttribute("registerMsg","抱歉,用户添加失败");
//重定向跳转注册页面
response.sendRedirect(request.getContextPath()+"/backend/addUser.jsp");
//控制台输出
System.out.println("抱歉,用户注册失败,跳转页面");
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
权限做了限制: