`

分享我的大型Java多用户商城系统开发的心得和困难

阅读更多
看到别的朋友在ITEYE上发表的“开发电子商务网站技术选型“有感而发。地址是
http://www.iteye.com/topic/1119464
本人一直从事Java企业级开发,因此接触过不少Java的开发框架。目前作一个多用户商城的创业项目,因为本人只专著于JAVA,那没有办法,都不用选型了。进入JAVA世界之后又有很多框架可以选择,列举几个熟悉的,例如表示层struts, spring mvc, jsf,tapestry..., 控制层:spring/ejb, ejb不知道算不算阿,反正spring的作者说了他开发spring是为了跟ejb抗衡而生的,见那本经典的红皮书:Expert One-on-One J2EE Development without EJB,这本也是我刚学spring所用到的。数据持久层:hibernate/ibatis/jdbc,归根到底都是jdbc,这个一定要掌握。下面说说各个层面的选型比较。除了这几个层面的,当然还有其他的框架要选择的了,java就是框架太多了,刚进门的朋友估计眼睛都看花了。不过我奉劝各位新入门的朋友,一定要注意Java基础,所有的框架都是在这些基础上幻变而成,而Java作web应用的核心技术就servlet/jsp/jdbc/这几个(ejb应该也算吧,我看到很多大型应用都离不开JMS/EJB等),有空研究一下JDK,Spring,Hibernate,Tomcat等开源框架的代码,里面体现了n多的设计模式,代码规范等,一定会给你带来技术上的升华。我本人也刚开始看,觉得获益不浅,如果我们只是知道怎么应用框架而不知道他底层的含义,那只是停留在程序员的水平而以,所以往架构师方向发展的话,Java要越做越底层。


先交待一下项目背景,要不就不知道为啥要这么选择了。现在电子商务是越来越火,淘宝和京东的广告已经渗透和生活的各个角落。虽然最近团购网是不太景气,也有不少电商关门大吉。
但是我们有理由相信未来十年电子商务也是处于上升空间的。理由有下:
    1。 有研究说美国的电子商务比例要比中国大很多,中国IT行业流行的东西往往要比外国晚一些,中国电子商务还是有很大的发展空间。
    2。 中国上网人群越来越多,现在哪个小孩子不会使用电脑,哪怕是穷二代也好。而年纪大的人不一定会的
    3。 网购确实给人们生活带来了方便,尤其经济不好时,可以给大家提供更便宜合适的产品。
    4。 中国做的有点规模的公司应该不会只满足于在淘宝/拍拍等网站上面开个店而已,京东/走秀网的成功会刺激其他人加入这个行业竞争。
    5。 淘宝实行提高门槛的做法,可能会把一部分小商家挤出来,不排除这些商家有建立独立网站的需求,但是要解决信用,流量的问题先。
   
    以上理由是个人YY出来的,大家不要太认真,反正我们就是要以商城为主导来进行一个创业项目。OK,好了,那开始分析目前独立商城系统的竞争对手。
   
    目前php商城占据了大部分市场,跟着是.net商城,java商城没有几个好的,为排除作广告嫌疑,这里不出现任何商城系统的名字。为什么有这个现象呢,其实java语言的优势是非常明显的,银行电信行业基本都是以java为主,这个是我本人工作经历所见。包括现在淘宝/京东都有向java方向靠拢的趋势,由于java语言本身的架构是比较合适做大型应用,我们有理由相信java商城会由更大的发展空间。我们要着手解决Java开发成本高的问题,因此好的框架和开发模式是少不了的。
   
    因此我们写了一个Java多用户商城系统立足B2C,跟进C2C,前面的C其实是很多个B组成的,可以理解为B2B2C,类似淘宝商城模式。这样我们可以满足B2C的需求,也可以满足那些C2C人的要求,也避开市场上已有的成熟的商城的竞争。这里有一个好处是可以结合淘宝和百姓网赶集网模式作本地商家运营,就是每个城市或者高校都找一家代理商独自运营,数据都单独保留在他们的服务器上,我们总站只保留少量数据,例如单点登陆,统一的社区,统一的搜索体验等,这是个大project,暂时还没能推进下去,但是这个前途是无可限量的。已经有好些人咨询过类似方案,这样可以集百家之长来跟一些大型的商城抗衡,也就是B2B2C的模式吧,是个很好的思路,但是需要有实力的人去推动才行,估计以后会由类似商城出现。
   
    说太多的背景了,话回主题。目前系统已经小有成绩,但是也遇到不少问题,这里拿出来跟大家分享。
   
    我心目中最好的框架组合是:
    表示层:spring mvc 3.1 + annotation
    控制层:spring 3.1
    持久层:hibernate 3.6 +jdbcTemplate
    后台列表控件:displaytag 1.2
    Ajax框架: DWR 3
    JS框架 : Jquery
    缓存机制:spring 3.1 cache + ehcache/memcached
    静态化机制: Freemarker静态化/spring mvc伪静态化
    页面技术: EL + JSTL +JSP
    安全框架 spring security
    搜索引擎: Lucene
    中文分词:IKAnalyzer
    模板引擎: apache tiles 2.22
   
   
    以上框架均使用目前最新框架,如果有更新特性出来的话可能会更换。
   
    部署视图所需:
    数据库: mysql
    Web 服务器: windows 下用apache, linux 下用ngnix
    应用服务器: Tomcat
   
    另外一些分布式的技术,例如EJB/web service/JMS等没有使用,如果改变部署方案时或者需要集成其他系统时可能会引入。
   
    一个中小型的部署方案是1台Web 服务器 + 2台Tomcat服务器 + 1台memcached服务器 + 1台图片服务器 + 1台数据库,此方案是方便系统不断的升级,而又使得投资比较少。
当然更大型的解决方案需要更多的服务器和在数据库上做更多的优化动作。最省钱的办法就是1个服务器就运行以上所有的服务,这个也不是不行,有个1G的内存都已经能应付不少流量了。在那些便宜的JSP空间只要有256/512M内存也可以跑,大有大的跑法,小有小的跑法。
  

    下面就比较关注的框架做个简单的对比:
   
    1 spring mvc vs struts2
    我们本来是采用struts1.3来开发,struts那层用的非常的薄,只是用于接收页面参数和拿到数据库数据之后打印到request中让页面展现。按理应该直接升级为struts2才对,但是看了spring mvc 2.5的annotation版本之后就抛弃struts2了,spring mvc可以让我很容易从页面拿到数据,并且采用非常少的配置和具有很强的灵活性,看了struts2之后觉得都是大同小异的思路,那我何必再引入更多的jar..
    2. hibernate va jpa ibatis
    Jpa跟Hibernate很类似,个人感觉没有hibernate灵活,hibernate在快速开发上是很有优势的,加上cache可以部分弥补性能上的损耗,另外尽量不用他的那个配置做复杂的关联。
    另外可以用jdbcTemplate顶上用的比较多的地方以提高性能。
    3. DWR vs Jquery
    DWR在js和后台java代码之间是很好的桥梁,尤其是跟spring配合的很好,但是Jquery在页面的功能是少不了,还好两者不排斥对方,那就一起用了。
    4. spring 3.1 cache + ehcache/memcached
     spring 3.1 直接支持cache了,这次hibernate的二级缓存可以退休了。如果在单机选择ehcache,集群方式采用memcached。 memcached是远程调用,性能必然会有损耗。
    5. JSP vs freemarker velocity
    自从JSP有了JSTL之后, struts 的标签我已经不用了,加上EL之后我也没有找到用freemarker velocity的理由,除了静态化之外,貌似JSP也可以做静态化的,这个我研究不深,如果有反对意见可以提出来。
    6. apache tiles vs sitemesh
    由于是学struts出身,tiles熟悉阿,而且现在也支持模糊匹配了,看一些网上评论说性能不会有太大差别,sitemesh3也许会好些,用生不如用熟。不过均不能达到那种实时生效的模板效果,谁能说说java怎么做?
    7. 其余几个就没什么悬念了, 由于现在免费的jsp空间比较多的支持mysql和tomcat, 所以这2个是我们要优先支持的,虽然我们也支持oracle等。
   
    问题:
    1。模板技术缺少灵活性,目前Php的大型商城系统有很多的模板可以用,这个也不全都是官方自己开发的,这个是Java商城需要向php商城学习的地方。因为java是mvc方式建设的,有java,jsp, html等,java class需要重启服务器才能生效,而且很难像php一样,把所有东西写在一个目录拷贝到服务器上即可使用,目前我还是没有什么好的思路能达到这个效果的,考察了apache tiles/sitemesh/freemarker/velocity等,都没有想到办法。。。只能做到内置好模板让用户挑选。要达到大家都能做模板的程度,需要把代码和文档继续完善和开源。
    2。B2B2C模式需要大量的人力物力,目前还不成熟。需要有实力和经验的人加盟我们。
    3。java开发代价是高了些,通过对框架的整合和默认约定,已经把后台代码的使用方式给固定下来,前台页面是比较耗时。但如何降低总体开发难度并开创一个Java品牌商城是很有挑战和难度的。
9
3
分享到:
评论
14 楼 梦行Monxin商城系统 2016-11-10  
   最困难的事情就是认识自己
13 楼 onecan 2016-02-24  
听从了大家的意见,LegendShop已经把Hibernate去掉了,只是保留Jdbctemplate很薄的一层,DWR也早去掉了,基本上整套都是Spring的解决方案,目前已经发布新版本了。
12 楼 www314599782 2015-08-11  
架构很不错我要把它写到我的项目里去
11 楼 engelshua 2015-01-14  
melin 写道
其实用了spring mvc3就没有必要用DWR。 DWR这个项目估计死掉了。。。



挖个坟,DWR除了可以方便的从后端取数据外,也有个功能好用。就是轮询消息推送机制,从服务器后端主动推送消息到浏览器,这个是spring mvc做不到的
10 楼 atgoingguoat 2014-11-23  
我也是才接手搞JAVA商城。
兄弟留下个联系方式。
方式以后请教
9 楼 LinApex 2014-07-18  
melin 写道
其实用了spring mvc3就没有必要用DWR。 DWR这个项目估计死掉了。。。


理由???
8 楼 zhao50632 2014-05-09  
  不错,可以参考下。
7 楼 onecan 2014-02-14  
atrun 写道
整点实用的:

前端,要回归,就HTML访问是最快的。 

1.页面层面:HTML+JS/Ajax ,如果要省事用JQuery

  [说明一下:HTML页面的加载时间主要分为三部分:服务端生成、网络时延、浏览器渲染。在服务端生成数据的时候,浏览器是处于闲置状态的,反之亦然。开发的时候,考虑页面分块加载,通过巧妙的JS逻辑,尽可能充分的利用服务器和浏览器的时间]

2.框架选择方面: spring mvc

数据库么,Oracle就算啦,你养不起,MySQL足够了,开始先读写分离,随着访问量上来,再考虑。

3.部署上:LVS + ngnix + varnish +tomcat + redis + mysql 

  LVS:  软负载,开始可以不考虑
  nginx: 动静分离,动态的tomcat处理,静态的varnish
  redis: 做cache用。

数据访问层,建议不要用hibernate

很中肯的回复,已经采纳部分意见,谢谢。目前系统不断在完善中。
6 楼 onecan 2014-02-14  
melin 写道
其实用了spring mvc3就没有必要用DWR。 DWR这个项目估计死掉了。。。

DWR已经从项目中去掉了,因为Jquery已经能做DWR做到的事情
5 楼 atrun 2012-01-20  
整点实用的:

前端,要回归,就HTML访问是最快的。 

1.页面层面:HTML+JS/Ajax ,如果要省事用JQuery

  [说明一下:HTML页面的加载时间主要分为三部分:服务端生成、网络时延、浏览器渲染。在服务端生成数据的时候,浏览器是处于闲置状态的,反之亦然。开发的时候,考虑页面分块加载,通过巧妙的JS逻辑,尽可能充分的利用服务器和浏览器的时间]

2.框架选择方面: spring mvc

数据库么,Oracle就算啦,你养不起,MySQL足够了,开始先读写分离,随着访问量上来,再考虑。

3.部署上:LVS + ngnix + varnish +tomcat + redis + mysql 

  LVS:  软负载,开始可以不考虑
  nginx: 动静分离,动态的tomcat处理,静态的varnish
  redis: 做cache用。

数据访问层,建议不要用hibernate
4 楼 谭砚耘 2012-01-04  
3 楼 onecan 2012-01-03  
solr看了确实是个好东西
2 楼 melin 2012-01-03  
其实用了spring mvc3就没有必要用DWR。 DWR这个项目估计死掉了。。。
1 楼 melin 2012-01-03  
搜索建议用solr。

相关推荐

    JAVA版商城系统源码

    商城系统是采用Java语言开发的多用户商城系统,使用 Spring+JPA+Velocity+Ehcache作为基础开发架构,应用 SpringSecurity框架管理系统权限,结合URL重写技术静态化商城前 台页面。Shopping结合多年的电商开发经验...

    java开发的国家电力系统所有源代码

    Java开发的国家电力系统源代码是一份宝贵的教育资源,特别适合那些想要深入了解大型企业级项目开发的程序员。这个项目采用Java技术栈,结合了JavaWeb和J2EE框架,揭示了如何构建复杂、高可用性的系统。 首先,让...

    基于java、mysql的网上在线商城系统

    总结,基于JavaWeb和MySQL的网上在线商城系统是一个综合性的项目,涉及前端设计、后端开发、数据库管理等多个方面。它不仅要求开发者具备扎实的技术基础,还需要对电商业务流程有深入理解。通过学习和实践这样的项目...

    Java开发流程(流程图)

    Java开发流程 Java开发流程 Java开发流程 Java开发流程 Java开发流程

    java信息管理系统设计与开发(源码)

    在IT行业中,Java是一种广泛应用的编程语言,尤其在企业级应用和信息管理系统开发领域,它以其强大、稳定和跨平台的特性备受青睐。本资源"java信息管理系统设计与开发(源码)"提供了一系列用Java实现的信息管理系统源...

    航空售票管理信息系统(内含数据库文件,Java源代码,系统开发文档)

    总之,这个航空售票管理信息系统项目是一个全面的学习资源,涵盖了数据库设计、Java编程、系统集成等多个IT领域的知识点,对于提升软件开发技能和理解信息系统运作具有显著帮助。无论是对数据库有兴趣的学生,还是...

    Java开发的酒店管理系统源码

    Java开发的酒店管理系统源码 Java开发的酒店管理系统源码Java开发的酒店管理系统源码Java开发的酒店管理系统源码 Java开发的酒店管理系统源码Java开发的酒店管理系统源码Java开发的酒店管理系统源码 Java开发的酒店...

    java开发的网站后台管理系统

    这个系统通常包含用户管理、权限控制、内容发布、数据管理等多个模块,是企业级应用开发中的常见案例,非常适合Java初学者和进阶者进行学习和实践。 在Java开发中,SSH(Struts2 + Spring + Hibernate)是一个经典...

    中控Java二次开发demo

    这个"中控Java二次开发demo"提供了使用Java语言进行中控考勤系统开发的示例代码和指南,对于需要进行此类开发的程序员来说是极其有价值的资源。 1. **中控考勤系统**:中控考勤系统通常集成了指纹识别、面部识别等...

    java实现的签到系统

    Java实现的签到系统是一种基于Web的管理工具...总结来说,这个Java实现的签到系统涵盖了Web开发的多个核心领域,包括后端开发、前端设计、数据库管理和安全措施。理解并掌握这些知识点对于构建类似的Web应用至关重要。

    Java开发的毕业设计-学生社团管理系统

    综上所述,"学生社团管理系统"是一个集成了多种Java技术的综合项目,对于学习和理解Java Web开发有着极大的帮助,同时也是毕业设计的良好实践。通过实际操作,开发者不仅可以深入掌握Java技术,还能提升项目管理能力...

    java项目开发验收交接整套模板

    在Java项目开发中,验收与交接是至关重要的环节,确保项目的质量和稳定性,同时为后续的维护和升级奠定基础。此"java项目开发验收交接整套模板"提供了全面的指导材料,帮助开发者和团队规范地完成这一过程。以下是...

    Java图形界面开发—学生信息管理系统 完整源码

    学生信息管理系统,使用Java开发。 1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。 2、使用了事件监听、Java操作SQLserver数据库等知识。 3、图形化界面中使用了JTable等组件,将查询结果...

    基于java开发环境的WebRTC 点对点视频通话系统

    总结来说,这个基于Java开发环境的WebRTC点对点视频通话系统是一个综合性的项目,涵盖了Java与WebRTC的集成、信令处理、媒体流管理等多个技术层面。开发者需要具备扎实的Java基础、良好的网络通信知识,以及对WebRTC...

    java开发详细设计文档模板

    java开发详细设计文档模板java开发详细设计文档模板java开发详细设计文档模板java开发详细设计文档模板java开发详细设计文档模板

    Java 超市管理系统 Eclipse

    【Java超市管理系统Eclipse】是一个基于Java编程语言和Eclipse集成开发环境的项目,用于实现一个全面的超市管理功能。这个系统涵盖了商品管理、库存控制、销售记录、客户管理等多个核心模块,旨在提高超市运营效率,...

    基于JAVA办公自动化系统(OA)

    【基于JAVA办公自动化系统(OA)】是一种使用Java编程语言开发的企业级应用,主要用于提高办公效率,实现工作流程自动化。该系统集成了多种功能模块,旨在简化日常办公任务,提升组织内部的工作协同能力。 首先,...

    java仓库管理系统项目源码

    1. **Java编程语言**:Java是这个系统的基础,它是一种跨平台的面向对象的编程语言,具有良好的可移植性、安全性及稳定性,特别适合大型项目开发。 2. **MVC设计模式**:在Java仓库管理系统中,很可能采用了Model-...

    java源码包---java 源码 大量 实例

    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上...

    java web接口开发demo

    【Java Web接口开发】是Web应用程序开发中的一个重要环节,它允许不同的系统或客户端通过网络进行数据交互。在Java世界中,实现Web接口通常涉及到Servlet、JSP、Spring MVC或者RESTful API等技术。本示例"java web...

Global site tag (gtag.js) - Google Analytics