中行bfw框架开发和测试资料ppt_第1页
中行bfw框架开发和测试资料ppt_第2页
中行bfw框架开发和测试资料ppt_第3页
中行bfw框架开发和测试资料ppt_第4页
中行bfw框架开发和测试资料ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、BFW开发基础培训开发基础培训 2010年年3月月 共六部分内容共六部分内容: 1 1、基于、基于BFWBFW的开发流程的开发流程 2 2、技术重点、技术重点 3 3、中行项目开发过程、中行项目开发过程 4 4、中行项目的测试、中行项目的测试 一、一、基于基于BFWBFW的开发流程的开发流程 l 概述 BFW(Bocsoft Frame Work) 是一个基于JAVA语言开发的,主要目标为企业应用开发中各种 难点提供综合全面的解决方案解决方案。(如:多渠道整合、用户权限控 制、事务处理、组件化资产管理于复用,第三方技术集成等) 其核心思想是以IOC/DI容器为资产累积的平台,面对各种应用问 题

2、,开发各种有针对性的组件,提供解决方案。并形成技术资产 ,持续优化与扩充,鼓励充分复用,以实现最大程度内提高开发 生产力的目标。 BFW 分层结构分层结构 4 框架比较框架比较 5 核心概念核心概念 开发组织架构开发组织架构 7 分层介绍分层介绍bfw项目开发项目开发 l 展现层开发展现层开发 l 服务层开发服务层开发 l DAODAO层开发层开发 l 产品层开发产品层开发 8 展现层开发展现层开发 1、展现层结构、展现层结构1 服务层(通过依赖注入,在交 易配置文件中定义使用) 开发开发jsp页面页面 委托页面 查询页面 撤销页面 授权页面 修改页面 批量页面 复核页面 开发开发Action

3、 委托Action 撤销Action 授权Action 复核Action 修改Action 批量Action 查询Action 交易配置文件 菜单配置文件 角色权限配置 格式校验配置 多语言支持 配置文件配置文件 1、展现层结构、展现层结构2 交易配置文件:交易配置文件:trs_*.xml 菜单配置文件:菜单配置文件:menu_*_*.xml 角色权限配置文件:角色权限配置文件:role.xml 格式校验配置文件:格式校验配置文件:style.xml 多语言支持:多语言支持: 异常信息:异常信息:bfw_error_*_*.properties 常量信息:常量信息:constant_*_*.

4、properties JSP页面:页面:jsp_message_*_*.properties 页面结构:页面结构:page_*_*.properties 字典消息:字典消息:dictionary_*_*.properties 下载文件标题:下载文件标题:download_titiles_*_* l 交易配置文件交易配置文件trs_*.xml l 最简单的交易 index http:/XXX/QueryOperatorPre.do l 交易 实现展现逻辑的基本要素。主要由action、fields、channels 组成 1. action:业务逻辑片断 2. fields:输入域 3. cha

5、nnels:呈现的选择 l 模版:执行流程 1. 每个交易对应一个预先定义的模板 2. 负责交易的流程控制 3. 对于业务逻辑片断的编程原则上都应该定义在Template中。 l chain:责任链 l command:责任链节点 * Delegate Command BFW-HTTP处理时序处理时序 14 15 BFW-HTTP核心组件核心组件 l MainServlet 作为IOC容器加载入口。 作为接入适配器,负责接收HTTP请求,调用控制 (MainController),并将处理结果派发给视图(View)进行 渲染。 l MainController 完成上下文(Context)加工

6、,负责调用BFW核心控制 (CoreController),并负责异常的处理,生成视图参数, 并将处理结果返回MainServlet。 l View 接受MainServlet发送来的数据,并负责数据的渲染呈现 。 BFW支持多种视图技术支持多种视图技术 download,jsp,Velocity等等 16 配置一个配置一个BFW-HTTP交易交易 l 确定交易配置 根据需求分析交易需要选择的模板模板 确定交易使用的视图类型,视图地址视图类型,视图地址 编写Action实现业务逻辑 编写视图页面视图页面 BFW-VIEW l 视图 BFW的视图定义在http.xml文件中, MainViewR

7、esolver 对象下。 在交易的channel属性中应配置视图类型、路径、参数视图类型、路径、参数 视图格式视图格式: VIEWTYPE,PATHKEY=VALUE, 视图类型: URL视图通常用来呈现html通过localeMode支持国 际化设定 Download视图用来支持文件下载 Stream视图通常用作系统间通讯 Servlet视图用来调用另一个BFW-HTTP交易 其他(Velocity,Dynamic.) BFW-ACTION l Action 通常我们集成AbstractExecutableAction抽象类 Action还有其他的接口如: Preparable,Submit

8、able,PageLoader,需要视选择的 模板决定。 l 图示: 下面具体步骤以下面具体步骤以 B2B的订单批量查询的订单批量查询 为例。为例。 orderMulQueryAct bpeMerchantIDStyle B2BOrderNumberoption=true date10Styleoption=true date10Styleoption=true ent/b2b/b2bQueryOrderResultid=0452 ent/b2b/test id=0021 B2bPaymentService CommonService 5 2、定义交易配置文件、定义交易配置文件1 交易名称 模

9、版名称(不可重复提交) action名称 提交后台的数据域 格式检查名称 Mvc中的视图 action名称Action定义的java类 注入action的依赖类 页面号 如何选择视图如何选择视图 l 页面转发: l l l ent/b2b/b2bQueryOrderResultid=0452 l ent/b2b/test id=0021 l l l /* 银行内部客户 */ l if(cusType != null /Action内部根据业务决定跳转的页面 l Style验证验证 l style验证 l bpeMerchantIDStyle l B2BOrderNumberoption=tru

10、e l date10Styleoption=true l date10Styleoption=true lstyle.xml: l l l false l (16-9|2-9d)d2)/(013578|102)/(01-9|12d|301)|(16-9|2- 9d)d2)/(013456789|1012)/(01-9|12d|30)|(16-9|2-9d)d2)/02/(01-9|1d|20-8)|(16- 9|2-9d)(048|2468048|1357926)|(16|2468048|357926)00)/02/29) l l l 2、定义交易配置文件、定义交易配置文件2 上面的介绍是最基

11、本的交易定义,上面的介绍是最基本的交易定义, 根据交易的不同目的、以及复杂程度,可以通过选择不同的模版、属性定义来实根据交易的不同目的、以及复杂程度,可以通过选择不同的模版、属性定义来实 现。现。 例如:例如: executeNoTokenTemplate 模版:可重复提交,查询页面可以使用模版:可重复提交,查询页面可以使用 executeTemplate 模版:不允许重复提交的页面必需使用模版:不允许重复提交的页面必需使用 ,并且对应的,并且对应的jsp页页 面中要使用面中要使用 标签,来控制重复提交。标签,来控制重复提交。 fileUploadTemplate 模版:文件上传可以使用模版:

12、文件上传可以使用 pageLoaderTemplate 模版:准备页面可以使用模版:准备页面可以使用 3、定义菜单文件、定义菜单文件 style_red true true CD001 tiOperate.do CD002 tiReview.do . 菜单名称,在menu_zh_CN.properties中定义对应的页面显示 菜单样式定义,可在BocnetClientWebContentcommoncsszh_CN中找到 菜单点击对应的交易 菜单对应角色权限的功能码,权限在role.xml中定义 4、角色权限配置文件、角色权限配置文件 Role.xml CD001 tiOperate tiAd

13、d tiModify tiDelete . Bfw框架角色权限处理类,无需关注 角色权限的功能码,在role.xml中定义 此功能码下可以进行的交易操作 5、格式校验、格式校验 对公展现层输入域格式校验包括三部分:对公展现层输入域格式校验包括三部分: 1、jsp页面的校验,通过页面的校验,通过js实现,大部分校验函数实现,大部分校验函数 在在BocnetClientWebContentcommonjs-srcFormCheck.js 中定义。中定义。 页面中不同格式输入域的校验方法可以参考页面中不同格式输入域的校验方法可以参考checklist。 2、style校验,通过在交易配置文件中定义输

14、入域,在校验,通过在交易配置文件中定义输入域,在style.xml中定义校验中定义校验 方法,由方法,由bfw框架进行验证。避免定义新框架进行验证。避免定义新style,尽量复用已有,尽量复用已有style。 3、action中校验,前两种校验主要针对单输入域的校验,对于和业务逻辑中校验,前两种校验主要针对单输入域的校验,对于和业务逻辑 相关的复杂交易,需要在相关的复杂交易,需要在action中实现。中实现。 页面显示页面显示jsp_message_zh_CN.properties lL10N_7541 =订单信息如下,请复核!订单信息如下,请复核! lL10N_6296 =订单号订单号 lL

15、10N_0033=网上银行网上银行 lL10N_0034=关闭关闭 lL10N_0036=账户概览账户概览 - 明细查询明细查询 - 银行账户银行账户 - 中国银行网上银行系统中国银行网上银行系统 lL10N_0037=关联账户关联账户 JSP页面使用页面使用boc:translator 标签来显示:标签来显示: l l l l l l l开发阶段写成即可,上线前批程序生成 页眉、页脚页眉、页脚page_zh_CN.properties l# 对账服务开始 # l#对账单核对-账单列表 .0471=余额对账单核对 lpage.top.0471=我们在这里为您提供余额对账单核

16、对、下载及其对应的账户明细对账单的查询与下 载功能 lpage.bottom.0471=1、客户点击操作项下的“核对”可进入该协议的账单界面进行核对账单操作。 2、本界面上只显示尚未反馈回执的对账单(含一年内本期和非本期所有余额账单),已核对 完成的协议则不予以显示 l#对账单核对-账单明细 .0472=余额对账单账户明细核对 lpage.top.0472=您可以在此点击查看每个账户对应的交易明细账单,并确认余额核对结果 lpage.bottom.0472=1、点击“提交”,系统将保存您本次操作结果;2、点击“暂存”,将暂 存您本次操作结果,您在下次登陆时可继续填写; 6、

17、jsp页面开发页面开发1 典型的页面有三种:典型的页面有三种: 1、只有数据展示的简单页面、只有数据展示的简单页面 委托、修改结果页面、详情页面委托、修改结果页面、详情页面 可选模板:executeNoTokenTemplate, pageLoaderTemplate 2、有数据提交的页面、有数据提交的页面 委托、修改委托、修改 可选模板: executeTemplate 3、分页页面、分页页面 复核、授权选择列表页面,查询结果页面复核、授权选择列表页面,查询结果页面 6、jsp页面开发页面开发2 提交页面提交页面 script language=JScript.Encode src= scr

18、ipt language=JScript.Encode src= . function checkForm() if (!check_empty(form1.PayeeValue|TrfDate|TrfAmt,|) return false; . pageProcessing(); return true; . 编码格式 Tile页面类型 公用js方法引用 禁止页面重复提交 显示bfw异常提示信息 页面提交异常返回后保留已有savedMap对象内容 显示滚动条,禁止页面操作 国际化定义 6、jsp页面开发页面开发3 提交页面提交页面 隐藏域,用来在页面间传递数据,名称要和交易中一致 异常信息显

19、示位置,和配合使用 6、jsp页面开发页面开发4 分页页面分页页面 . 7、bfw 标签标签 l l l l boc:option l boc:translator l boc:radio l l 表单防重,禁止页面重复提交。 配合模板executeTemplate使用。 ltrs_*.xml交易配置文件 l l lcassCheckConfirmResAction l l l lent/cass/check/cassCheckConfirmResid=04713 l l l 34 l 记录当前访问链接的地址,当抛ValidationException时 通过这个地址重定向到当前页面(显示bf

20、w异常信息) action if(accountNoObj=null) /如果没有余额调整记录,抛出异常 throw new ValidationException(bill.check.billAccDetailAdjust.detailSubmitEmpty); bfw_error_zh_CN.properties bill.check.billAccDetailAdjust.detailSubmitEmpty=账单核对的账号不为空 页面 35 l 用于保留页面装载时的列表数据 页面提交异常后保留已有savedMap对象的内容 A的数据发送到A的结果页面显示 /*设置上下文参数*/ con

21、text.setData(billId, new SaveObject(billId); context.setData(billCheckDetailsSize, new SaveObject(String.valueOf(details.size(); context.setData(billCheckDetails,new SavedArrayList(details); A的结果页面中包含bfw:saveMap标签,页面提交到B B抛出BfwException异常,跳回A的结果页面,之前从A带到页面的数据,希望保留显示 36 l boc:option l 1.列表数据来源与后台数据库

22、l l 列表的值列表的值 l l相当于 l l l l $item.oppFundNo/ $item.oppFundName/$item.openBank l l l 37 l boc:option l 2.列表数据来源常量文件 l l 列表当前默认选中值的 数据来源 l 38 constant.xml: 1 2 3 perties: #指令来源键值 Ti.TransSource.1=人工 Ti.TransSource.2=网银 Ti.TransSource.3=SWIFT l boc:translator 1.用于显示常量(带prefix) l l l l l 根据货

23、币码,如人民币001 l#币种属性 lCurrency.type.=全部 lCurrency.type.000=不可选择 lCurrency.type.001=人民币元 39 l boc:translator 2.用于国际化文本 l开发阶段,标签里直接写中文即可开发阶段,标签里直接写中文即可 l 40 jsp_message_zh_CN.properties L10N_0372=账 号: L10N_0373=账号账号 L10N_0374=别名 L10N_0375=账户信息如下,如需取消关联请确认! 3.用于国际化文本(javascript) if (!check_empty(balanceSe

24、lectName, ) return false; escape=“js“ 表示自动转译特殊字符,如字符串中的单引号等,通常都需要加上表示自动转译特殊字符,如字符串中的单引号等,通常都需要加上 41 l boc:button 注意注意value里面不需要在使用里面不需要在使用boc:translator标签,以下是错误的标签,以下是错误的 boc:button name=confirm value= onclick=return confirmation(); type=submit/ 42 l boc:formatNumber格式化标签 l 货币格式化(需要货币码) l 数字格式化 l 日期

25、格式化(支持date和string) 43 l 生成隐藏域,根据fieldList里逗号分割的key,隐藏域的 value自动取context里的data 分页时,页面的结果form需要加此标签,其中包含查询 form中的所有查询条件的名称 context.setData(“CifNo, cifNo); context.setData(“CifName, cifName); 44 服务层开发服务层开发 1、服务层的主要任务、服务层的主要任务 1.1.提供数据给展现层提供数据给展现层 2.2.接受展现层传入的数据,并进行逻辑处理接受展现层传入的数据,并进行逻辑处理 3.3.通过调用产品层与外系统

26、交互,调用通过调用产品层与外系统交互,调用DAODAO与数据库交互,来与数据库交互,来 实现以上两功能。实现以上两功能。 2、服务层与其他层之间的调用关系、服务层与其他层之间的调用关系 展现层 服务层 产品层 DAO Database 外部系统或后台系统 3、服务层代码、服务层代码 l 接口类接口类 .bocnet.service.financial.CyberGiroServiceCyberGiroService l 实现类实现类 com.bocnet.service.financial.impl.CyberGiroServiceImplcom.bocnet.service.financia

27、l.impl.CyberGiroServiceImpl 4、接口类方法的实现、接口类方法的实现 l public Transaction doTransactionSubmit(public Transaction doTransactionSubmit() ) l 对公网银生成的一笔交易记入数据库对公网银生成的一笔交易记入数据库 l 1.1.整理付款方、付费方、收款方信息整理付款方、付费方、收款方信息 l 2.2.他行收款的,验他行收款的,验cnapscnaps号与收款行名称之间是否匹配号与收款行名称之间是否匹配 l 3.3.验客户业务编号防重验客户业务编号防重 l 4.4.设置费率设置费率

28、 l 5.5.限额检查限额检查 l 6.6.调用审批流程、置交易状态调用审批流程、置交易状态 l 7.7.写数据库并记录日志写数据库并记录日志 5、service.xml文件配置文件配置 抽象抽象Bocnet服务服务 operatorDao overseaProduct bondProduct stockProduct 抽象服务被注入全部的产品和抽象服务被注入全部的产品和DAO ,所有的服务应该继承此服务,从而可以访,所有的服务应该继承此服务,从而可以访 问到需要的产品问到需要的产品DAO。 服务的配置及事务配置服务的配置及事务配置 PROPAGATION_REQUIRED,- service

29、Exception DAODAO层开发层开发 1、编写、编写DAO层要完成的几件事情层要完成的几件事情 1.1.自己编写或确认自己编写或确认( (与服务层、展现层沟通与服务层、展现层沟通) )相应实体类。相应实体类。 2.2.书写书写sqlMap文件文件sql( (可使用可使用eclipse abator插件生成后另行修改插件生成后另行修改) ) 3.3.编写编写DAO接口及实现类接口及实现类 4.4.编写相关配置文件编写相关配置文件( (sqlMapConfig.xml、dao.xml、service.xml) ) 下面以指令管理为例,简述下面以指令管理为例,简述DAODAO层的工作内容层的

30、工作内容 2、自己编写或确认相应实体类、自己编写或确认相应实体类 此过程需要与服务层、展此过程需要与服务层、展 现层沟通现层沟通 实体类从需求上说是对业实体类从需求上说是对业 务实体的抽象,从技术上务实体的抽象,从技术上 说就是简单说就是简单JavaBean, JavaBean, 业务属性构成类的成员变业务属性构成类的成员变 量,再提供量,再提供publicpublic的的 get/setget/set方法就可以了。方法就可以了。 这一步重要的是要与服务这一步重要的是要与服务 展现层产品层有良好的沟展现层产品层有良好的沟 通,变量命名合乎规范,通,变量命名合乎规范, 实体类间继承关系要合理、实

31、体类间继承关系要合理、 且要方便各层使用。且要方便各层使用。 3、书写、书写sql(具体语法请参考具体语法请参考 ibatis-guide) 一般情况一般情况sqlsql文件是放在文件是放在 sql-mappingsql-mapping目录下。目录下。 以以cs-traninstSql.xmlcs-traninstSql.xml为为 例例, , BOCNETBOCNET项目中一直使用命名项目中一直使用命名空间, 本例中namespace=“cs.traninst”, 因此如果一个sql的ID是 “selectTraninstByPk”,那么在系 统中,该sql的唯一标识就是” cs.trani

32、nst. selectTraninstByPk” 4、编写、编写DAO接口及实现类接口及实现类 一般情况,一个一般情况,一个DAO是对应一个数据库表,本例中是对应一个数据库表,本例中TraninstDao对应数据库对应数据库 CSTRANINST表,表,DAO提供增删改查操作提供增删改查操作 public interface TraninstDao /DAO接口声明接口声明 insert方法,一般由方法,一般由sql生成流水号,并通过该方法将流水号返回生成流水号,并通过该方法将流水号返回 int insertTraninst(Traninst object); delete方法,返回删除条数,

33、返回值由调用者判断是否处理方法,返回删除条数,返回值由调用者判断是否处理 int deleteTraninst (Integer traninstId); update方法,返回更新条数,返回值由调用者判断是否处理方法,返回更新条数,返回值由调用者判断是否处理 int updateTraninst(Traninst object); select 方法,一般需提供多种方法,一般需提供多种 根据主键查询交易实体类,一般是用于页面显示交易明细使用根据主键查询交易实体类,一般是用于页面显示交易明细使用 Traninst selectTraninstByPk(Integer traninstId);

34、复杂一点的查询复杂一点的查询 List selectTraninstByDynamic(Map params); 5、编写、编写DAO接口及实现类接口及实现类 DAO实现类需继承实现类需继承SqlMapClientDaoSupport public class TraninstDaoImpl extends SqlMapClientDaoSupport implements TraninstDao private String selectTraninstByDynamica = cs.traninst.selectTraninstByDynamica; private String inse

35、rtTraninst = cs.traninst.insertTraninst; public int insertTraninst(Traninst traninst) int rows = super.getSqlMapClientTemplate().update(insertTraninst, traninst) ) return rows; public List getTraninstByDynamic(Map params) List list = (List) super.getSqlMapClientTemplate().queryForList(selectTraninst

36、ByDynamica, params); return list; 6、编写相关配置文件、编写相关配置文件 lcs-traninstSql.xml l l l l l l l l l l l l l l l l l l l l l l l l l l t.TRANINST_ID , l t.TRAN_DATE , l t.CUSTACT_NO , l t.RECEV_TIME , l t.TRANS_TYPE , l t.EXCH_NO , l t.STA l l l cust.PORT_NAME as PORT_NAME, l tf.TRAN_TYPE_NAME as TRAN_TYPE_N

37、AME, l tf.YN_PRE_MATCH as YN_PRE_MATCH, l ex.EXCH_NAME as EXCH_NAME, l ex.EXCH_TYPE as EXCH_TYPE, l ed.DELIV_NAME as DELIV_NAME l l l l left outer join AMCUST cust l on t.CUSTACT_NO = cust.CUSTACT_NO l left outer join BMEXCH ex l on t.EXCH_NO = ex.EXCH_NO l l left outer join CSTRANCONF tf l on t.TRA

38、NS_TYPE = tf.TRAN_TYPE_NO and ex.EXCH_TYPE = tf.EXCH_TYPE l l left outer join BMDELIVE ed l on t.DELIV_NO = ed.DELIV_NO l l lSELECT CSTRANINST_SEQ.NEXTVAL AS traninstId FROM DUAL l l l l select , l from CSTRANINST t l l where t.TRANINST_ID = #traninstId# l and t.TRAN_DATE = #tranDate# l l l select ,

39、 l from CSTRANINST t l l where 1=1 l and t.TRANINST_ID = #traninstId# l and t.DEAL_NO = #dealNo# l and t.CUSTACT_NO LIKE %|#custactNo#|% l and cust.PORT_NAME LIKE %|#portName#|% l and t.EXCH_NO = #exchNo# l and t.TRANS_TYPE = #tranTypeNo# l l and to_date(t.TRANS_DATE, yyyy-MM-dd) = trunc(#beginDate#

40、) l l and to_date(t.TRANS_DATE, yyyy-MM-dd) !CDATA trunc(#endDate#) l l and t.STA IN ($sta$) l ORDER BY t.TRANINST_ID DESC l 6、编写相关配置文件、编写相关配置文件1 sqlMapConfig.xml 文件 。 。 6、编写相关配置文件、编写相关配置文件2 Dao.xml文件 BocnetDataSource sqlMapClient 6、编写相关配置文件、编写相关配置文件3 在service.xml中,需将新增加的dao注入的service的抽象类中,供所有servic

41、e调用 _entitlementController operatorDao tranInstDao accountPairDao entitlementDao 产品层开发产品层开发 1、产品层的主要任务、产品层的主要任务 1.1.接受服务层传入的接受服务层传入的 数据数据/ /对象对象 2.2.组织上送后台数据,对数据进行格式化组织上送后台数据,对数据进行格式化 3.3.发送数据到后台,等待后台返回数据发送数据到后台,等待后台返回数据 4.4.接收后台返回数据,对数据进行解析接收后台返回数据,对数据进行解析 5.5.判断交易判断交易 成功成功/ /失败失败 ,返回交易结果给服务层,返回交易结

42、果给服务层 2、各层之间的调用关系、各层之间的调用关系 展现层 服务层 产品层 DAO Database 外部系统或后台系统外部系统或后台系统 3、交易处理流程、交易处理流程 4、产品层调用关系、产品层调用关系 说明:所有的产品层对象在说明:所有的产品层对象在product.xmlproduct.xml定义,产品类的定义,产品类的refref对象类在对象类在 function.xmlfunction.xml中定义,中定义,FunctionFunction类调用的接口类在类调用的接口类在interface_ciss.xmlinterface_ciss.xml中中 定义定义 l 1、struts l 2、spring l 3、ibatis l 4、oracle l 5、jsp l 6、uml 二、技术重点二、技术重点 l 1、struts l 对struts知识和开发经验的积累,有助于对bfw框架的理解。 bfw的MVC部分虽未 采用struts框架,但是有许多共性的东西。 l MVC思想 l Action,Form,Action配置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论