Java Web实训-西蒙购物网
本次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
目录里添加支持jstl
的jar
包:
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
设置为首页文件:
重启服务器:
不输入用户名与密码,单击【登录】按钮:
输入用户名,但不输入密码,单击【登录】按钮
输入管理员用户名与密码:admin
,12345
服务器端的控制台,结果如下:
重启服务器,再以普通用户登录:郑晓红
,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实训-西蒙购物网相关推荐
- Java Web实训项目:西蒙购物网(Simonshop)
一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...
- Java Web实训项目:西蒙购物园
一.功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进入购物网后台管理,进行用户管理.类别管理.商品管理与订单管理. 二.设计思 ...
- Java Web实训项目:西蒙购物网(下)
文章目录 四.实现步骤 (九)准备图片资源 (十)CSS样式文件 (十一)JavaScript脚本文件 (十二)添加JSTL的jar包 (十三)展现层页面(XXX.jsp) 1.登录页面login.j ...
- Java Web实训项目:西蒙购物网(中)
文章目录 四.实现步骤 (八)控制层(XXXServlet) 1.登录处理类LoginServlet 2.注销处理类LogoutServlet 3.注册处理类RegisterServlet 4.显示类 ...
- Java Web实训项目:西蒙购物网(上)
文章目录 一.功能需求 1.普通用户 2.管理员用户 二.设计思路 (一)采用MVC设计模式
- Java Web实训项目:西蒙购物网(2016)
目录 一.功能需求 1.普通用户 2.管理员用户 二.设计思路
- 计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw
计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA项目实训管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw ...
- 西蒙购物网的测试(访问层测试)
西蒙购物网的测试(访问层测试) ****(一)创建数据库 创建MySQL数据库simonshop,包含四张表:用户表(t_user).类别表(t_category).商品表(t_product)和订单 ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- 基于java 工单管理_实训任务工单1-2(编写规范Java代码) 实训任务工单1-2(编写规范Java代码).docx_学小易找答案...
[其它]实训任务工单4-1(泛型类.泛型方法的应用) 实训任务工单4-1(泛型类.泛型方法的应用).docx [简答题]教学工单5-1Java序列化机制的使用 [填空题]The name of my ...
最新文章
- 58前端内推笔试2017(含答案)
- 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
- 全球及中国箱包市场需求前景与投资动态分析报告2022版
- hbase 2.2.6表及数据的增删改查命令行示例
- 计算机开机时间停在上次关机,怎么在电脑开机的时候查看上次关机前的操作
- [转]细说Redis监控和告警
- 知识总结和记录——递归
- 【Android】实例 忐忑的精灵
- 51单片机的初了解(4)
- mysql5.5 mysqldump_mysql5.5mysqldump原文翻译_MySQL
- python利器app怎么查文献-基于Python的参考文献检索工具开发
- php怎么黑admin管理员密码是什么,tplink管理员密码是什么?
- 虚拟机器人平台CoppeliaSim(Vrep)的逆运动学教学
- hexo+yilia添加复制代码块的功能
- 夜神模拟器4K模拟配置
- 为什么需要制定计划?
- PHP实现生成推广海报
- 17-MyCat-MyCAT主要作用
- Unity:从入门到入行【全面总结,建议收藏】
- Gnuradio中的命名规则和数据类型