本次Java Web实训的项目是 西蒙购物网

一、功能需求

1、只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单、查看订单。

2、只有管理员才有权限进入购物网后台管理,进行用户管理、类别管理、商品管理与订单管理

二、设计思路

1、采用MVC设计模式

分层架构:展现层(JSP)<——>控制层(Servlet)<——>业务层(Service)<——>模型层(Dao)<——>数据库(DB)

简单列举了下我们实训项目——西蒙购物网的功能需求与设计思路

详情请看我们老师的博客——西蒙购物网-上

本次的西蒙购物网结构如下

上学期在老师的带领下学习了学生管理系统,本次实训项目——西蒙购物网的模型层(dao)与业务层(service)以及数据库(db)直接复制老师的代码。但是我们需要对模型层(到)与业务层(service)的代码进行测试。

测试UserDaoImpl

测试CategoryDaoImpl

测试ProductDaoImpl

测试OrderDaoImpl

模型层(dao)测试结束,现在测试服务层(service)

测试UserService

测试CategoryService

测试ProductService

测试OrderService

服务层(service)测试结束

                                    西蒙购物网——中

在地址栏里localhost:8080/simonshop/之后输入login?username=admin&password=12345之后敲回车:

跳转到后台的管理页面/backend/management.jsp

服务器端的控制台,结果如下:

在地址栏里localhost:8080/simonshop/之后输入login?username=郑晓红&password=11111之后敲回车:

跳转到前台显示。

服务器端的控制台,结果如下:

在地址栏里localhost:8080/simonshop/之后输入login?username=李晓明&password=903456之后敲回车:

服务器端的控制台,结果如下:

测试注销功能。

先以普通用户登录成功。

服务器端的控制台,结果如下:

登录成功,现在测试用户注销功能:

输入logout

跳转到登录页面

服务器端的控制台,结果如下:

测试用户注册功能

访问http://localhost:8080/simonshop/register?username=张三&password=3241231&telephone=18219768354,敲回车,查看结果:

服务器端的控制台,结果如下:

打开NaviCat查看用户表,看看是否插入了新的用户记录?

当我们注册的电话号码大于11位的时候,是否可以注册成功呢?

现在来注册电话号码大于11位的用户。

访问http://localhost:8080/simonshop/register?username=李四&password=3241231&telephone=181219783545,敲回车,查看结果:

服务器端的控制台,结果如下:

确实在控制台输出了“遗憾,注册失败,跳转到注册页面!”信息,但是还抛出了一个异常:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'telephone' at row 1,显示方式不是我们喜欢的,当然问题出在模型层,大家去修改UserDaoImpl里的insert方法。
很简单,只需要将catch字句里的e.printStackTrace();改成System.err.println("SQL异常:" + e.getMessage());

测试显示类别控制程序功能

重启服务器,访问http://localhost:8080/simonshop/showCategory

服务器端的控制台,结果如下:

测试显示商品列表功能

重启服务器,访问http://localhost:8080/simonshop/showProduct?categoryId=1

服务器端的控制台,结果如下:

刚刚我们测试了category=1时的商品信息,要是用户输入一个不存在的category=5时,程序会报错。我们对ShowProductServlet进行修改。

package net.lyh.shop.servlet;/*** 功能:显示商品列表的控制程序*     通过业务层访问后台数据,*     然后将数据返回给前台页面* 作者:李永豪* 日期:2019年12月11日*/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 javax.servlet.http.HttpSession;import net.lyh.shop.bean.Product;
import net.lyh.shop.service.CategoryService;
import net.lyh.shop.service.ProductService;@WebServlet("/showProduct")
public class ShowProductServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取类别标识符int categoryId = Integer.parseInt(request.getParameter("categoryId"));// 创建商品类别服务对象CategoryService categoryService = new CategoryService();// 由类别标识符获取类别名if (categoryService.findCategoryById(categoryId) != null) {String categoryName = categoryService.findCategoryById(categoryId).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 (int i = 0; i < products.size(); i++) {System.out.println(products.get(i));}} else {response.sendRedirect(request.getContextPath() + "/login.jsp");System.out.println("分类编号不存在");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

现在我们试一试

servlet测试完成

西门购物网——下

web目录里创建images目录,存放项目所需图片文件:

web目录里常见css子目录,在里面创建main.css文件:

/* 样式 */
body {margin: 0px;text-align: center;background: url("../images/frontBack.jpg") no-repeat;background-size: 100%
}table {margin: 0 auto;font-size: 14px;color: #333333;border-width: 1px;border-color: khaki;border-collapse: collapse;
}table th {border-width: 1px;padding: 8px;border-style: solid;border-color: gainsboro;background-color: honeydew;
}table td {border-width: 1px;padding: 8px;border-style: solid;border-color: gainsboro;background-color: #ffffff;
}/*登录页面样式*/
.login {width: 400px;height: 340px;background-color: honeydew;border: solid 2px darkgrey;left: 50%;top: 50%;position: absolute;margin: -170px 0 0 -200px;
}.login .websiteTitle, .title {border: solid 1px floralwhite;
}/*注册页面样式*/
.register {width: 400px;height: 350px;background-color: honeydew;border: solid 2px darkgrey;left: 50%;top: 50%;position: absolute;margin: -175px 0 0 -200px;
}/*显示类别页面样式*/
.showCategory {width: 400px;height: 350px;background-color: honeydew;border: solid 2px darkgrey;left: 50%;top: 50%;position: absolute;margin: -150px 0 0 -200px;
}/*生成订单页面样式*/
.makeOrder {width: 400px;height: 400px;background-color: honeydew;border: solid 2px darkgrey;left: 50%;top: 50%;position: absolute;margin: -200px 0 0 -200px;
}/*显示订单页面样式*/
.showOrder {width: 400px;height: 400px;background-color: honeydew;border: solid 2px darkgrey;left: 50%;top: 50%;position: absolute;margin: -200px 0 0 -200px;
}

web目录里创建scripts子目录,在里面创建check.js文件:

/*** 检验登录表单** @returns {Boolean}*/
function checkLoginForm() {var username = document.getElementById("username");var password = document.getElementById("password");if (username.value == "") {alert("用户名不能为空!");username.focus();return false;}if (password.value == "") {alert("密码不能为空!");password.focus();return false;}return true;
}/*** 检验注册表单** @returns {Boolean}*/
function checkRegisterForm() {var username = document.getElementById("username");var password = document.getElementById("password");var telephone = document.getElementById("telephone");if (username.value == "") {alert("用户名不能为空!");username.focus();return false;}if (password.value == "") {alert("密码不能为空!");password.focus();return false;}var pattern = "/^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/";if (!pattern.exec(telephone)) {alert("非法手机号!");telephone.focus();return false;}return true;
}

WEB-INF\lib目录里添加支持jstljar包:
jar包下载地址:http://tomcat.apache.org/taglibs/standard/

编辑login.jsp

<%@ 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="scripts/check.js" type="text/javascript"></script><link href="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>

web.xml文件里将login.jsp设置为首页文件:

重启服务器:

不输入用户名与密码,单击【登录】按钮:

输入用户名,但不输入密码,单击【登录】按钮

输入管理员用户名与密码:admin12345

服务器端的控制台,结果如下:

重启服务器,再以普通用户登录:郑晓红11111

服务器端的控制台,结果如下:

重启服务器,输入错误的用户名或密码:李文丽12340

注册页面register.jsp

<%@ 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="css/main.css" rel="stylesheet" type="text/css"/><script src="scripts/check.js" type="text/javascript"></script>
</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 align="center">电话</td><td><input id="telephone" type="text" name="telephone"/></td></tr><tr align="center"><td colspan="2"><input type="submit" value="注册" onclick="return checkRegisterForm();"/><input type="reset" value="重置"/></td></tr></table></form></div><div class="footer"><p><a href="login.jsp">切换到登录页面</a></p></div>
</div><c:if test="${registerMsg!=null}"><script type="text/javascript">alert("${registerMsg}")</script><c:set var="registerMsg" value=""/>
</c:if>
</body>
</html>

启动服务器:单击注册

什么也不输入,单击【注册】按钮:

输入用户名,单击【注册】按钮:

输入用户名、密码和电话,单击【注册】按钮:

单击【确定】按钮,跳转到登录页面:

Java Web实训-西蒙购物网相关推荐

  1. Java Web实训项目:西蒙购物网(Simonshop)

    一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...

  2. Java Web实训项目:西蒙购物园

    一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...

  3. Java Web实训项目:西蒙购物网(下)

    文章目录 四.实现步骤 (九)准备图片资源 (十)CSS样式文件 (十一)JavaScript脚本文件 (十二)添加JSTL的jar包 (十三)展现层页面(XXX.jsp) 1.登录页面login.j ...

  4. Java Web实训项目:西蒙购物网(中)

    文章目录 四.实现步骤 (八)控制层(XXXServlet) 1.登录处理类LoginServlet 2.注销处理类LogoutServlet 3.注册处理类RegisterServlet 4.显示类 ...

  5. Java Web实训项目:西蒙购物网(上)

    文章目录 一.功能需求 1.普通用户 2.管理员用户 二.设计思路 (一)采用MVC设计模式

  6. Java Web实训项目:西蒙购物网(2016)

    目录 一.功能需求 1.普通用户 2.管理员用户 二.设计思路

  7. 计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw ...

  8. 西蒙购物网的测试(访问层测试)

    西蒙购物网的测试(访问层测试) ****(一)创建数据库 创建MySQL数据库simonshop,包含四张表:用户表(t_user).类别表(t_category).商品表(t_product)和订单 ...

  9. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  10. 基于java 工单管理_实训任务工单1-2(编写规范Java代码) 实训任务工单1-2(编写规范Java代码).docx_学小易找答案...

    [其它]实训任务工单4-1(泛型类.泛型方法的应用) 实训任务工单4-1(泛型类.泛型方法的应用).docx [简答题]教学工单5-1Java序列化机制的使用 [填空题]The name of my ...

最新文章

  1. 58前端内推笔试2017(含答案)
  2. 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
  3. 全球及中国箱包市场需求前景与投资动态分析报告2022版
  4. hbase 2.2.6表及数据的增删改查命令行示例
  5. 计算机开机时间停在上次关机,怎么在电脑开机的时候查看上次关机前的操作
  6. [转]细说Redis监控和告警
  7. 知识总结和记录——递归
  8. 【Android】实例 忐忑的精灵
  9. 51单片机的初了解(4)
  10. mysql5.5 mysqldump_mysql5.5mysqldump原文翻译_MySQL
  11. python利器app怎么查文献-基于Python的参考文献检索工具开发
  12. php怎么黑admin管理员密码是什么,tplink管理员密码是什么?
  13. 虚拟机器人平台CoppeliaSim(Vrep)的逆运动学教学
  14. hexo+yilia添加复制代码块的功能
  15. 夜神模拟器4K模拟配置
  16. 为什么需要制定计划?
  17. PHP实现生成推广海报
  18. 17-MyCat-MyCAT主要作用
  19. Unity:从入门到入行【全面总结,建议收藏】
  20. Gnuradio中的命名规则和数据类型

热门文章

  1. Rockchip官方开发板的Android固件下载地址汇总
  2. Windows安全机制---数据执行保护:DEP机制
  3. DICOM影像中的窗宽窗位
  4. pandas入门与数据准备与简单筛选统计
  5. pragma comment的使用
  6. 自定义devexprsss分页控件
  7. walking机器人仿真教程-应用-多点导航结合摄像头实现在线查房
  8. python xlsm_“xlwings”:不支持写入.xlsm文件?
  9. Redis 源码分析跳跃表(skiplist)
  10. ssh弱口令暴力破解