项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,聚沙成塔,写博客的过程是固化思路的一个过程,对本身颇有用,同时也能帮助别人。顺便说个题外话,在学习的过程当中确定会遇到不少异常出现,咱们要作的首先是定位这个异常,通常异常的后面都会跟一个或多个Caused by:xxx,这些都是引发异常的缘由,通常咱们找最下面的一个Caused by,那里每每才是问题的根源。若是本身解决不了,能够去谷歌、百度搜索(搜索的时候别一大堆异常往上一贴,注意搜关键的部分!),通常咱们遇到的问题,99.9%前人都遇到过,基本都能解决,我遇到不能解决的问题基本都是这么干的,本身解决的多了,就有感受了~最后但愿你们在阅读个人博客时会有所收获!
废话就不说了,下面总结一下这个网上商城的项目,我不会面面俱到,主要分为几个模块来总结,包括 用到了哪些技术等等,具体的细节我会在文章中附上快速连接,你们能够查看具体的某篇博文。
回忆一下这个项目,总共能够分为这些主要的模块:css
下面针对每一个模块,作一下具体的分析。html
这是每一个工程都少不了的环节,并且也会出现不少乱七八糟的问题,刚开始学SSH的时候,老是苦于搭建环境,由于不太熟练,可是熟练了就行了,主要是要“有节奏的”去搭建,也就是说搭建一个环境工程得一步步来,一点点的搭,不少人上来就把jar包啪叽一下全导进去了,而后什么配置文件啊啪叽一下全写好或者从其余地方粘贴来,而后一运行,挂了……而后各类去找问题,何苦呢?这样的话就算搭建10次也不能驾轻就熟。饭要一口口的吃,路要一步一步的走。
SSH的环境搭建,我我的遵循的流程是:前端
spring –> hibernate –> Spring整合Hibernate –> Struts2 –> Spring整合Struts2web
每一步作完写个测试类测试一下,这很重要,由于一步步往下走的话,出错了也知道错在哪一步,去哪找问题,最重要的是,这种流程熟练了,下次再搭环境的时候就易如反掌了。关于SSH环境搭建的详细信息请看下面的博文: spring
整合Struts二、Hibernate4.3和Spring4.2 数据库
基本增删查改、Service和Action的抽取以及使用注解替换xmljson
后台管理系统我用的是EasyUI搭建的,说真的,EasyUI我也是只知其一;不知其二,前端的东西我了解的都不深,可是懂一点,具体用的时候也是各类去查的,也没系统的学过,因此没有一个良好的知识体系,可是也不影响去玩。程序猿都喜欢说玩一个技术啥的,听起来好像挺高大上的,慢慢的我也受到一些影响,也喜欢这么说了,不过我对于前端就真的在玩了……
jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富而且美观的UI界面。开发者不须要编写复杂的JavaScript,也不须要对css样式有深刻的了解,开发者须要了解的只有一些简单的html标签。
EasyUI的请求都是Ajax请求,不会有新的页面出来,全都都在tab选项卡中或者弹出一个窗口之类的。后台管理系统主要分为三部分:商品的类别管理、商品的管理以及销售管理。销售管理放在最后再说。缓存
该部分主要涉及到了EasyUI环境和后台框架的搭建、数据库的级联查询和分页、DataGrid数据显示、Struts2整合json以及商品类别的添加、删除、更新和搜索。这也是遵循了该部分的一个完成的顺序。
DataGrid以表格的形式展现数据,开发人员不须要具有特定的知识就能够操做它,它有个很好的帮助文档,比较详细,在本项目中我也介绍了建立DataGrid的几种方式,而且也简单介绍了一下DataGrid的部分属性,算是入门吧,我也是入门,多多开发才能掌握这个技术。
类别的添加、删除、更新和搜索功能,主要都是利用EasyUI自带的验证功能,添加商品类别的时,验证输入框的输入是否正确,是否必填等;删除时是否先选中的某一行或某几行;更新的时候每次只能更新一行等,全部这些都是Ajax请求。
关于这部份内容的详细信息,我已经归类了,请参考这些博文: tomcat
使用EasyUI搭建后台页面框架
EasyUI菜单的实现
数据库的级联查询和分页
基于DataGrid的数据显示功能
Struts2和Json的整合
DataGrid实现查询和删除功能
DataGrid实现添加和更新功能
下面是我本身遇到的问题:
Struts2和Json整合中的懒加载异常问题
Hibernate4执行save()或update()无效服务器
商品的管理也有添加删除等操做,跟类别管理道理上是同样的,有个地方就是商品的添加,须要上传商品的照片,这里涉及到了Struts2实现文件上传的功能,咱们须要在服务器端建一个文件夹专门用来存储上传文件的,而后写一个model来接收文件,关于文件上传,要专门写一个工具类,项目中开发就是这样的,共性的代码必定要抽取,哪怕只有一句代码也要抽取!这是习惯,也是必需要作的。具体细节参下面列出的这些的博文:
商品类基本模块的搭建
查询和删除商品功能的实现
添加和更新商品功能的实现
Struts2实现文件上传功能
3.搭建前台显示页面
该部分具体的技术细节,参见下面这几篇博文: 固然,前台的页面不是我设计的,这一块内容我总结的是跟前台显示相关的一些后台技术,好比:监听器获取首页数据、定时器同步首页数据、Hibernate二级缓存处理热门商品的缓存等。
之前在学习serlvet的时候,首页显示数据我是这么干的,用一个frame,右边显示数据,那么index.jsp中右边的部分我跳转到一个servlet,而后servlet中去数据库中取出全部商品,放到request域中带过去新的jsp页面显示。这虽然能实现,可是很笨。在这里我用了监听器来干这件事,首先本身定义一个监听器,在项目启动的时候把数据库中全部商品信息给取出来,放到application域中,而后首页中直接用EL表达式从application域中去取便可。
还有个问题,当我在管理系统中添加一个新的商品时,我必需要重启一下tomcat才能将新的商品加到application域中,由于第一次取出来后就一直在application域中了,就定死了,后面新添加的就不在application域里面,为了解决这个问题,我使用了定时器来同步首页数据。因而改写了以前写好的监听器,在监听器中设置一个定时器,获取数据库中商品的数据的代码放到定时器任务中,第一次开启立马执行,而后每6个小时执行一次(时间能够本身随便设定),也就是说每6个小时从新获取一下数据库中的商品,存到application域中。通常网站也是这么干的,像CSDN的我的博客主页也是,天天更新一次排名,大概是晚上10点左右吧,具体时间我忘了。那个时候刷新就会看到数据的更新,这样也减少了服务器的压力。
使用监听器获取显示在首页的数据
监听器如何获取Spring的配置文件
线程、定时器定时同步首页数据
Hibernate二级缓存处理首页的热门显示
4.购物车相关功能
购物车基本功能的实现 购物车的部分主要涉及到的技术有:后台的处理购物车和购物项的逻辑、过滤器判断登录、订单的级联入库以及页面缓存的问题。
购物车的话主要是后台的一些实现逻辑了,购物车里须要有购物项,啥意思呢?咱们在天猫上买东西都知道,能够把不一样的商品都放到购物车里,而后购物车里有不少商品,每一个商品的数量又能够有多个,每一个商品及其相关信息就是一个购物项,因此添加购物车的时候,咱们首先要完成一个购物项,再将此购物项添加到购物车里。
当用户想要结算的时候,咱们得首先判断用户有没有登录,这用到了过滤器技术,专门过滤某一类的url,在过滤器中判断当前session中有没有user对象,若是有说明登录过了,直接放行就行,若是没有则跳转到登录页面让用户登录,登录完成后跳转到用户原来想去的页面。也就至关于门卫同样~看大门的~
刚刚也提到了,订单信息包含 购物车和购物项,那么咱们在订单入库的时候,就要考虑到它们的级联问题,咱们能够经过在二者的POJO中设置相应的注解属性便可,可是有个前提,像这种有外键关联的,在入库以前都要将对应的POJO中的外键部分的字段赋好值,好比订单要将订单项加进去,订单项中的订单属性也得赋好值,而后才能够交给Hibernate,Hibernate根据配置好的注解(或者xml文件)将它们一块儿级联入库。
页面缓存的问题指的是,当用户确认了订单后,若是点后退,又会回到订单确认页面,刚刚的订单确认页面又出来了,并且session还在,信息仍是刚刚的信息,这明显不是咱们想要的结果。咱们须要在前台和后台同时进行处理才行。
该部分具体技术细节,请参见下面的几篇博文:
5.在线支付功能
在线支付平台的介绍 这一部分主要介绍了一些关于易宝支付接口的东西,其实在线支付功能针对不一样的第三方都是不同的,主要是要理解在线支付功能开发的一个流程,具体技术细节得依赖具体的第三方所提供的资料了。可是通常的流程都是:调用第三方的接口 –> 第三方调用银行接口 –> 完成支付 –> 第三方回跳到咱们指定的页面。
这部分中,还涉及到了一个重要的技术,就是struts2如何处理多个model请求。通常struts2实现了ModeDriven<model>
后就能够在Action中使用该model,可是如今若是有两个Model咋整呢?在struts2中还有另一个叫parametersAware接口,只要实现了这个接口,而且定义一个存储参数的Map,就能够接收request请求中的全部参数,咱们能够根据不一样的参数来判断使用哪一个model,这种方法能够很好的解决struts2处理多个model请求问题。
关于该部分的技术细节,请参考下列博文:
易宝支付流程的一个demo
获取银行图标和支付页面的显示
完成在线支付功能的逻辑
struts2中如何处理多个model请求
6.邮件和短信发送功能
使用Java email给用户发邮件 邮件的发送和短信的发送这一部分相对来讲比较简单,都是一些固定的API,会用就行,记不住查查便可,我也记不住。邮件发送功能要导入mail.jar包,而后根据流程发送邮件便可,短信功能首先得去申请一下短信发送功能,申请好了后,第三方就会给咱们提供一些API接口,咱们只要参考他的就能够开发短信发送功能了,跟支付功能有点相似,都是借助于第三方平台。
这部分也没啥技术难点,主要是流程吧,相关的博文以下:
7.域名空间的申请和项目的部署发布
这一块主要介绍了如何申请一个免费的域名空间(免费15天而已啦~不过对于学习来讲,enough~),虽然不是所有免费的,可是咱们主要是要搞清楚这个流程,本身走一遍也好,并不必定要上传完整的工程,一个jsp页面或者html静态页面都行。
项目的部署和发布主要有两种方式:一种是使用FTP上传,不过这个比较慢,并且有可能会丢失数据,我的的经验是一点一点的发;还有一种方式就是申请域名空间那里会提供一个部署的环境,咱们只要将工程导出为war包,而后把war包部署上去便可。
在项目部署以前有不少细节须要注意,好比要修改一些路径啊,要修改一些数据啊等等,这些细节在个人博客里都有详细的说明。该部分就一篇博文,以下:
8.表单验证和报表显示
使用Ajax技术局部更新商品数量和总价 后面补充了一些东西,就是Ajax动态更新购物车中商品的数量、表单的验证和报表的显示。
Ajax动态更新购物车中商品的数量就是纯粹的Ajax技术,我学习了一下而已,表单的验证主要是登录表单,这个项目里我没作登录了,可是登录表单我作了一个,验证功能也作好了,主要用到的是jQuery的Validate验证插件,这个插件仍是很强大的,能够直接将登录表单加到项目中,设置一下相应的跳转便可。 报表的显示主要用的是JsChart,这款工具很好用,能够生成响应的js代码,咱们要作的就是前台发送Ajax请求给后台,根据实际需求从后台取出数据,传到前台用JsChart图表显示出来便可。
该部分的博文,我列出来放在下面: