热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【SSH网上商城项目实战30】项目总结

转自:https:blog.csdn.neteson_15articledetail

 

转自:https://blog.csdn.net/eson_15/article/details/51479994

0. 写在前面



项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人。顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们要做的首先是定位这个异常,一般异常的后面都会跟一个或多个Caused by:xxx,这些都是引起异常的原因,一般我们找最下面的一个Caused by,那里往往才是问题的根源。如果自己解决不了,可以去谷歌、百度搜索(搜索的时候别一大堆异常往上一贴,注意搜关键的部分!),一般我们遇到的问题,99.9%前人都遇到过,基本都能解决,我遇到不能解决的问题基本都是这么干的,自己解决的多了,就有感觉了~最后希望大家在阅读我的博客时会有所收获!
  
废话就不说了,下面总结一下这个网上商城的项目,我不会面面俱到,主要分为几个模块来总结,包括 用到了哪些技术等等,具体的细节我会在文章中附上快速链接,大家可以查看具体的某篇博文。

回忆一下这个项目,总共可以分为这些主要的模块:

  • 项目环境的搭建
  • 搭建后台管理系统
  • 搭建前台显示页面
  • 购物车相关功能
  • 在线支付功能
  • 邮件和短信的发送功能
  • 域名的申请和项目的部署
  • 表单验证和报表的显示

下面针对每个模块,做一下具体的分析。

1. 项目环境的搭建

这是每个工程都少不了的环节,而且也会出现很多乱七八糟的问题,刚开始学SSH的时候,总是苦于搭建环境,因为不太熟练,但是熟练了就好了,主要是要“有节奏的”去搭建,也就是说搭建一个环境工程得一步步来,一点点的搭,很多人上来就把jar包啪叽一下全导进去了,然后什么配置文件啊啪叽一下全写好或者从其他地方粘贴来,然后一运行,挂了……然后各种去找问题,何苦呢?这样的话就算搭建10次也不能得心应手。饭要一口口的吃,路要一步一步的走。

SSH的环境搭建,我个人遵循的流程是:

Spring --> Hibernate --> Spring整合Hibernate --> Struts2 --> Spring整合Struts2

每一步做完写个测试类测试一下,这很重要,因为一步步往下走的话,出错了也知道错在哪一步,去哪找问题,最重要的是,这种流程熟练了,下次再搭环境的时候就易如反掌了。关于SSH环境搭建的详细信息请看下面的博文:
  整合Struts2、Hibernate4.3和Spring4.2
  基本增删查改、Service和Action的抽取以及使用注解替换xml

2. 搭建后台管理系统

后台管理系统我用的是EasyUI搭建的,说真的,EasyUI我也是一知半解,前端的东西我了解的都不深,但是懂一点,具体用的时候也是各种去查的,也没系统的学过,所以没有一个良好的知识体系,但是也不影响去玩。程序猿都喜欢说玩一个技术啥的,听起来好像挺高大上的,慢慢的我也受到一些影响,也喜欢这么说了,不过我对于前端就真的在玩了……

jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的Javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。

EasyUI的请求都是Ajax请求,不会有新的页面出来,全都都在tab选项卡中或者弹出一个窗口之类的。后台管理系统主要分为三部分:商品的类别管理、商品的管理以及销售管理。销售管理放在最后再说。

2.1 商品类别的管理

该部分主要涉及到了EasyUI环境和后台框架的搭建、数据库的级联查询和分页、DataGrid数据显示、Struts2整合json以及商品类别的添加、删除、更新和搜索。这也是遵循了该部分的一个完成的顺序。

DataGrid以表格的形式展示数据,开发人员不需要具备特定的知识就可以操作它,它有个很好的帮助文档,比较详细,在本项目中我也介绍了创建DataGrid的几种方式,并且也简单介绍了一下DataGrid的部分属性,算是入门吧,我也是入门,多多开发才能掌握这个技术。

类别的添加、删除、更新和搜索功能,主要都是利用EasyUI自带的验证功能,添加商品类别的时,验证输入框的输入是否正确,是否必填等;删除时是否先选中的某一行或某几行;更新的时候每次只能更新一行等,所有这些都是Ajax请求。

关于这部分内容的详细信息,我已经归类了,请参考这些博文:

使用EasyUI搭建后台页面框架
EasyUI菜单的实现
数据库的级联查询和分页
基于DataGrid的数据显示功能
Struts2和Json的整合
DataGrid实现查询和删除功能
DataGrid实现添加和更新功能
    
下面是我自己遇到的问题:
Struts2和Json整合中的懒加载异常问题
Hibernate4执行save()或update()无效

2.2 商品的管理

商品的管理也有添加删除等操作,跟类别管理道理上是一样的,有个地方就是商品的添加,需要上传商品的照片,这里涉及到了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后就可以在Action中使用该model,但是现在如果有两个Model咋整呢?在struts2中还有另外一个叫parametersAware接口,只要实现了这个接口,并且定义一个存储参数的Map,就可以接收request请求中的所有参数,我们可以根据不同的参数来判断使用哪个model,这种方法可以很好的解决struts2处理多个model请求问题。

关于该部分的技术细节,请参考下列博文:

在线支付平台的介绍
易宝支付流程的一个demo
获取银行图标和支付页面的显示
完成在线支付功能的逻辑
struts2中如何处理多个model请求

6. 邮件和短信的发送功能

邮件的发送和短信的发送这一部分相对来说比较简单,都是一些固定的API,会用就行,记不住查查即可,我也记不住。邮件发送功能要导入mail.jar包,然后根据流程发送邮件即可,短信功能首先得去申请一下短信发送功能,申请好了后,第三方就会给我们提供一些API接口,我们只要参考他的就可以开发短信发送功能了,跟支付功能有点类似,都是借助于第三方平台。 
这部分也没啥技术难点,主要是流程吧,相关的博文如下:

使用java email给用户发邮件
完成订单支付成功后的短信发送功能

7. 域名空间的申请和项目的部署发布

这一块主要介绍了如何申请一个免费的域名空间(免费15天而已啦~不过对于学习来说,enough~),虽然不是全部免费的,但是我们主要是要搞清楚这个流程,自己走一遍也好,并不一定要上传完整的工程,一个jsp页面或者html静态页面都行。


项目的部署和发布主要有两种方式:一种是使用FTP上传,不过这个比较慢,而且有可能会丢失数据,个人的经验是一点一点的发;还有一种方式就是申请域名空间那里会提供一个部署的环境,我们只要将工程导出为war包,然后把war包部署上去即可。


在项目部署之前有很多细节需要注意,比如要修改一些路径啊,要修改一些数据啊等等,这些细节在我的博客里都有详细的说明。该部分就一篇博文,如下:

域名空间的申请和项目的部署发布

8. 表单验证和报表的显示

后面补充了一些东西,就是Ajax动态更新购物车中商品的数量、表单的验证和报表的显示。

Ajax动态更新购物车中商品的数量就是纯粹的Ajax技术,我学习了一下而已,表单的验证主要是登陆表单,这个项目里我没做登陆了,但是登陆表单我做了一个,验证功能也做好了,主要用到的是jQuery的Validate验证插件,这个插件还是很强大的,可以直接将登陆表单加到项目中,设置一下相应的跳转即可。

报表的显示主要用的是JsChart,这款工具很好用,可以生成响应的js代码,我们要做的就是前台发送Ajax请求给后台,根据实际需求从后台取出数据,传到前台用JsChart图表显示出来即可。


推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
邻居小明
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有