1,SpringMVC
十余年的石家莊網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整石家莊建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“石家莊網(wǎng)站設(shè)計(jì)”,“石家莊網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
在中國(guó)有一種說(shuō)法“生姜仍舊又辛辣”,所以雖然SpringMVC已經(jīng)發(fā)布了十多年,但它仍然強(qiáng)大有力,并且處于領(lǐng)先地位,具有絕對(duì)優(yōu)勢(shì)。在擁抱完整的MVC框架之后,Spring已經(jīng)發(fā)展并且現(xiàn)在是面向Internet的應(yīng)用程序的綜合Java框架,為軟件工程師提供了一個(gè)功能強(qiáng)大的工具包,用于Web應(yīng)用程序開發(fā)和安全項(xiàng)目的應(yīng)用程序配置。作為最受歡迎的程序員之一,Spring的完善生態(tài)系統(tǒng)提供了許多其他選項(xiàng):RESTAPI或SOAPWeb服務(wù),安全性(身份驗(yàn)證和授權(quán),加密)等。此外,許多大公司選擇使用SpringMVC,因此如果您在使用過(guò)程中遇到問(wèn)題,將會(huì)有很多技術(shù)專家為您解答。
利弊
春天并非沒有理由爬到頂端。它之所以成為最著名的Java框架,主要是因?yàn)椋?/p>
1.使用POJO簡(jiǎn)化測(cè)試數(shù)據(jù)的注入。
2.增強(qiáng)模塊性,使代碼更具可讀性。
3.不同模塊之間的分離。
4.靈活的應(yīng)用依賴注入(DI)。
雖然SpringMVC有很多文檔可供參考,但它的學(xué)習(xí)曲線對(duì)新手Java開發(fā)人員來(lái)說(shuō)太苛刻了,而且開發(fā)人員可能會(huì)遇到這樣的情況:當(dāng)他們遇到較少的引用時(shí)無(wú)法啟動(dòng)。另外,雖然SpringMVC的在線信息較多,但版本會(huì)有所不同??偟膩?lái)說(shuō),SpringMVC是工程師最喜歡的框架之一。
2,Hibernate
雖然Hibemate不在RebelLabs的排行榜上,但它仍然是一個(gè)值得一提的Java框架。這種映射Java框架使用連續(xù)數(shù)據(jù)庫(kù)訪問(wèn)操作而不是高級(jí)對(duì)象處理來(lái)解決對(duì)象和關(guān)系不匹配的問(wèn)題。每個(gè)企業(yè)應(yīng)用程序都不同,因此Hibernate附帶了一個(gè)強(qiáng)大的功能集,可以幫助后端開發(fā)人員微調(diào)數(shù)據(jù)訪問(wèn)層。這是一個(gè)高級(jí)ORM框架,允許您對(duì)Java對(duì)象(實(shí)體)執(zhí)行數(shù)據(jù)庫(kù)操作。使用Hibernate Cache將數(shù)據(jù)從Java環(huán)境持久化到數(shù)據(jù)庫(kù)是一個(gè)持久的概念。
目前Java編程語(yǔ)言最流行的7個(gè)框架,你了解多少?
利弊
Hibernate可以通過(guò)對(duì)原始代碼進(jìn)行微小更改來(lái)幫助您與任何數(shù)據(jù)庫(kù)進(jìn)行通信,從而彌合對(duì)象和關(guān)系之間的差距。除了這個(gè)優(yōu)勢(shì),它還有:
1.無(wú)論是Oracle,Db2還是MySQL,Hibernate都獨(dú)立于DB。
2.緩存機(jī)制優(yōu)化了類似的查詢。
3.支持N + 1或延遲加載。
盡管Hibernate有許多優(yōu)點(diǎn),但它不允許多次插入,不支持對(duì)JDBC的某些查詢,并且不適用于具有較少表的小規(guī)模項(xiàng)目。
3,Struts2
為了更詳細(xì)地解釋現(xiàn)代軟件工程師廣泛使用的Java框架,Qianfeng Wuhan Java Training的老師介紹了Struts2,它是ApacheStruts1的后續(xù)版本。 Struts2用于構(gòu)建當(dāng)代JavaEE Web應(yīng)用程序。 Apache Software Foundation為開發(fā)人員提供了廣泛的工具,用于創(chuàng)建企業(yè)級(jí)面向Web的應(yīng)用程序,優(yōu)化開發(fā)過(guò)程,甚至是后期維護(hù),包括最終的優(yōu)化過(guò)程和后期維護(hù)。如果您擔(dān)心像廣播門戶這樣的高負(fù)載系統(tǒng),Struts將是您的最佳選擇。
由于Struts2實(shí)現(xiàn)了Action類(普通的POJO對(duì)象),因此測(cè)試編寫代碼所需的工作量更少。使用框架API,耦合變得更容易,并有助于調(diào)整攔截器。
利弊
Struts2的最大特點(diǎn)是您不必重寫或?qū)崿F(xiàn)Action類,IT工程師為多個(gè)操作創(chuàng)建重復(fù)代碼不再是一個(gè)問(wèn)題,因?yàn)閿r截器將處理它。
Struts的最大缺點(diǎn)是它不夠靈活。
目前Java編程語(yǔ)言最流行的7個(gè)框架,你了解多少?
瓦亞丁
Vaadin是現(xiàn)代開發(fā)人員在創(chuàng)建業(yè)務(wù)應(yīng)用程序和使用GWT呈現(xiàn)頁(yè)面時(shí)必須選擇的流行框架之一。 Vaadin使用一種眾所周知的基于組件的方法來(lái)快速適應(yīng)瀏覽器的變化,從而減輕開發(fā)人員的負(fù)擔(dān)。 Vaadin通過(guò)將更改傳達(dá)給瀏覽器來(lái)消除開發(fā)人員的負(fù)擔(dān)。豐富的UI組件,各種各樣的小部件和控件,程序員可以隨時(shí)隨地構(gòu)建一個(gè)很酷的應(yīng)用程序。
利弊
在Java或HTML布局構(gòu)造中,Vaadin提供了一種將數(shù)據(jù)綁定到MVC或MVP的方法。支持拖放和其他突出功能簡(jiǎn)化了Java應(yīng)用程序的單頁(yè)UI創(chuàng)建。
因?yàn)閂aadin需要將每個(gè)事件發(fā)送回服務(wù)器,或者移動(dòng)應(yīng)用程序的UI很慢。
5. JSF
作為JavaEE的一部分,Oracle支持JavaServerFaces。雖然這不是快速Java開發(fā)的最佳框架,但很容易開始使用Oracle的大量文檔。如果你不離開JavaEE環(huán)境,JSF沒有外部依賴,但它非常強(qiáng)大,它有一個(gè)豐富的庫(kù)和工具(包括一個(gè)易于創(chuàng)建用戶界面的工具集),無(wú)論你的應(yīng)用程序有多復(fù)雜,它可以支持。
利弊
如上所述,JSF是JavaEE不可或缺的一部分。因此,開發(fā)人員可以利用IDE軟件套件和業(yè)界領(lǐng)先供應(yīng)商的高級(jí)支持。
但事情有兩面,JavaServerFaces太大,所以沒有web開發(fā)經(jīng)驗(yàn)或不熟練的人可能很難掌握。
6,Grails
這種特殊的Web框架被認(rèn)為是一種動(dòng)態(tài)工具,可以提高工程師的工作效率。它具有唯一的API實(shí)際,合理的默認(rèn)值和約定的配置示例。與Java的無(wú)縫集成使其成為全球許多程序員的最佳選擇。 Grails具有許多強(qiáng)大的功能,例如基于Spring的依賴注入和各種插件,同時(shí)提供創(chuàng)建現(xiàn)代Web應(yīng)用程序所需的一切。
目前Java編程語(yǔ)言最流行的7個(gè)框架,你了解多少?
利弊
Grails可以快速構(gòu)建新項(xiàng)目,腳手架為編碼人員節(jié)省了寶貴的時(shí)間。 Grails擁有一個(gè)包含900多種易于安裝的插件的龐大庫(kù)。 Grails是一個(gè)用于全棧開發(fā)的Java框架,它的對(duì)象關(guān)系映射涵蓋了大量的功能,使其成為一個(gè)重量級(jí)的軟件。
7,GoogleWebToolkit
GWT是一個(gè)免費(fèi)的Java框架,允許用戶創(chuàng)建和優(yōu)化復(fù)雜的基于Web的應(yīng)用程序。 GWT的軟件開發(fā)工具包提供了核心Java API和小部件,可以在構(gòu)建之后編譯到JavaScript應(yīng)用程序中。
利弊
使用GoogleWebToolkit,您可以獲得單個(gè)代碼庫(kù)(Java中的瀏覽器和服務(wù)器端編程),從而簡(jiǎn)化了開發(fā)和調(diào)試過(guò)程。與其他技術(shù)的簡(jiǎn)單集成允許程序員在網(wǎng)頁(yè)中嵌入GWT小部件。 Widget功能也可以在GWT的幫助下自定義。
但是,GWT不適用于純HTML和后動(dòng)態(tài)內(nèi)容布局,因此無(wú)法滿足網(wǎng)頁(yè)設(shè)計(jì)師的需求。
它是程序的一種低級(jí)表示,可以運(yùn)行于Java虛擬機(jī)上。將程序抽象成字節(jié)碼可以保證Java程序在各種設(shè)備上的運(yùn)行
Java號(hào)稱是一門“一次編譯到處運(yùn)行”的語(yǔ)言,從我們寫的java文件到通過(guò)編譯器編譯成java字節(jié)碼文件(.class文件),這個(gè)過(guò)程是java編譯過(guò)程;而我們的java虛擬機(jī)執(zhí)行的就是字節(jié)碼文件。不論該字節(jié)碼文件來(lái)自何方,由哪種編譯器編譯,甚至是手寫字節(jié)碼文件,只要符合java虛擬機(jī)的規(guī)范,那么它就能夠執(zhí)行該字節(jié)碼文件。
JAVA程序的運(yùn)行
因?yàn)镴ava具有跨平臺(tái)特性,為了實(shí)現(xiàn)這個(gè)特性Java執(zhí)行在一臺(tái)虛擬機(jī)上,這臺(tái)虛擬機(jī)也就是JVM,Java通過(guò)JVM屏蔽了不同平臺(tái)之間的差異,從而做到一次編譯到處執(zhí)行。JVM位于Java編譯器和OS平臺(tái)之間,Java編譯器只需面向JVM,生成JVM能理解的代碼,這個(gè)代碼即字節(jié)碼,JVM再將字節(jié)碼翻譯成真實(shí)機(jī)器所能理解的二進(jìn)制機(jī)器碼。
字節(jié)碼是怎么產(chǎn)生的?
我們所編寫的程序都是.java格式,通常在執(zhí)行的時(shí)候也許點(diǎn)擊一下eclipse的運(yùn)行鍵就可以在控制臺(tái)看到運(yùn)行結(jié)果,但是也可以更酷一些,如果你裝了JDK,那就可以直接在以命令行的方式編譯運(yùn)行你的.java文件,編譯后會(huì)形成.class文件,這個(gè).class文件即字節(jié)碼。
字節(jié)碼怎么解讀?
上圖是編譯好的字節(jié)碼文件,即一堆16進(jìn)制的字節(jié),如果使用IDE去打開,也許看到的是已經(jīng)被反編譯的我們所熟悉的java代碼,但這才是純正的字節(jié)碼
這里只介紹字節(jié)碼由哪些部分組成, 具體的意思自行百度或者看文尾的連接, 有較為詳細(xì)的講解
上圖即字節(jié)碼文件的組成部分, Class文件的結(jié)構(gòu)不像XML等描述語(yǔ)言那樣松散自由。由于它沒有任何分隔符號(hào),
所以,以上數(shù)據(jù)項(xiàng)無(wú)論是順序還是數(shù)量都是被嚴(yán)格限定的。哪個(gè)字節(jié)代表什么含義,長(zhǎng)度是多少,先后順序如何,都不允許改變, 如上圖左側(cè)即每一部分規(guī)定的長(zhǎng)度
魔數(shù)(Magic Number)
魔數(shù)是用來(lái)區(qū)分文件類型的一種標(biāo)志,一般都是用文件的前幾個(gè)字節(jié)來(lái)表示。
比如0XCAFE BABE表示的是class文件,那么有人會(huì)問(wèn),文件類型可以通過(guò)文件名后綴來(lái)判斷???是的,但是文件名是可以修改的(包括后綴),那么為了保證文件的安全性,將文件類型寫在文件內(nèi)部來(lái)保證不被篡改。
至于為什么是CAFE BABE估計(jì)大家也能猜到, 程序員與咖啡的不解之緣
版本號(hào)(Version)
版本號(hào)含主版本號(hào)和次版本號(hào),都是各占2個(gè)字節(jié)。在此Demo種為0X0000 0033。其中前面的0000是次版本號(hào),后面的0033是主版本號(hào)。通過(guò)進(jìn)制轉(zhuǎn)換得到的是次版本號(hào)為0,主版本號(hào)為51。高版本的JDK能向下兼容以前版本的Class文件,但不能運(yùn)行以后版本的Class文件,即使文件格式未發(fā)生任何變化. 這就是target參數(shù)的用處,可以在使用JDK 1.7編譯時(shí)指定-target 1.5
常量池(Constant Pool)
常量池是Class文件中的資源倉(cāng)庫(kù), 量池中主要存儲(chǔ)2大類常量:字面量和符號(hào)引用。字面量如文本字符串,java中聲明為final的常量值等等,而符號(hào)引用如類和接口的全局限定名,字段的名稱和描述符,方法的名稱和描述符。常量池是一個(gè)表結(jié)構(gòu),在表的內(nèi)容前有一個(gè)類型的計(jì)數(shù)器,表示常量池的長(zhǎng)度
上面的表中描述了11中數(shù)據(jù)類型的結(jié)構(gòu),其實(shí)在jdk1.7之后又增加了3種(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。這樣算起來(lái)一共是14種
訪問(wèn)標(biāo)志(Access_Flag)
訪問(wèn)標(biāo)志信息包括該Class文件是類還是接口,是否被定義成public,是否是abstract,如果是類,是否被聲明成final。通過(guò)上面的源代碼,我們知道該文件是類并且是public。
0x 00 21:是0×0020和0×0001的并集。其中0×0020這個(gè)標(biāo)志值涉及到字節(jié)碼指令
類索引(This Class Name)
類索引用于確定類的全限定名
0×00 03 表示引用第3個(gè)常量,同時(shí)第3個(gè)常量引用第19個(gè)常量,查找得”com/demo/Demo”。#3.#19
父類索引(Super Class Name)
0×00 04 同理:#4.#20(java/lang/Object)
接口索引(Interfaces)
通過(guò)上邊字節(jié)碼圖可以看到,這個(gè)接口有2+n個(gè)字節(jié),前兩個(gè)字節(jié)表示的是接口數(shù)量,后面跟著就是接口的表。我們這個(gè)類沒有任何接口,所以應(yīng)該是0000。果不其然,查找字節(jié)碼文件得到的就是0000。
字段表集合(fields)
字段表用于描述類和接口中聲明的變量。這里的字段包含了類級(jí)別變量以及實(shí)例變量,但是不包括方法內(nèi)部聲明的局部變量。接下來(lái)就是2+n個(gè)字段屬性。我們只有一個(gè)屬性a,所以應(yīng)該是0001。查找文件果不其然是0001。
該區(qū)域含有字段的訪問(wèn)標(biāo)志, 訪問(wèn)權(quán)限, 字段的名稱索引, 字段的描述符索引, 屬性表
描述符的作用就是用來(lái)描述字段的數(shù)據(jù)類型、方法的參數(shù)列表和返回值。而屬性表就是為字段表和方法表提供額外信息的表結(jié)構(gòu)。對(duì)于字段來(lái)說(shuō),此處如果將字段聲明為一個(gè)static final msg = "aaa"的常量,則字段后就會(huì)跟著一個(gè)屬性表,其中存在一項(xiàng)名為ConstantValue,指向常量池中的一個(gè)常量,值為的"aaa"。
方法(methods)
包含訪問(wèn)標(biāo)志表, 方法名索引 , 方法描述符索引, 屬性表數(shù)量,等
Attribute
0×0001 :同樣的,表示有1個(gè)Attributes了。
0x000f : #15(“SourceFile”)
0×0000 0002 attribute_length=2
0×0010 : sourcefile_index = #16(“Demo.java”)
SourceFile屬性用來(lái)記錄生成該Class文件的源碼文件名稱。
你如果用elipse編譯,先輸入syso,然后alt+/(快捷鍵),就會(huì)自動(dòng)補(bǔ)全語(yǔ)句,然后在雙引號(hào)中打上“很酷”就行