源码下载 http://www.byamd.xyz/hui-zong-1/
ws-fruitshiop
项目介绍
-
项目简介
基于SOA的分布式电商客户端系统,各服务和总线之间采soap1.2协议
-
采用关键技术
CXF3.7框架
Spring
JSP&Servlet
JSTL
EL表达式
c3p0连接池
DbUtils数据访问框架
BeanUtils
jQuery
Ajax
自定义事务管理机制MannagerThreadLocal
SOAP1.2协议
- 开发环境
jdk1.7
tomcat8.5、8.0
MySql5.5.27
MyEclipse Enterprise Workbench 2017 CI 7
字符集编码:utf-8
- 项目演示
- 主页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Gdm6SVp-1617337855910)(media/64bd2dc7a0d326b97062b3f675a0d57b.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7d9YKwa-1617337855913)(media/56696f072de998204f2fd4a43ff1f23e.png)]
- 登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IX5wrj2-1617337855916)(media/eeedb648794ddd9c4480495bf355b3df.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWDyjBkf-1617337855919)(media/e05a8dcd92209565db28df4d9a2be69b.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrxGeao2-1617337855922)(media/52e82432ae1c80c7d0e47adb503cb714.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kAHaDxF6-1617337855924)(media/5f6ffc22e2010cc1f2c58e95ce8450d0.png)]
- 注册
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RKWBKWZ-1617337855926)(media/ba77985d341f636bce3751ad4e479982.png)]
- 购物车
- 水果列表
- 历史订单
源码简析
- 架构设计
ws-fruitshop-bus | 总线 |
---|---|
ws-fruitshop-fruit | 提供水果服务 |
ws-fruitshop-order | 提供订单服务 |
ws-fruitshop-user | 提供用户服务 |
- 暴露接口描述
服务接口 | 方法 | 描述 | 发布地址 | Wsdl文件 |
---|---|---|---|---|
UserServiceInterface | login() | 为总线提供登录服务 | http://127.0.0.1:8081/ws-fruitshop-user/ws | UserServiceInterface_wsdl.xml |
regist() | 为总线提供注册服务 | |||
FruitServiceIntergface | findFruitPage() | 为总线提供水果页服务 | http://127.0.0.1:8084/ws-fruitshop-fruit/ws | FruitServiceInterface_wsdl.xml |
findFruitById() | 为总线提供查询水果服务 | |||
FruitServiceInterface2 | updateReserve() | 为order服务提供更新水果库存服务 | FruitServiceInterface2_wsdl.xml | |
OrderServiceInterface | findOrderByUserID() | 为总线提供根据用户ID查找订单服务 | http://127.0.0.1:8087/ws-fruitshop-order/ws | FruitServiceInterface2_wsdl.xml |
addOrder() | 为总线提供添加订单服务 |
-
数据库
ws-fruitshop-user项目使用mysql5.5.27
ws-fruitshop-order项目使用mysql5.5.27
ws-fruitshop-fruit项目使用mysql5.5.27
-
webservice服务开发
-
下载cxf框架,并配置系统环境变量。本次开发使用apache-cxf-3.2.7。
-
创建web项目,并导入CXF下lib文件夹里的所有jar包。
-
创建SEI接口,注意加入‘@WebService’标签,如:
- 创建SEI实现类,如
- 配置spring配置文件applicationContext.xml发布服务,配置服务地址、服务接口和服务实现类。如:
-
配置web.xml,配置spring配置文件和加载的listener,配置CXF的servlet
-
将项目部署到tomcat下,启动tomcat
-
测试服务
WSDL地址规则:http://ip:端口号/项目名称/servlet拦截路径
- webservice服务生成客户端并部署
-
在客户端项目下引入CXF下lib文件夹里的所有jar包。
-
使用CXF提供的wsdl2java工具生成客户端代码。
如:wsdl2java -p com.fruitshop.service.user -d .
http://localhost:8081/ws-fruitshop-user/ws/user?wsdl
- 配置客户端spring配置文件applicationContent.xml。
- 根据wsdl说明书使用生成代码来调用远程服务。
- 服务业务关键代码
- 三个服务项目和一个总线项目统一采用MVC风格,包的命名格式类似下图:
- Dao层使用C3P0连接池和Apache.commons.dbutils框架对数据库进行操作。
- 事务管理,自定义线程管理类ManagerThreadLocal。
-
使用Apache.commons.beanutils工具封装从前端传入后端的数据。
-
使用JSTL的<c:forEach
>标签水果展示、购物车信息、历史订单信息等都采用了动态表单。 -
登录、注册、修改信息,使用jQuery在前台拦截可以不访问数据库确认的错误,减少数据库约束。以注册的jQuery为例,提前写好错误提示的div文字,当检测出需要拦截时,jQuery.css()方法响应对应div的id,更改样式。
项目部署简介
注:因为在本地测试,所有的服务和总线都部署在本地。
-
在MyEclipse或Eclipse下打开四个项目。
-
分别右键每个“工程 -> Properties -> Java Build Path -> Add
JARs”导入所有“外部jar包”文件夹下的jar包。 -
在项目文件中,已经包含了服务所生成的客户端代码。注意生成的客户端代码还是java源码,并没有进行打包处理,已经导进了项目源码中。
-
向数据库中导入三个数据库脚本fruit.sql、order.sql、user.sql,会生成三个数据库,数据库中已经存在一些开发时测试用的数据。
-
根据本地数据库信息配置ws-fruitshop-fruit、ws-fruit-order和ws-fruit-user三个服务项目src下的c3p0-config.xml。
-
准备4个tomcat服务器,先将提供服务的ws-fruitshop-fruit、ws-fruit-user项目部署在相应的两个服务器上。
-
由于服务项目ws-fruitshop-order和总线ws-fruit-bus都用到了其他服务提供的接口,所以先配置ws-fruitshop-order项目config下的applicationContext.xml的fruit服务地址。只需根据ws-fruitshop-fruit所在服务器的端口号修改端口号即可。配置完成后,将项目ws-fruitshop-order部署在第三个服务器上,并启动。
-
再配置ws-fruitshop-bus项目config下的applicationContext.xml。根据前三个服务所在服务器的端口号修改端口号即可。
-
再将ws-fruitshop-bus部署到第四个服务器上并启动访问:localhost:8080/ws-fruitshop-bus/index.jsp。当然端口号还是修改为总线项目部署服务器的端口号。
注意:
- 在步骤“3”中讲到,所有服务的客户端代码已经生成,并且以java源代码的形式添加到相应项目的相应包中。当然,可按照该文档“webservice服务生成客户端并部署”进行重新生成。生成之后在替换相应包中的源码即可,所以下面给出各项目用到其他外部服务的客户端代码所放的位置。
-
在ws-fruitshop-bus中com.fruitshop.fruit.service存放ws-fruitshop-fruit提供的FruitServiceInterface服务。com.fruitshop.order.service存放ws-fruitshop-order提供的OrderServiceInterface服务。com.fruitshop.user.service存放ws-fruitshop-user提供的UserServiceInterface服务。
-
在ws-fruitshop-order中com.fruit.service2存放ws-fruitshop-fruit提供的FruitServiceInterface2服务
-
各服务提供方的发布地址也是能修改的,例如http://127.0.0.1:8084/ws-fruitshop-fruit/ws/fruit?wsdl
-
‘127.0.0.1’ 是服务发布的服务器地址;
-
‘8084’是服务器发布服务的相应端口号;
-
‘ws-fruitshop-fruit’是服务项目名称;
-
‘ws’是CXF的servletd的url-pattern,可在WebRoot/WEB-INF/web.xml中修改;
-
‘fruit’是服务接口的地址可在config/applicationContext.xml中配置。
-
-
-