zoukankan      html  css  js  c++  java
  • 淘淘商城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个就不取了,代码略)

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/djlindex/p/11681891.html
Copyright © 2011-2022 走看看