• 淘淘商城5


    从今天开始进入前台,前面基本上是拿后台管理做热身的。就把之前学的系统的复习了一下,从今天开始进入前台。

    今天做1、前台系统搭建(分布式环境下(看是如何架构的))  2、展示前台首页  3、展示完了实现一个功能,左边的商品分类展示功能

    前台系统搭建

    前台系统就是淘淘商城网站了,之前一直做后台系统,后台系统和前台系统有关系,关系是在数据库层面建立起来的,前台系统与后台系统是分开的。关系就是用的仅仅是同一个数据库,前台系统要单独创建

    要想展示前台首页,就是一个网页,是网页就是一个网站就是一个web工程。我们要搭建一个web工程怎么建?直接创建一个web工程就可以,或者使用maven直接创建一个war工程也可以。但是我们要考虑,现在的电商如淘淘商城它不是一个小网站,除了pc端还有别的(手机端,微信,ios什么的)

    优点:

    1、开发前台和开发服务层可以分开,降低系统耦合度。  2、开发团队可以分开,提高开发效率  3、系统分开可以灵活的进行分布式部署。

    缺点:服务之间通信使用通信接口(以前只是调用方法),开发工作量提高(对于我们程序员来说我们的价值就体现出来了,有活干了,龇牙),但对于老板就是缺点了,为了解决网站的高并发的问题,成本花的也值。

    既然前台架构是把前台服务层和前台门户这块分开,我们就需要创建两个web工程。服务层发布一个服务供其它的门户调用,服务层没有表现层只需要提供一个调用的接口,门户(表现层)没有业务逻辑只用调用服务层来实现功能,其它的Android、IOS、微信都可以调用服务层。

    前台系统分为两部分:一部分是服务层web工程,功能就是发布服务;一部分是表现层,展示页面,没有业务逻辑。所有的业务逻辑就是调用服务层的服务。前台系统=服务层+表现层

    前台系统>服务层工程搭建

    工程创建

    搭建前台系统就要先搭建服务层,有了服务层前台才有的掉,只搭门户没有服务前台还是跑不起来。服务层也是一个web工程,也要用maven。其实我们也可以创建一个pom工程(后台的manager不就是这么干的),然后服务层和门户继承这个pom工程,也可以分开,但是比较麻烦。

    左侧空白处右键----->新建Maven Project,选√,自定义模板

     

    使用到的技术

    工程创建好了,它使用的技术:要连数据库所以用mybatis;spring;还需要发布服务使用(读:C恰F)或springmvc都可以(springmvc框架也可以发布服务),我们不强调使用哪个框架发布服务,只要把服务发布出来了就好了。既然还是使用的这三个框架,那么就需要整合框架,首先把jar包依赖过来,taotao-manager也是用的是这三个框架,所以可以参考一下,把它下面mapper,pojo,service,web里面的jar包依赖添加进来

    pom文件

    依赖了上面的mapper,到此到层就依赖完了,服务层还需要使用spring框架,参考taotao-manager-service。剩下依赖spring的略

    web.xml

    web.xml在创建打成war包工程后,如果没有这个文件,会报错,拷贝之前taotao-manager-web里面的web.xml做一个拦截修改

     框架整合

    taotao-manager-web下前面有做好的,参考一下

    现在就整合好了,整合好了要想启动工程,还需要配置一个tomcat插件。tomcat插件不配置也好使,需要在rest工程的pom文件中配置,但是它默认启动运行在8080端口,而且工程名是当前工程的工程名。不配也可以,现在在这个文件中配置一个,因为我们需要多个系统同时跑就需要多个tomcat,多个tomcat就需要它运行的端口号不同,(去manager的pom把tomcat插件拷过来build部分),

    把之前的pojo(pojo不会报错,它没有依赖)maven install一下到本地仓库,然后mapper安装。一系列安装下来它报错要求安装taotao-manager,安装过程中它测试图片服务器最终报错太麻烦,现在我们想让它跳过对图片服务器的测试直接安装

    taotao-manager右键Run As选择Maven build输入命令:install -DskipTests即可跳过测试直接安装,安装一个旗下4个都SUCCESS安装

     下面少了一步,要把出现的defautl删除后添加

     起来了没有报错,但是我们看不到因为还没有jsp页面,即便访问localhost:8081出现404也证明它起来了

    前台系统>门户搭建

    刚才已经把服务系统搭起来了,要想展示首页还需要门户,还要创建一个taotao-portal,门户是什么意思?门户就是入口,对于网站来说就是首页,来创建门户系统

    使用的技术

    1、spring(不连数据库,只调用服务层,所以不用mybatis)

    2、springmvc(用struts也可以,通用的,有人说struts慢,其实是struts标签慢)

    3、Jstl、jQuery

    4、门户系统相当于客户端,服务层相当服务端,客户端要调用服务就需要http协议,在我们学习webservice的时候可能rest服务只用浏览器调用模拟了一下,调出来了就完事了,这时浏览器就相当于客户端。我们真正调用服务返回结果应该是在代码中,在浏览器中不行,那么这时需要     httpclient     这个技术(使用java代码模拟浏览器,发送一个请求,得到一个结果)

    创建工程

    我们这个工程是一个门户工程,无可厚非肯定是一个web工程,

     配置工程与框架整合

    框架整合这块现在没有mybatis了,只需要把springmvc和spring的配置下(参考taotao-manager-web配置,文件从这拷贝)

    框架整合好了,还要配置一个tomcat插件。要启动这个工程,需要在portal的pom文件中添加一个tomcat插件

    要想展示首页得有页面,导入

    要想展示webapp/jsp/index.jsp淘淘商城首页,外面直接访问不到,所以这里就要写一个controller。

     taotao-portal右键run as--->maven build...输入clean tomcat7:run

    商品分类展示功能

    工程创建完了(两个独立的系统创建好了),首页展示出来了,现在要做一个商品分类展示的功能。

    现在看首页index.jsp源码,这个首页是扒拉京东的,jsp可以读一下,不建议去读它的js,因为这个js比较复杂,而且是经过压缩后的js(压缩完了不会换行,变量名也会改变,比喻原来有意义的变量名都会改变成没有意义的变量名,abcd之类的,读起来比较麻烦,这些js都是压缩后然后又格式化出来的,读起来比较晦涩,但是要能找到是哪的问题)

    像京东首页这么大一个页面,至少也得做一个月多。最初做一个简单的版本,后来慢慢地增加功能不停的维护,最后可能谁也不知道里面进了什么功能,可能换了好几茬人了。现在重新访问下首页,F12抓包看看。

      当鼠标滑动到连接上触发 mousemove 事件。页面做一个 ajax 请求,请求 json 数据包含分类信息,得到 json 数据后初始化分类菜单,展示。 那么这个json数据格式到底是什么样的呢?我们做一下测试,先不让它请求8081/rest/itemcat/all?。。。先把这一行注释掉,把下面的一行URL_Serv打开,然后把事先准备好的error文件夹下面的商品分类数据格式.txt复制一份(删除两边括号)改名为category.json(与上面url请求对应)粘贴到webapp下面。

     太难看了可以把那个category.json复制一份,打开参考资料里提供的JsonView文件夹再打开JsonView.exe程序,然后粘进去再点击format

     使用ajax访问本工程的json数据

    把上面请求的url打开后测试下,地址栏重新刷新页面,然后看network,当鼠标放在分类上是触动了mousemove事件,然后发送ajax请求,响应得到category.json,鼠标放在上面确实有分类内容了。只要能模拟出这种效果就可以了(这个是使用静态数据,将来把这个变成动态的就可以了)

    问题:为什么地址栏访问localhost:8082首页可以展示出来?

    答:在web.xml里面有一个欢迎页index.html,(先在controller找不到对应的/)地址就做了这个请求localhost:8082/index.html,这个请求被springmvc拦截(*.html),拦截后才到处理器映射器里面找/index对应的url,这个方法返回index,这个index再加上视图解析器的前缀和后缀找到对应页面展示出来

    数据需从taotao-rest服务层后台系统来

    现在首页商品分类可以展示出来了,看似没有问题,但是数据应该从后台系统调用服务得来,之前的做法是自己查自己taotao-portal中显示的json数据。

    既然直接调用taotao-rest,把category.json文件拷贝到taotao-rest的web-info下面。

     现在要求访问localhost:8082/category.json它会自动调用localhost:8081/category.json,然后改代码后浏览器测试

     Ajax夸域请求

    Js不能跨域,出于安全考虑,js设计时不可以跨域请求,如果浏览器出现上面的错误说明js跨域请求了。

    什么是跨域?1、域名不同时  2、域名相同,端口不同时  平时访问都是域名相同、端口相同时访问的通。

    使用jsonp解决跨域问题

    什么是jsonp?

    jsonp原理

    jsonp就是利用了js的漏洞,js跨域请求不能请求数据,但是可以请求脚本。category.getDateService()方法已近写好了,然后把rest工程下面的category.json文件做修改作为category.getDateService这个方法的参数,即

     

     测试一下,浏览器localhost:8081

    现在既然jsonp可以解决js跨域这个问题,那我们右侧展示的分类数据就不应该是静态数据了,应该是从数据库取了

    从数据库中取商品分类列表

    前面只是用  静态数据(category.json文件)  模拟了一下,知道jsonp怎么调了下面查数据库

    dao层

    是一个单表查询,直接可以使用逆向工程生成的代码,dao完事

    Service层

    查询所有商品分类,生成前台页面要求的json数据格式。返回pojo。看了返回数据的结构分析后得要创建两个pojo。之前的pojo有可能被其它项目所使用,所以创建在common中,这个pojo其它工程不大可能用。放到rest工程中。

    1、分类列表的节点。包含u、n、i属性。  2、返回值pojo。包含data属性是一个list类型  (代码较多,略)

    controller层

    接收页面传递过来的参数。参数就是方法名称。返回一个json数据,需要把json数据包装成一句js代码。返回一个字符串。

    参数:回调方法名称  返回值:字符串

    方法一

    注意我们现在是服务,服务有必要参考页面调用的js吗?其实没有必要,我们是开发服务的团队,当然接口实现你可以跟他们打好招呼,或者说你做完了给人说我接口是什么你直接调就可以了,你没有必要去征求别人的意见,因为你是开发服务的,别人调你的。我们做什么别人就得调什么,少废话,爱调不调。

    写好了地址栏找到这个图标,现在有两个tomcat,选择关闭重启rest,然后地址栏访问:localhost:8081/rest/itemcat/list

     加上红框内的东西,再重启rest访问就不会乱码了

    方法二

     上面的方法是使用字符串拼接,还有一种方法要求springmvc4.1版本以后,所以之前的springmvc是不支持的,我们这个刚好4.1

     先把rest关闭,把方法一的controller代码注释掉。

     改了代码后,重新启动刷新地址栏和之前一样。现在我们得到了数据格式,现在要修改lib-v1.js文件里面的调用了。

     出现这种情况,要么改版面,要么只展示左边栏位14个(递归时有14个就不取了,代码略)

  • 相关阅读:
    【老生常谈】Attr与Prop的区别
    【NodeJs】入门笔记一
    absolute的left和right的妙用
    文本框选中文字却不出现蓝色选中状态
    Ajax
    Canvas 与 SVG 的区别
    如何学好英语
    xCode6中SizeClass的使用
    CocoaPods安装和使用教程
    Unity3D教程宝典之Shader篇:特别讲 CG函数
  • 原文地址:https://www.cnblogs.com/djlindex/p/11681891.html
Copyright © 2020-2023  润新知