8.28~8.29
1、门户系统的搭建
2、显示商城首页
3、内容管理系统的实现
a) 内容分类管理
b) 内容管理
4、首页的轮播图展示实现
1、门户系统的搭建
门户属于前台系统 :面向广大的互联网网民。
后台系统:面向维护人员,入住的商家,使用。
我们目前只是完成了后台管理系统和商品服务,还有很多没有实现,淘淘商城首页的展示需要用到商城门户工程和内容服务工程。这节我们便学习一下商城门户的搭建。
Taotao-portal-web war
SEO:搜索引擎优化,为了提高网站的流量,提高在各搜索引擎中的搜索排名,需要进行优化,那么可以为动态网站伪静态化,以提高排名。
pom.xml
我们在taotao-portal-web工程添加相关依赖,如下所示,注意最下方tomcat插件工程配置的端口号是8082(因为8080和8081已经被占用了)。
src/main/webapp/WEB-INF/web.xml
可以看到我们配置的拦截器拦截的请求是以.html结尾的。我们可以称之为"伪静态",之所以称伪静态是因为我们可以把各种动态请求都写成以.html结尾,这样响应的是动态数据,但由于请求是以.html结尾的,浏览器便认为要访问静态资源。SEO(搜索引擎优化)便喜欢收录以.html结尾的请求,从而有利于搜索排名。
src/main/resources/resource/resource.properties
src/main/resources/spring/springmvc.xml
配置的controller的扫描包是com.taotao.portal.controller
src/main/java/com.taotao.portal.controller
src/main/webapp/css、images、js
其中css、images、js直接放到webapp目录下,这点与taotao-manager-web工程不一样,原因是taotao-manager-web工程配置的拦截器拦截的是以"/“结尾的请求这样的话,我们可以通过配置资源映射来访问WEB-INF目录下的静态资源,但是现在由于拦截器拦截的请求是以”.html"结尾的,springmvc根本就不会去拦截静态资源,这样即使配置资源映射也不管用。因此放到WEB-INF的话,将无法访问到这些静态资源,因此需要直接放到webapp目录下才行。
src/main/webapp/WEB-INF/jsp
那么为何jsp要放到WEB-INF下面呢?这是因为我们在springmvc.xml文件中配置了视图解析器,指定了访问的jsp目录在WEB-INF目录下,因此要放到WEB-INF下。
下面我们来访问商城首页
src/main/java/com.taotao.portal.controller/IndexController.java
RequestMapping("/index")表示拦截以index.html结尾的请求(因为在springmvc拦截器配置时我们配置了以.html结尾的请求会被拦截)。但是我们用户的习惯是输入域名之后直接就可以访问官网首页,不能要求用户再输入index.html,因此我们需要配置一下web.xml。(一般:jd,taobao访问时直接访问域名我们这里能否直接访问: http://localhost:8082/(http://localhost:8082/相当于访问域名,后面部署的时候将会换成域名访问)答案是否定的,要想实现此功能,修改:web.xml。添加红色部分如下:) web.xml文件中的配置的是默认的访问页(原来是index.jsp,现在是index.html),也就是请求过来后会默认访问index.html,由于这个页面并不存在,DispatcherServlet会处理该请求,这时由于请求是以index.html结尾了,因此满足了Controller层的拦截要求,因此便执行showIndex方法,返回"index",由于springmvc.xml中配置了视图解析器,会自动在"index"的后面加上".jsp",这样请求便成了访问index.jsp,index.jsp是我们的商城首页,因此便可以访问到商城首页了。
启动taotao-portal-web工程
启动后,我们在地址栏输入http://localhost:8082即可访问到商城首页,如下图所示,现在中间广告位那块还没有实现,因此没有图片。
首先找到springmvc中的配置的欢迎页面,所以先从那里找,找不到的话进入servlet,也就是controller层的代码,请求index,因为在前面设置了拦截html形式的,有,那么就访问即可
2、显示商城首页
3、内容管理系统的实现
首页大广告位开发实现分析
可以根据首页大广告位的数据结构设计一张表,进行增删改查管理
其他部分的展示内容同样可以设计表,进行增删改查
存在的问题:
如果每一个前端展示内容(大广告位、小广告位等等),单独建立表,进行CRUD操作,会有以下问题:
1.首页页面信息大量堆积,发布显的异常繁琐沉重;
2.内容繁杂,管理效率低下;
3.许多工作都需要其他技术人员配合完成;
4.改版工作量大,维护,扩展性差;
使用内容管理系统解决以上问题。
内容管理系统
**内容管理系统(content management system,CMS)**是一种位于WEB 前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。
内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet网站的信息。
就是后台管理维护前台的页面和页面中的内容可以动态展示。
动态展示分析
对首页展示功能进行分析,抽取,发现应当有以下的字段属性:
1.有图片
2.有链接
3.有标题
4.有价格
5.图片提示
6.包含大文本类型,可以作为公告
把首页的每个展示功能(大广告位,淘淘快报等),看作是一个分类
每个展示功能里面展示的多条信息,看作是分类下的内容
例如:首页大广告,对应的是大广告分类,而大广告位展示的多张图片,就是大广告分类下的内容
前台需要获取大广告的图片,只需要根据大广告的id查询对应的内容即可
需要一个内容分类表和一个内容表。内容分类和内容表是一对多的关系。
a) 内容分类管理
我们以京东的首页为例,如下图所示,可以看到内容显示是分组显示的,广告位轮播图是一组,轮播图下面那两张图片是一组,右边的"促销"、"公告"是一组,但是它与轮播图又有所不同,不同之处在于它下面分了两个小组,每个小组下面有标题列表,每个标题都是一个链接,点击"促销"这组的任何一个标题进入会是一个新的网站,点击"公告"这组的任何一个标题进去则是公告的具体内容(相当于一篇文章)。"更多"表示还有其它分组。另外"京东秒杀"这也是一组,这组内容的特点是有标题有图片有价格。"发现好货"这组则是有图片有标题。
从上图京东首页的展示不难看出,我们应该将内容进行分类,每个分类下面有多条内容,它们是一对多的关系,这样的关系就适合用两张表来进行存储。一张表示内容分类表,另一张表示内容表。
首先我们来看下内容分类表tb_content_category,如下图所示。表中有parent_id字段,这样便可以实现树形分级展示,分类要有分类名称(name字段),status字段用来表示该分类目前是否应该显示(如果已经逻辑删除了,那么便不再显示了),sort_order则是同级类目的展现次序,is_parent字段直接记录是否是父级类目(这个字段在树形展示时很有用)。
下面我们便来看一下内容表,内容表中肯定是有内容分类表的外键的(category_id),内容展示有的有标题,因此需要标题(title)这么一个字段,有的文章是有小标题的,因此我们应该加上小标题字段(sub_title),有的内容需要对标题进行描述,因此需要标题描述字段(title_desc),链接字段是必须要有的,因为内容涉及最多的便是跳转。之所以这张表设计了两个图片字段,是因为考虑到不同的显示屏所显示的图片会不一样,宽屏则应该显示宽屏图片,窄屏则应该显示窄屏图片。
下面我们来搭建内容工程
可以参考taotao-manager创建。
taotao-content:聚合工程打包方式pom
|–taotao-content-interface jar
|–taotao-content-Service war
pojo层//直接依赖POJO过来
dao层//直接依赖dao过来
Taotao-content pom
添加taotao-content-interface模块jar
新建taotao-content-service模块war
至于dao和pojo两个模块我们不用在taotao-content工程再新建一遍了,因为我们在taotao-manager工程当中便创建好了,我们只需要引用这两个模块就可以了。
taotao-content的pom.xml
添加对taotao-common工程的依赖,我们最好启动聚合工程,因此我们在聚合工程配置tomcat启动插件,8080、8081、8082都已经被占用了,我们这里使用8083,如下所示。
taotao-content-interface的pom.xml
添加对taotao-manager-pojo的依赖
taotao-content-service的pom.xml
添加taotao-manager-dao、taotao-content-interface、spring、dubbo的依赖
src/main/resources/mybatis/SqlMapConfig.xml
src/main/resources/properties/db.properties
src/main/resources/spring/applicationContext-dao.xml、applicationContext-service.xml、applicationContext-trans.xml
需要修改扫描的包为"com.taotao.content.service" dubbo服务名称修改为"taotao-content",dubbo服务向外暴露的端口为"20881"(每发布一个服务就要更改一个端口)
修改applicationContext-trans.xml文件,修改切面的包为com.taotao.content.service。
src/main/java/com/taotao/content/service
src/main/java/com/taotao/content/service/impl
src/main/resources/log4j.properties
src/main/webapp/WEB-INF/web.xml修改为"taotao-content"。
发布服务不一定非要使用tomcat,之所以使用tomcat是为了部署方便。
上节课我们一起搭建了内容服务工程,这节课我们一起学习如何添加内容分类。
我们到后台管理页面看看关于内容管理的内容,如下图所示。
我们再来看下content-category.jsp页面,这个页面就是内容分类页面,页面中
- 用来展示内容分类树,$(function()是在页面加载完后要调用的js,下面这段代码是用来获取分类列表数据的,发起的url请求是/content/category/list,animate:true的意思是设置动画,如果设置为true,展开树形结构时是慢慢展开的效果。如果设置为false展开树形结构就一下子展开了。method:"GET"指定发起的是GET请求。
请求的url:/content/category/list
请求的参数:id,当前节点的id。第一次请求是没有参数,需要给默认值“0”