黑马旅游网项目总结

历时五天,我从头开始搭建整个项目,到今晚10点整个项目改完最后一个问题,这个项目算是告一段落,这个项目虽然简单,但却设计的非常巧妙,对我项目架构能力有很大的提高.学习方式:一个模块一个模块的看完视频,然后进行自己的代码构思,这其中不乏画图等方法.

一.项目准备

技术选型

Web层
a)Servlet:前端控制器
b)html:视图
c)Filter:过滤器
d)BeanUtils:数据封装
e)Jackson:json序列化工具

Service层

f)Javamail:java发送邮件工具
g)Redis:nosql内存数据库
h)Jedis:java的redis客户端

Dao层

i)Mysql:数据库
j)Druid:数据库连接池
k)JdbcTemplate:jdbc的工具

数据库(附上大概的图表)

在这里插入图片描述

二.项目流程

注册

在这里插入图片描述
在这里插入图片描述

注册功能前端部分主要是做数据的初步校验,校验通过后通过ajax请求发给后端,后端进行查表,来进行注册功能实现,其中为了以后这个网站如果有商用价值,还做了邮件激活功能,用户需进入邮箱激活账号才能进行登录操作.

登录

加粗样式
注册的业务完成之后,登录的就简单许多,主要是进行后端查表操作.

退出

退出的主要思想是在服务器的session域中删除掉用户信息.

优化Servlet

在前期的开发中大每一个功能都实现了一个servlet,显得冗长,对servlet的学习中,发现整个servlet是由service方法进行分发任务的,所以实现了一个BaseServlet的java文件,继承HttpServlet类然后实现service方法,通过反射调用来完成对应servlet调用(附代码如下)`


public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //完成方法的分发
        String uri = req.getRequestURI();
        String methodName = uri.substring(uri.lastIndexOf("/")+1);
        System.out.println(methodName);
        //通过反射执行userServlet中的方法
        try {
            //获取方法
            Method method = this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
            //执行方法
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    public boolean checkCode(HttpServletRequest request){
        String Rcode = request.getParameter("check");
        if(Rcode == null){
            return false;
        }
        //从session获取验证码
        HttpSession session = request.getSession();
        String Scode = (String) session.getAttribute("CHECKCODE_SERVER");
        //为了保证验证码只能使用一次
        session.removeAttribute("CHECKCODE_SERVER");
        return Scode.equalsIgnoreCase(Rcode);
    }

    public void writeValueToOutputStream(Object obj,HttpServletResponse response) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=UTF-8");
        mapper.writeValue(response.getOutputStream(),obj);
    }
    public String writeValueToString(Object obj) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }
}

旅游线路分页查询

在这里插入图片描述

点击了不同的分类后,将来看到的旅游线路不一样的。通过分析数据库表结构,发现旅游线路表和分类表时一个多对一的关系.
页面加载完成之后向“ route/pageQuery ”发送Ajax请求,获取PageBean对象。
1、遍历PageBean对象的List集合拼接字符串。
2、遍历PageBean对象的TotalPage ,拼接字符串展示在分页栏。
3、分页栏优化
- 当页面数小于10页时,展示所有页码。
- 当页面数大于10页时,只展示8个页码。
- 当页码大于4时,页码按照前4后3的模式排列。
- 当前页码前后不足时,补齐8个页码。

旅游线路名称查询

在这里插入图片描述
1、提取名称关键字

header.html页面查询参数的传递

$("#search-button").click(function () {
    //线路名称
    var rname = $("#search_input").val();
    var cid = getParameter("cid");
    // 跳转路径 http://localhost/travel/route_list.html?cid=5,拼接上rname=xxx
    location.href="http://localhost/travel/route_list.html?cid="+cid+"&rname="+rname;
});

route_list.html页面查询参数的传递

var cid = getParameter("cid");
 //获取rname的参数值
 var rname = getParameter("rname");
 //判断rname如果不为null或者""
 if(rname){
     //url解码
     rname = window.decodeURIComponent(rname);
 }

2、根据条件查询数据库

Dao层查询小技巧
Sql可以先写 “select * from tab_××× where ”
Dao层Sql的编写可以用StringBuilder字符缓冲区进行Sql的拼接

Dao层代码如下

//查询满足条件的数据条数
@Override
public int findTotalCount(int cid,String rname) {
    String sql = "select count(*) from tab_route where 1=1 ";
    List params = new ArrayList<>();
    StringBuilder sb = new StringBuilder(sql);
    if(cid != 0){
        sb.append(" and cid=?");
        params.add(cid);
    }
    if(rname != null && rname.length()>0){
        sb.append(" and rname like ?");
        params.add("%"+rname+"%");
    }
    sql = sb.toString();
    return template.queryForObject(sql, Integer.class,params.toArray());
}
//查询满足条件的Route对象并封装为List集合
@Override
public List<Route> findByPage(int cid, int start, int pageSize,String rname) {
    String sql = null;
    List<Route> list = null;
    boolean idEmpty = cid==0;
    boolean nameEmpty = rname.equals(" ");
    if(!idEmpty && nameEmpty){
        sql = "select * from tab_route where cid=? limit ? , ? ";
        list = template.query(sql,new BeanPropertyRowMapper<>(Route.class),cid,start,pageSize);
        return list;
    }
    if(idEmpty && !nameEmpty){
        sql = "select * from tab_route where rname like ? limit ? , ? ";
        rname = "%"+rname+"%";
        list = template.query(sql,new BeanPropertyRowMapper<>(Route.class),rname,start,pageSize);
        return list;
    }
    if(idEmpty && nameEmpty){
        sql = "select * from tab_route limit ?,?";
        list = template.query(sql,new BeanPropertyRowMapper<>(Route.class),start,pageSize);
        return list;
    }
    else{
        sql = "SELECT * FROM tab_route WHERE cid=? AND rname LIKE ? LIMIT ?,?";
        rname = "%"+rname+"%";
        list = template.query(sql,new BeanPropertyRowMapper<>(Route.class),cid,rname,start,pageSize);
        return list;
    }
}

3、将数据库查询的数据展示在页面上

旅游线路的详情展示

在这里插入图片描述

1、点击查看详情按钮时传递当前路线的id
2、根据id查询数据库并封装为Route对象返回
3、根据Route对象的内容填充页面数据

旅游线路的收藏功能

在这里插入图片描述

根据 Uid和Rid查询 tab_favorite 表
-如果有数据,那么表示该线路已被该用户收藏
将收藏按钮置灰,移除Onclick()事件,并将按钮变成不可点击状态。
-如果没有数据,表示该线路没有被该用户收藏
将收藏按钮变成红色,并且加上Onclick()事件。点击按钮时发送异步请求更新数据库。

把手背后接受批评
关注 关注
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
2018_IDEA版黑马旅游网初始项目文件(含数据库)
03-02
2018黑马javaweb教学视频IDEA版本Java web一阶段案例黑马旅游网初始项目资源,包含数据库.
黑马旅游网初始项目文件
12-22
我本来不想要积分的,但是这个CSDN上传的资源最少都要选一个积分。
黑马旅游网实训报告
最新发布
li2345h的博客
02-25 341
随着经济的快速发展和生活水平的不断提高,人们对于休闲旅游的需求日益增长。现代旅游不仅仅是简单的行程安排,更多的是对于旅游体验的追求,包括文化的探索、休闲的享受和个性化的服务。在这样的市场背景下,黑马旅游网应运而生,旨在提供一个综合性的在线旅游服务平台,满足现代旅游者的多元化需求。首先,随着互联网技术的发展和普及,线上信息获取已成为人们生活的常态。在旅游领域,传统的线下旅行社正逐渐被在线旅游服务所替代。用户更倾向于通过网络平台进行目的地的选择、行程的规划、预订酒店和交通工具等。
黑马旅游网项目_java_web_基础
11-11
黑马旅游网项目_java_web_基础
完整的黑马旅游网已打包版
03-02
黑马旅游网,含静态资源和sql,以及自己完成的后端代码,已打包
黑马旅游网(web综合项目
weixin_62226325的博客
12-18 6693
目录 一,技术选型 二,注册功能 1.页面效果: 2.功能分析: 3.代码实现: a)前端代码的实现 b)异步(ajax)提交表单 c)后台代码的实现 创建ResultInfo用于封装后端返回前端数据对象 ①编写RegistUserServlet 三,登录功能 1.功能分析:​ 2.后台代码实现 : 3,前端代码的实现: ⭕登陆成功后的用户提示: 后台实现: 前端实现: ⭕退出功能的实现: 后台实现: 前端实现: 一,技术选型 web层...
旅游网总结报告
05-27
旅游网总结报告 中国的旅游人数随着经济的飞速发展和生活水平的不断提高,旅游网站出现以来就因其“方便,丰富,全面”等优点而得到了广大旅游爱好者的欢迎。由于旅游借助互联网,能够解决传统旅游业不能解决的适应游客行、吃、住、玩一体化的需求;同时还由于旅游也作为一个整体的商业生态链,涉及到旅行服务机构、酒店、景点景区、交通等等,利用互联网可以将这些环节连成一个统一的整体,进而可以大大提高服务的水平和业务的来源。
【Elasticsearch】黑马旅游网实践
小皮皮LL的博客
11-20 3460
文章目录黑马旅游网实践1.酒店搜索和分页1.1 需求分析1.2 定义实体类1.3 定义controller1.4 实现搜索业务2.酒店结果过滤2.1 需求分析2.2 修改实体类RequestParams2.3 修改搜索业务3.查询周边的酒店3.1 需求分析3.2 修改实体类3.3 距离排序API3.4 添加距离排序3.5 排序距离显示4.酒店竞价排名4.1 需求分析4.2 修改HotelDoc实体4.3 添加广告标记4.4 添加算分函数查询5.酒店实现聚合5.1 需求分析5.2 业务实现6.酒店数据自动补全
黑马旅游网总结2
m0_54814599的博客
05-11 1118
文章目录黑马旅游网总结前端页面的一些细节补充 黑马旅游网总结 前端页面的一些细节补充 该功能需要在登录之后将user传入session,然后在主界面加载的时候通过异步获取该user,然后将名字替换 标题栏的数据需要从数据库拿到, 数据库中的数据是带有id的,可以选择使用数据库中取出,也可以选择存入redis数据库,这样的话每次都从缓存中拿数据, ...
黑马旅游网总结
bankser的博客
04-09 742
文章目录前言一、问题二、解决 前言 `黑马旅游网网站进行编写前台和后台内容,在其中遇到的一些问题,以及解决思路。 一、问题 1、前端传递数据回后端 2、多条数据从后端传递回前端 3、前端页面中ajax方法显示数据 4、servlet方法抽取 二、解决 1、通过ajax方法调用servlet中的方法。 $.get("hotel/pageQuery",function (pb) { //2.列表数据展示 var route_lis="";
travel:黑马旅游网项目
05-26
travel 黑马旅游网项目 SQL数据库文件在resources文件夹下 登录注册功能 注册需要发送邮件激活,发送需要需要先修改自己的代码设置自己邮箱的地址和授权码。 为了保证账户激活的唯一性设置了32随机码 网站首页的分类数据是从数据库中读出的,在读数据时第一步采用MySQL数据库中读出,后面则是从是缓存中读取了。缓存工具采用的是redis 补充了下一页和末页功能,在进行线路名称查询和详情查询的时候黑马中的代码是有问题的,在于判断是否为空要注意str.equals(""),str==null,str.isEmpty()这三者是有区别的。 更新了源代码中一些比较老的Spring框架,但是更新后前端界面有一些显示问题,因为我主要开发后端这个问题比较小,就还没管。 在我的博客中有详细的记录,欢迎访问:
黑马旅游网项目总结及常见问题解析
weixin_44860501的博客
04-27 3488
黑马旅游网项目总结 简述 本项目在静态页面基础上,利用html+servlet进行编写,利用JDBC中druid数据池操作管理数据库mysql数据库调用编写数据,采用MVC模式完成客户端的开发,其中Controller模块为servlet,View模块为html展示数据,Model模块为JavaBean完成业务逻辑操作,利用Maven进行项目的开发及管理。 客户端网页使用html调用ajax请求...
黑马程序员——学习总结
mydlife的专栏
02-16 497
从上个月看视频以来,学了不少东西,开始本来要报六期,后来想了一下,想把基础打扎实, 就选择了从基础开始,看了视频,发现自己的思考问题方法需要改进。一些知识掌握不牢固, 最大的收获就是老师每次讲一个例子,思路都非常清晰,首先都是分析问题,之后就是解决问题, 从简单的代码实现某一个功能,依次深层次的推进,遇到问题就解决这个问题。       画图也是常用的方法,理解起来很容易,根据图解编写代码
黑马旅游网项目心得
shmilyche的博客
04-25 825
目录 一、前端部分 1、数据展示 2、页面数据序列化 3、name属性 4、获取单条数据的属性值 5、参数类型包含String类型需要转码 二、后端部分 1、BaseServlet 2、writeValue和writeValueAsString的区别 3、获取参数数据 4、封装对象 5、集合查询数据表 三、总结 一、前端部分 1、数据展示 //列表数展示 var hotel_lis = ""; for (var i
黑马旅游网综合项目-----前后端交互
weixin_51094637的博客
05-17 4007
目录 前言 前台 页面展示 酒店分类 点击查看详情 ​编辑 旅游分类 查看详情 后台 页面展示 主页面 登录页面 所遇到的问题 详细代码查看 ​编辑 前言 最近做了一个JavaWeb项目-----黑马旅游网。 整个黑马旅游网分为两部分(分为两个maven项目进行实现): 一部分是前台供用户使用(注册账号,展示旅游路线以及酒店信息,用户可对其进行点击收藏旅游路线或者点击预订酒店)。 一部分作为后台供管理员对前台展示的信息,获取到的用户进行管理(增删改查)。...
Java web - 黑马旅游网(加使用文档总结
weixin_45345128的博客
04-13 3964
黑马旅游网(二) 忙了好久,都学的不精,所以在网上找了个java web项目,没有jsp的,现在前后端分离是趋势,所以Ajax就非常重要了。准备分2部分进行记录。需要全套资料加项目源码可以私我建议先学好黑马JAVA WEB 的知识后再完成这个项目 第2部分完成搜索查询,旅游详情展示,还有是否收藏,完成了这个项目,但是在这个项目的基础上还是可以很多提示空间 主要还是希望大家可以需要全套资料加项目源......
黑马旅游网总结
qq_38586883的博客
03-22 1169
在粗略的学习了JAVA后跟做了黑马旅游网项目后,总结供自己以后回顾。 技术选型 使用的MVC框架,Viewer是用的HTML展示的,Controler用的Servlet来充当,Model中包含的是Service和Dao。页面上的数据通过AJAX发送请求,执行回调函数。由于事先已经提供了前端页面和一些工具类。所以总体上来说并不是过于复杂。 前端内容 前端内容中涉及的并不多,其中注册页...
黑马旅游网实训的主要任务
06-10
黑马旅游网实训的主要任务是让学生通过实践项目,掌握Java Web开发的基本技术和流程,包括需求分析、数据库设计、前后端开发、测试和部署等环节。具体任务包括: 1.需求分析:学生需要根据实际需求,分析用户的需求和功能,确定系统的基本功能和特点。 2.数据库设计:学生需要根据需求分析,设计合适的数据库结构,包括表的设计、关系的建立等。 3.前后端开发:学生需要根据数据库设计,使用JSP和Servlet技术实现网站的前后端功能,包括用户登录、浏览景点、预订酒店、支付等。 4.测试和部署:学生需要对项目进行系统测试,发现并修复潜在的问题,最终将项目部署到服务器上。 通过完成这些任务,学生可以掌握Java Web开发的基本技术和流程,同时提升自己的编程能力、团队协作和项目管理能力,为将来从事Java软件开发工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 黑马旅游网项目总结 2931
  • ArrayDeque和PriorityQueue解析 549
  • JVM常见参数和命令 374
  • 计算机网络知识点总结 293
  • Java文件IO知识点汇总 285

分类专栏

  • java集合
  • 数据结构 1篇
  • java面向对象 1篇
  • C语言

最新评论

  • 黑马旅游网项目总结

    weixin_48391387: 您好 我想问一下,我运行后浏览器报404错误找不到localhost页面,怎么处理?还有验证码图片出不来表情包表情包表情包

  • 黑马旅游网项目总结

    qq_42681454: 上次我这个问题你问了,不过帖子删了,把tomcat换成7.0的版本,然后多在页面等一下就行,我换了tomcat就可以了,有时候不行多等几秒也出现了

  • 黑马旅游网项目总结

    把手背后接受批评: 不知道你实际遇到的什么情况,如果你现在还没有解决的话你私聊一下我,我帮你看看。

  • 黑马旅游网项目总结

    塔米。: 请问,这个代码中验证码显示不出来,是什么原因呢?哪里需要修改一下?

  • 黑马旅游网项目总结

    把手背后接受批评: 我怀疑你这评论是用脚本刷的

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • python爬虫学习
  • 多线程面试题(二)
  • 多线程面试题总结
2021年1篇
2020年14篇
2019年2篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司毕节关键词按天收费价格滁州关键词排名推荐同乐外贸网站设计哪家好抚顺优秀网站设计价格郴州推广网站报价遵义网站排名优化哪家好坪地SEO按天计费公司哈密SEO按天收费报价九江至尊标王推荐滨州关键词按天计费公司天水关键词排名霍邱企业网站设计公司辽源网站改版公司绵阳网站优化推广多少钱河池百度关键词包年推广报价娄底关键词按天收费推荐襄阳外贸网站建设价格永新网站优化按天收费公司自贡SEO按天扣费公司丽水网站建设大浪至尊标王公司郴州网站定制民治企业网站建设推荐新余百度标王哪家好郑州网站设计模板价格南阳网站优化按天计费多少钱吉祥百姓网标王报价运城SEO按效果付费舟山百姓网标王多少钱沙井优秀网站设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化