黑马旅游网(web阶段综合练习)

第一天 页面搭建及注册功能

1 项目搭建

1.1 项目介绍

为了巩固web基础知识,提升综合运用能力,故而讲解此案例。要求,每位同学能够独立完成此案例。

1.2 技术选型

前台内容使用bootstrap框架结合jq , ajax , json等搭建而成。

采用了三层架构的设计模式

1.3 数据库设计

一个存在八张表,分别代表用户表,地址表,订单表,关系表,商品表,及部分细节表格

1.4 创建maven项目

2 用户注册基本功能

2.1 需求分析

2.2 代码实现

页面部分

Servlet部分

protected void register(request, response) throws Exception {

// 1.接收请求参数 map

request.getParameterMap();

// 2.封装到User实体

new User();

// 3.调用service注册

userService.register(user);

// 4.判断

if (getSuccess()) { // 注册成功

sendRedirect("/register_ok.jsp");

} else {// 注册失败

setAttribute("message", getMessage());

getRequestDispatcher("register.jsp")

}

}

UserService(接口+实现)

ResultInfo register(User user);

UserDao

/**

* 根据用户名查询

*/

User findByUsername(String username);

/**

* 根据手机号进行查询

*/

User findByTelephone(String telephone);

/**

* 注册

*/

void save(User user);

第二天 注册页文本校验短信验证码等

校验用户名

通过ajax技术实现对用户名的校验。通过对此功能的简单修改,实现了输入用户名后,焦点离开文本框后立即给出结果判断此用户名是否已被注册过.

页面部分

// 绑定事件

$("#username").blur(function() {

// 获取属性值

let username = this.value;

// 通过ajax发送请求使用get函数

let url = '${pageContext.request.contextPath}/UserServlet';

let data = 'action=ajaxCheackUsername&username='+username;

$.get(url,data,function (resp) {

// 处理结果

//alert(resp.message)

if (resp.success){

$("#userInfo").css("color","green").html(resp.message);

}else {

$("#userInfo").css("color","red").html(resp.message);

}

});

});

servlet部分

protected void ajaxCheackUsername(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 接收请求参数

String username = request.getParameter("username");

// 调用service查询

User user = userService.findByUsername(username);

// 判断结果

ResultInfo resultInfo = null;

// 已存在的情况

if (user!=null){

resultInfo = new ResultInfo(false,"用户名已存在");

}else {

// 不存在的情况

resultInfo = new ResultInfo(true,"√");

}

// 将结果转为json new ObjectMapper.writeValueAsString

ObjectMapper objectMapper = new ObjectMapper();

String s = objectMapper.writeValueAsString(resultInfo);

// 响应到客户端

// 声明格式

response.setContentType("application/json;charset=utf-8");

response.getWriter().write(s);

}

service部分

@Override

public User findByUsername(String username) {

SqlSession sqlSession = MyBatisUtils.openSession();

UserDao mapper = sqlSession.getMapper(UserDao.class);

User byUsername = mapper.findByUsername(username);

MyBatisUtils.release(sqlSession);

return byUsername;

}

阿里云短信服务调用

1.申请账号,选择服务

申请签名是最难的一部分,如果申请不到请耐心反复申请,请坚持下来,一定不要放弃希望,相信奇迹一定会出现的.

2.引入sdk

导入默认的工具文件

填入自己申请到的accessKey,就可以调用了

验证码是自己生成的随机数

手机号前台获取

验证码保存到session

// 签名

String signName = "MRYHL技术栈";

// 模版

String templateCode = "##########";

// json模板参数

String param = "{\"code\":\"" + code + "\"}";

try {

SendSmsResponse sendSmsResponse = SmsUtils.sendSms(telephone, signName, templateCode, param);

if (sendSmsResponse.getCode().equalsIgnoreCase("ok")){

System.out.println(code);

return new ResultInfo(true,"发送成功");

}

} catch (ClientException e) {

e.printStackTrace();

}

return new ResultInfo(false,"服务器忙...");

第三天 登陆与地址管理

1.登陆模块

1.1 账号密码登陆

1.2 验证码登陆

2.个人信息修改

3.地址管理

4.完成了修改 删除 设置默认的功能

第四天 导航分类查询

1.导航表

需求分析

绑定页面加载事件

向服务器发请求ajax ajaxFIndAll

将返回结果遍历,展示分析

页面导航栏内容存在mysql的数据库中,第一次访问的时候先从数据库中获取到内容,保存在缓存数据库redis中.之后的每一次调用都是在redis中查询.

2.Redis介绍与使用

简介

Redis(Remote Dictionary Server)是用C语言开发的一个开源的高性能键值对数据库。它的所有数据都是保存在内存中的,这也就决定了其读写速度之快,是其它硬盘保存数据的系统所无法匹敌的。

官方曾经给出过一组测试数据,50个并发执行100000个请求: 读的速度是110000次/s,写的速度是81000次/s

数据结构

Redis采用的是键值对存储,键的类型只能为字符串,值支持五种数据类型:

字符串:String

哈希:HashMap

双向链表:LinkedList

无序集合:HashSet

有序集合:LinkedHashSet

2.1 导航栏内容redis加载

缓存一致性问题

解决方案,我们对缓存相关进行增删改时,清空缓存,不要直接去修改数据库,通过java语言来实现功能(修改完毕后,可以通过jedis删除缓存数据),解决了缓存一致性的问题

第五天 列表分页显示,查询功能,购物车功能是实现.

列表分页需求分析

前台页面

servlet

service

Dao + xml

查询需求分析

详情展示

多表查询

关联查询(inner join),底层会产生笛卡尔积,三张表以上不建议使用

嵌套查询,底层不会产生笛卡尔积,但是操作步骤繁琐,开发使用不多【本次使用】

单表查询,java组合,互联网项目使用最多方案

servlet

service

routedao

前台页面

购物车功能,添加购物车,查看购物车,删除购物项

购物车相关内容

实体类

工具类

servlet

service

生成订单

创建OrderServlet

在session获取user对象

查询收货地址

从redis中获取购物车对象

将数据写入到request

转发到视图

protected void orderInfo(HttpServletRequest requsest, HttpServletResponse response) throws ServletException, IOException {

// 获取session中的用户对象

User currentUser = (User) requsest.getSession().getAttribute("currentUser");

// 查询收货地址

List

addressList = addressService.findByUid(String.valueOf(currentUser.getUid()));

// 从redis中获取购物车

Cart cart = CartUtils.redis2Cart(currentUser.getUid());

// 将数据写入到request中

requsest.setAttribute("addressList",addressList);

requsest.setAttribute("cart",cart);

// 转发视图

requsest.getRequestDispatcher("/order_info.jsp").forward(requsest,response);

}

设置过滤器

@WebFilter(urlPatterns = {"/home_index.jsp","/home_left.jsp","/AddressServlet","/CartServlet","/OrderServlet"})

修改前台显示order_info.jsp

  • ${entry.value.route.rname}
    7天无理由退货
  • ¥${entry.value.route.price}
  • X${entry.value.num}
  • 有货

黑马旅游网完整代码_GitHub - mr-yhl/tianjin_travel: 黑马旅游网项目练习相关推荐

  1. 旅游景点人流量代码php,用 PHP 爬虫做旅游数据分析

    随着物质的提高,旅游渐渐成为人们的焦点,火热的国庆刚刚过去,乘着这股余热,我想很多人都想知道,大家一般会去哪里玩呢,于是我花了10分钟写了一个采集马蜂窝游记的小程序,当然速度能有这么快,完全依赖于PH ...

  2. 黑马旅游网完整代码_JavaWeb+黑马旅游网

    JavaWeb+黑马旅游网 |____资料 |____16.黑马旅游网 |____15.Maven基础 |____14.Redis |____13.Ajax和JSON |____12.Jquery | ...

  3. 黑马旅游网完整代码_JavaWeb黑马旅游网 视频 下载

    课程目录: JavaWeb+黑马旅游网 |____资料 |____16.黑马旅游网 |____15.Maven基础 |____14.Redis |____13.Ajax和JSON |____12.Jq ...

  4. 慕课网高仿微信主界面完整代码

    微信主界面完整代码 Fragment+ViewPager实现 目录 前言 一.项目结构 二.使用步骤 前言 使用了ViewPager和Fragment的用法.支持滑屏显示界面和点击下标切换界面 . 一 ...

  5. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 01.系统需求 02.创建项目 2.1 创建项目 2.2 添加文件 03.菜单功能 04.退出功能 05.添加联系人 5.1 设 ...

  6. python写科学计算器代码_Python编程使用tkinter模块实现计算器软件完整代码示例...

    Python编程使用tkinter模块实现计算器软件完整代码示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python编程使用tkinter模块实现计算器软件完整代码示例 ...

  7. 黑马旅游网项目详细思路和完整代码整理 -附源码

    黑马旅游网项目详细思路和完整代码整理 前言 由于新冠病毒的原因,无法上学.百无聊赖下自己开始看视频学习,跟着视频做完了这个项目来检验学习成果,顺便写篇博客来记录一下. 话不多说,开始正题. 文档及其源 ...

  8. 网易云音乐小程序案例分享 附完整代码

    todo: 添加音乐到收藏(最近)列表 歌词滚动 从一个 hello world 开始 微信开发者工具生成 目录如下: . |-- app.js |-- app.json |-- app.wxss | ...

  9. 太空人时间HTML,基于JavaScript实现网红太空人表盘的完整代码

    一.效果展示 用javascript写的一个太空人表盘. 二.源代码 html代码 太空人表盘 function WatchMeter() { // 初始化dom this._initDom() // ...

最新文章

  1. 伺服驱动器生产文件_在速度控制和力矩控制方面伺服驱动器与变频器的较量
  2. 第二次爬虫,更加熟练啦
  3. 如何在家写出一份无懈可击的产品文档
  4. ultraedit 运行的是试用模式_Wings面向企业级的单元测试用例自动编码引擎
  5. 从选秀策略看市场测试
  6. 二、计算机视觉与卷积神经网络
  7. 对象必须实现 iconvertible。_精雕基础教程:对象的显示颜色
  8. Python进阶-函数默认参数,特别是参数传递为空列表
  9. 关于h5中背景音乐的自动播放
  10. Linux Shell脚本_禁用selinux
  11. Linux/AIX上部署VNC Server
  12. Java Date Time 教程-System.currentTimeMillis()
  13. 【图像检索】基于matlab GUI综合颜色和形状特征图像检索【含Matlab源码 719期】
  14. Openfire之服务器地址更改
  15. 电脑计算机推荐笔记本电脑,十佳办公笔记本电脑排名,性价比高的笔记本电脑推荐...
  16. 台式计算机是32位还64位,电脑系统装64位还是32位系统好?考虑这些才能正确安装...
  17. 统计学计算机数据输入,数据输入是什么意思
  18. 高频leetcode数学部分:679. 24 点游戏
  19. Anbox之arm平台lxc调试(十一)
  20. java 从视频里面提取音频 批量

热门文章

  1. 音乐版权之争,区块链能做些什么?
  2. 应届生JAVA面试笔试选择题(答案+解析)
  3. Debian10开启SSH服务
  4. 利用Canvas添加水印
  5. react ice-design ie兼容问题,由于ie浏览器不支持箭头函数,导致react项目在ie中不兼容的解决办法
  6. iPhone SDK开发:改变UISWitch文本和颜色(当初好像我没明白,现在也没明白)
  7. 寒冬抱团取暖,推荐几个暖心的公众号
  8. Python切片练习
  9. 【程序媛晒83行代码】单身狗汪化翻译机,把你的话都变成汪星语
  10. 2018IDEA注册码