![jfinal技術(shù)框架解析_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/e770bb3e-c8fb-49e8-821f-58c0011286e7/e770bb3e-c8fb-49e8-821f-58c0011286e71.gif)
![jfinal技術(shù)框架解析_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/e770bb3e-c8fb-49e8-821f-58c0011286e7/e770bb3e-c8fb-49e8-821f-58c0011286e72.gif)
![jfinal技術(shù)框架解析_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/e770bb3e-c8fb-49e8-821f-58c0011286e7/e770bb3e-c8fb-49e8-821f-58c0011286e73.gif)
![jfinal技術(shù)框架解析_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/e770bb3e-c8fb-49e8-821f-58c0011286e7/e770bb3e-c8fb-49e8-821f-58c0011286e74.gif)
![jfinal技術(shù)框架解析_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/8/e770bb3e-c8fb-49e8-821f-58c0011286e7/e770bb3e-c8fb-49e8-821f-58c0011286e75.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JFinal 技術(shù)架構(gòu)淺析1.1空間架構(gòu)框架采用微內(nèi)核全方位擴(kuò)展架構(gòu),全方位是指其擴(kuò)展方式在空間上的表現(xiàn)形式。整個(gè)空間架構(gòu)由HandlerInterceptorControllerRenderPlugin五大部分組成。每個(gè)部分都是基于接口實(shí)現(xiàn)的,支持完整的自定義,使用靈活,擴(kuò)展性強(qiáng)??臻g架構(gòu)圖。HandlerInterceptorControllerRenderPlugin1.2邏輯架構(gòu)框架的邏輯架構(gòu)非常簡(jiǎn)單,就是一個(gè)經(jīng)典的MVC模式演化、大致分成以下6個(gè)步驟:1.2.1 Http包括HttpServletRequest、HttpServletResponse,即客戶端請(qǐng)求與響應(yīng)1.2.2 F
2、ilter所有請(qǐng)求的攔截器,相當(dāng)于是一個(gè)閘口1.2.3 Handler請(qǐng)求處理器,是對(duì)所有請(qǐng)求的公共處理,在這里我們可以做權(quán)限控制、安全驗(yàn)證等。它是一個(gè)責(zé)任鏈模式變種,由初始配置的Handler以及框架默認(rèn)的ActionHandler構(gòu)成一個(gè)鏈條,依次執(zhí)行。1.2.4 Action動(dòng)作處理器,它是一個(gè)AOP+Command模式變種由ActionInvocation進(jìn)行調(diào)度,先執(zhí)行攔截器,最后執(zhí)行具體方法。1.2.5 Model模型層。在這個(gè)層面包括實(shí)體模型的定義、DB+ActiveRecord模式數(shù)據(jù)庫(kù)操作的支持、從請(qǐng)求中解析出對(duì)應(yīng)參數(shù)構(gòu)造Model實(shí)例,可以把它看成是DAO(1.2.6 Re
3、nder渲染層。負(fù)責(zé)將服務(wù)端的數(shù)據(jù)組裝成客戶端需要的數(shù)據(jù)格式,然后response至U客戶端。支持多種視圖的渲染:FreeMark、Jsp、VELOCITY以及自定義。HttpServletRequestHttpServletResponseJFinalFilter(所有請(qǐng)求的攔截器)Interceptorn(攔截器)Method(具體的方法)ActionActionInvocation(動(dòng)作調(diào)度器)ActionHandler(動(dòng)作處王里器)Handler(處王里器)HandlerModelInjector(模型構(gòu)造器)Model(模型定義)DB(數(shù)據(jù)庫(kù)操作工具)Render(渲染器)JSPF
4、reeMarkVelocity自定義View1.3代碼架構(gòu)1.3.1包結(jié)構(gòu)1.3.2包簡(jiǎn)介Aop:攔截器Config:通用配置Core:核心處理,主要是Controller的調(diào)度Ext:擴(kuò)展包Handler:全局處理器I18N:國(guó)際化util:一些工具類Log:日志類Plugin:插件處理Render:渲染處理,比如對(duì)于FreeMark的支持Server:服務(wù)器Token:令牌Upload:文件上傳處理Validate:驗(yàn)證處理,主要是數(shù)據(jù)持久化時(shí)的驗(yàn)證1.4運(yùn)作原理我們從一次新增頁(yè)面的add操作請(qǐng)求來看:1.%2.%3 .首先是客戶端點(diǎn)擊新增按鈕,提交一個(gè)新增請(qǐng)求,請(qǐng)求中會(huì)帶上服務(wù)端處理地址
5、url2.%2.%3 .所有請(qǐng)求都會(huì)被JFinalFilter攔截,然后調(diào)用Handler進(jìn)行詳細(xì)處理3.%2.%3 .Handler是一個(gè)鏈條形式的調(diào)用,包括0-n個(gè)自定義Handler,以及最后一個(gè)ActionHandler,依次執(zhí)行,當(dāng)然可以自定義跳出。4.%2.%3 .進(jìn)入ActionHandler后,首先會(huì)根據(jù)請(qǐng)求的target從緩存的ActionMapping中映射扶取到具體操作對(duì)應(yīng)的Action對(duì)象,這個(gè)對(duì)象里面封裝了方法名、方法上面的攔截器,方法所在的Controller,controller上面的攔截器等。然后根據(jù)Action以及Controller實(shí)例構(gòu)造出Actionin
6、vocation。5.%2.%3 .接下來通過Actioninvocation的invoke進(jìn)行具體處理,這是一個(gè)明顯的Command模式的實(shí)現(xiàn)。首先是攔截器的調(diào)用,攔截器調(diào)用中會(huì)重新回調(diào)Actioninvocation的invoke,當(dāng)攔截器調(diào)用完畢后,會(huì)調(diào)用當(dāng)前操作的method6.%2.%3.當(dāng)進(jìn)入具體controller的新增方法時(shí),調(diào)用基類getModel(Systemparam.class);這個(gè)方法會(huì)從request中解析出所需要的數(shù)據(jù),通過反射設(shè)置給具體的Model實(shí)體類,最終通過ActiveRecord來進(jìn)行數(shù)據(jù)存儲(chǔ).7.%2.%3 .最后是頁(yè)面渲染render核心代碼簡(jiǎn)介我
7、們還是從一次新增請(qǐng)求的流程來看涉及到的核心類有哪些本身就是一個(gè)Http的過濾器,主要有3個(gè)方法2.6.1init(初始化)在服務(wù)器啟動(dòng)時(shí)執(zhí)行一次,負(fù)責(zé)初始化框架的全局配置2.6.2destory(銷毀)在服務(wù)器停止時(shí)運(yùn)行一次,負(fù)責(zé)銷毀框架的全局配置2.6.3doFilter(攔截)攔截所有的客戶端請(qǐng)求,處理具體邏輯2.12JFinalConfig是一個(gè)API弓I導(dǎo)式配置接口,供使用者自定義實(shí)現(xiàn)。里面主要配置常品、配置路由、配置處理器、配置插件、配置攔截器。2.12.1 Config自定義配置執(zhí)行的調(diào)度器2.13JFinal初始化框架全局配置的調(diào)度器,由它來負(fù)責(zé)調(diào)用各個(gè)組件的初始化接口。包括pa
8、th、Handler、Action、Render、ActiveRecord、Const、i18n等。另外它還提供了啟動(dòng)內(nèi)置服務(wù)器Jetty的api2.14Action即一個(gè)具體的動(dòng)作, 比如新增、 修改、 刪除等, 你也可以稱之為方法。它包含以下內(nèi)容:controllerClass、controllerKey、actionKey、method、methodNameinterceptorsviewPath2.14.1 ActionMapping初始化請(qǐng)求url與Action的映射關(guān)系, 是Controller的解析器, 最終的產(chǎn)出物是生成一個(gè)個(gè)actionKey以及與之對(duì)應(yīng)的Action對(duì)象。2
9、.14.2 Actioninvocation動(dòng)作調(diào)度器,負(fù)責(zé)調(diào)用各個(gè)攔截器以及具體的方法2.14.3 ActionKey自定義的注解,用于自定義action的路由規(guī)則2.15Handler通用的全局處理器2.15.1 ActionHandler動(dòng)作處理器,負(fù)責(zé)分析請(qǐng)求,找到對(duì)應(yīng)的Action并執(zhí)行2.15.2 HandlerFactory全局Handelr的工廠,負(fù)責(zé)生成一個(gè)handler鏈2.16Render渲染器2.16.1 RenderFactory渲染器的工廠類,負(fù)責(zé)構(gòu)造出各種視圖的渲染器1FreeMarkerRenderFactoryFreeMarkerRender1JspRende
10、rFactoryJspRender1VelocityRenderFactoryVelocityRender1Iplugin插件1.3C3p0Plugin、DruidPlugin數(shù)據(jù)源插件1.3EhCachePlugin緩存插件1.3ActiveRecordPluginmodel初始化插件1.3.10 AutoTableBindPlugin自動(dòng)綁定model與數(shù)據(jù)庫(kù)表的插件1.3.10 TableInfoBuilder負(fù)責(zé)初始化model與數(shù)據(jù)庫(kù)表的映射關(guān)系1TableInfo存儲(chǔ)的即映射關(guān)系,包括tableName、primaryKey、columnTypeMap所有Model的基類,封裝了通
11、用的數(shù)據(jù)庫(kù)操作的方法.1Modelinjector從請(qǐng)求中構(gòu)造出model實(shí)例的工具類27,3.4Db、DbKit通用的數(shù)據(jù)庫(kù)操作工具類1.3SpringPlugin負(fù)責(zé)與spring框架進(jìn)行集成1.3QuartzPlugin、Cron4jPlugin任務(wù)調(diào)度插件1.3ConfigPlugin配置文件插件1Routes路由規(guī)則1.4MyRoutesUtil自動(dòng)綁定Controller的工具類1Controller所有Controller的基類,封裝了通用的方法1攔截器Interceptor1.6Before自定義攔截器的注解,配合攔截器實(shí)現(xiàn)類使用,實(shí)現(xiàn)熱插拔攔截的功能1.6Tx事
12、務(wù)處理的攔截器2.11Validator服務(wù)端的校驗(yàn)器,供用戶自定義實(shí)現(xiàn)2.12服務(wù)器接口IServerJettyServer內(nèi)置的jetty服務(wù)器實(shí)現(xiàn)2.13MultipartRequest對(duì)于文件上傳的處理3.詳細(xì)介紹這里暫時(shí)只介紹幾個(gè)核心的內(nèi)容bd9-96df-47b4-9163-248b3bd55684-Numbered_62967f5b-53ec-4a8d-ad7a-9e69c55365f1-Numbered_e5bf2bf9-b初始化初始化在服務(wù)器啟動(dòng)時(shí)進(jìn)行,入口即在JFinalFilter中,下面講最重要的2項(xiàng)初始化過程2-7a5d-445d-9e6a-f23b6f08e278-
13、Numbered_2093300108-f控制器的初始化控制器的初始化包括2個(gè)方面,1個(gè)是路由,1個(gè)是action。路由僅僅是初始化得到一個(gè)pathControllerClass的映射。Action的初始化則是將Controller中每個(gè)方法進(jìn)行封裝。Action的初始化依靠ActionMapping的buildActionMapping方法實(shí)現(xiàn),下面是實(shí)現(xiàn)過程,當(dāng)然我們首先得明白actioin初始化目標(biāo)是方法:.扶取不需要初始化的方法的名稱,主要是基類Controller里面封裝的一些通用方法.扶取全局?jǐn)r截器.遍歷前面初始化好的路由,也就是每個(gè)自己寫的業(yè)務(wù)Controller.解析每個(gè)Con
14、troller的攔截器.反射扶取到每個(gè)Controller里面的所有方法,進(jìn)行遍歷6.排除掉不需要的,剩下的方法首先解析出方法上面的攔截器.進(jìn)行Action的構(gòu)造newAction(controllerKey,actionKey,controllerClass,method,methodName,actionInters,routes.getViewPath(controllerKey);.最后用一個(gè)actionKey與Action進(jìn)行映射,然后全局緩存住,這個(gè)actionKey即為客戶端調(diào)用這個(gè)方法的唯一鑰匙從上面可以看出,jfinal中實(shí)際上是不保留對(duì)于Controller的初始化信息的,
15、它的單位只有1個(gè),就是Action(動(dòng)作or方法)。在我看來,這樣的組織有點(diǎn)不合理,個(gè)人覺得應(yīng)該是Controller保留,Action依附在Controller中,這樣才是最合理的,而且全局的和類的成員將不需要重復(fù)出現(xiàn)在每個(gè)Action中??蛻舳苏?qǐng)求過來之后,應(yīng)該首先執(zhí)行全局方法,再扶取到Controller,執(zhí)行類方法,最后抉取對(duì)應(yīng)Action,執(zhí)行具體動(dòng)作。Model初始化對(duì)于model的初始化,最終結(jié)果就是抉取Tableinfo對(duì)象這個(gè)對(duì)象里面包含表名、 主鍵名、 實(shí)體名以及1個(gè)columnTypeMap,這個(gè)map里面存放的是數(shù)據(jù)庫(kù)列名與該列數(shù)據(jù)類型Class的映射入口也是Jfina
16、lFilter的init方法這里的Tableinfo的list就是我們使用Jfinal的config需要初始配置的,自動(dòng)初始化實(shí)體的實(shí)現(xiàn)編寫了一個(gè)AutoTableBindPlugin插件類,通過查詢出所有繼承自Model的實(shí)體類,然后通過解析TableBind這個(gè)自定義注解,抉取表名以及主鍵名3.2Jdbc是如何與連接池插件集成的比如我們?cè)仁褂玫膒roxool,hibernate就支持與之整合。亦或者spring中默認(rèn)使用的c3p0。連接池,說白了就是用來管理數(shù)據(jù)庫(kù)連接的,比如最大允許多少連接數(shù),最長(zhǎng)連接時(shí)間等等,那么我們自己寫的jdbc,怎么來整合它扶得它所提供的功能呢?其實(shí)和簡(jiǎn)單,我們
17、只需要將數(shù)據(jù)庫(kù)連接交由連接池去托管即可:.自定義一個(gè)類,比如叫C3P0Plugin,它負(fù)責(zé)與連接池的整合銜接,其實(shí)就是根據(jù)數(shù)據(jù)庫(kù)的配置,生成一個(gè)javax.sql.DataSource即可,這個(gè)DataSource對(duì)象必須是連接池的,比如要整合C3P0,那么就必須DataSourcedataSource=newComboPooledDataSource();dataSource.setJdbcUrl(jdbcUrl);dataSource.setUser(user);dataSource.setPassword(password);.所有需要使用到數(shù)據(jù)庫(kù)Connection的地方,全部通過C3
18、p0Plugin中的DataSource扶取,抉取方法為dataSource.getConnection()。這樣就完成了將數(shù)據(jù)庫(kù)連接納入連接池的工作3.3聲明式事務(wù)是如何實(shí)現(xiàn)的框架的事務(wù)是通過注解來支持的,spring也是如此,即在需要事務(wù)的方法上面加上事務(wù)特有的注解,比如這就是所謂的聲明式事務(wù)。要講它是如何實(shí)現(xiàn)的,那么就必須先明白注解是怎么起作用的。.注解的意義注解的誕生就是為了解放xml的冗繁,從這一點(diǎn)可以看出,其實(shí)它最核心的功能就是為了配置。當(dāng)然它還有其他一些作用,比如功能聚簇。實(shí)體的映射xml文件其實(shí)就應(yīng)該與實(shí)體在一起的。.自定義注解自己定義一些需要使用到的注解,這個(gè)簡(jiǎn)單的應(yīng)用還是比
19、較簡(jiǎn)單的,這里不多說.注解解析注解的核心作用既然是配置,那么肯定是需要解析的,而且這種固定式的配置,顯然只需要解析一次即可。Jfinal中是在Filter的init方法中進(jìn)行注解的解析工作的。它會(huì)將方法以及方法上面的注解的映射關(guān)系都解析好緩存起來4.注解應(yīng)用當(dāng)調(diào)用到具體該方法時(shí),首先會(huì)從緩存中扶取該方法上面的注解, 然后根據(jù)具體的注解內(nèi)容進(jìn)行相關(guān)的處理, 比如這里的Tx.class,就是一個(gè)事務(wù)處理的攔截器,那么就會(huì)調(diào)用事務(wù)處理的操作。這里是一個(gè)遞歸調(diào)用方式:Actioninvocation調(diào)用invoke方法Invoke方法中調(diào)用各個(gè)攔截器的攔截方法interceptIntercept方法中
20、會(huì)通過傳入的Actioninvocation對(duì)象回調(diào)invoke方法繼續(xù)處理這樣如下的事務(wù)操作就可以囊括整個(gè)方法的執(zhí)行了,這就是個(gè)命令模式。3.4DB+ActiveRecordDB的話很簡(jiǎn)單明了,就是一個(gè)數(shù)據(jù)庫(kù)操作工具類,ActiveRecord說白了就是在我們的model中加入了數(shù)據(jù)庫(kù)操作的能力。比如add、remove、update。這些通用的處理,JFinal在中統(tǒng)一交由最上層的基類Model進(jìn)行,我們的實(shí)體類繼承自Model,就擁有了該能力。3.5表單數(shù)據(jù)自動(dòng)綁定是怎么實(shí)現(xiàn)的Jfinal中一個(gè)表單的新增,后臺(tái)只需要寫如下代碼即可完成,它是如何實(shí)現(xiàn)的1.表單頁(yè)面首先我們看下這個(gè)表單頁(yè)面,
21、注意3個(gè)輸入域的name屬性,都是blog.xxx,這里實(shí)際上就是設(shè)置了值與實(shí)體屬性之間的映射關(guān)系了2.服務(wù)端從request中扶取到所有的值,過濾出其中blog屬性,緩存到Model基類的attrs這個(gè)map中3.最后通過Record的add方法進(jìn)行新增。3.6關(guān)于路由3.6.1ioc這里的路由就相當(dāng)于我們?cè)萻eam框架的ioc了,不過它功能更簡(jiǎn)單一些,需要在初始的時(shí)候進(jìn)行配置,也就是頁(yè)面與Controller之間的映射關(guān)系。如何去除路由配置很簡(jiǎn)單,使用我們?cè)鹊淖⒔獾姆绞郊纯?。自定義一個(gè)Controller的注解,比如Name,然后解析初始化到全局配置中即可。自動(dòng)綁定controller
22、的實(shí)現(xiàn)原理與我們?cè)炔孪氲囊粯?,自定義了一個(gè)RouteBind注解,然后每個(gè)Controller進(jìn)行綁定2,編寫了一個(gè)工具類MyRoutesUtil該工具類將webinf/classes目錄下面所有的.class二進(jìn)制文件查找出來,然后通過反射和解析注解生成jfinal的Routes3.在服務(wù)器啟動(dòng)的時(shí)候進(jìn)行初始化即可3.7攔截器Jfinal中所有的攔截都通過Interceptor實(shí)現(xiàn),根據(jù)位置大致可以分成以下幾種全局?jǐn)r截器在config中進(jìn)行注冊(cè)類攔截器在類上面通過注解注冊(cè)方法攔截器在方法上面通過注解注冊(cè)插件機(jī)制插件的機(jī)制主要就是一個(gè)基于接口動(dòng)態(tài)擴(kuò)展實(shí)現(xiàn)的架構(gòu), 最頂層是一個(gè)IPlugin
23、。其實(shí)說白了,它就是一個(gè)全局性配置的擴(kuò)展實(shí)現(xiàn)。插件的注冊(cè)在自定義實(shí)現(xiàn)的JfinalConfig中進(jìn)行配置插件運(yùn)行所有插件的運(yùn)行都是在服務(wù)器啟動(dòng)的時(shí)候進(jìn)行一次,具體是在Config類中的如下方法:插件停止停止即在服務(wù)器關(guān)閉時(shí)JfinalFiler的destroy中進(jìn)行緩存EcachePlugin框架本身內(nèi)置了Ecache這個(gè)插件,可以直接使用,只需要在JfinalConfig中進(jìn)行注冊(cè)即可MemcachedClient另外還有1個(gè)分布式緩存的實(shí)現(xiàn),具體可以參照MemcacheTool4 如何使用攔截器參照上面的3.7控制器編寫一個(gè)普通java類,繼承Controller,類上面使用注解進(jìn)行路由綁定RouteBind(path=/power)publicclassPowerContrallerextendsBaseController調(diào)用controller的方法面進(jìn)來的時(shí)候默認(rèn)會(huì)走index方法,這個(gè)實(shí)現(xiàn)在ActionMapping用指定方法默認(rèn)調(diào)用controller中方法的方式為/controllername/methodname比如上面的路徑,power為controller的路由注解、list即為方法名字。但是也可以通過ActionKe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度防火門安裝與消防系統(tǒng)維護(hù)服務(wù)合同
- 2025年度影視短劇拍攝制作與獨(dú)家播出合同
- 2025年外賣美食分期付款合同
- 2025年保密合同法律協(xié)議
- 2025年中國(guó)防水袋行業(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)防毒面具行業(yè)市場(chǎng)調(diào)查研究及投資戰(zhàn)略研究報(bào)告
- 2021-2026年中國(guó)二母寧嗽丸行業(yè)市場(chǎng)供需格局及投資規(guī)劃建議報(bào)告
- 2024年知識(shí)圖譜市場(chǎng)前景預(yù)測(cè)及投資規(guī)劃研究報(bào)告
- 2022-2027年中國(guó)醫(yī)護(hù)服裝行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及投資規(guī)劃建議報(bào)告
- 2025年保障性住房管理服務(wù)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告
- 九年級(jí)上冊(cè)-備戰(zhàn)2024年中考?xì)v史總復(fù)習(xí)核心考點(diǎn)與重難點(diǎn)練習(xí)(統(tǒng)部編版)
- 健康指南如何正確護(hù)理蠶豆病學(xué)會(huì)這些技巧保持身體健康
- 老客戶的開發(fā)與技巧課件
- 2024建設(shè)工程人工材料設(shè)備機(jī)械數(shù)據(jù)分類和編碼規(guī)范
- 26個(gè)英文字母書寫(手寫體)Word版
- GB/T 13813-2023煤礦用金屬材料摩擦火花安全性試驗(yàn)方法和判定規(guī)則
- DB31 SW-Z 017-2021 上海市排水檢測(cè)井圖集
- 日語專八分類詞匯
- GB/T 707-1988熱軋槽鋼尺寸、外形、重量及允許偏差
- GB/T 33084-2016大型合金結(jié)構(gòu)鋼鍛件技術(shù)條件
- 高考英語課外積累:Hello,China《你好中國(guó)》1-20詞塊摘錄課件
評(píng)論
0/150
提交評(píng)論