Java Web開發(fā)基礎(chǔ)
Java是一門面向?qū)ο缶幊陶Z言,入門簡單,廣泛應(yīng)用于企業(yè)級程序開發(fā)。本博客專注于Java web后端開發(fā),此為開篇。
平臺規(guī)范
1. Java平臺簡介
* Java 是一門強(qiáng)類型語言
* JavaSE 包含java.lang和java.io中的類,它是構(gòu)建Java應(yīng)用的基礎(chǔ)
* JVM 又稱Java虛擬機(jī),是Java源碼編譯后的運(yùn)行環(huán)境,JVM還負(fù)責(zé)管理內(nèi)存,從而簡化了Java應(yīng)用程序的開發(fā)
* JDK Java開發(fā)工具包 包含了編譯器、文檔生成器、調(diào)試相關(guān)的類等
* JRE Java運(yùn)行時(shí)環(huán)境,包含了JVM但是不包括JDK中的開發(fā)工具,不過JDK中包含了一個(gè)JRE
2. J2EE規(guī)范(現(xiàn)稱JavaEE規(guī)范)
Sun公司于1999/12/12發(fā)布了J2EE,版本號為1.2。最初版本規(guī)范包括:
* Servlets 2.2
* JDBC Extension API 2.0
* Java Naming and Directory Interface(JNDI) 1.0
* JavaServer Pages(JSP) 1.2
* Enterprise JavaBeans(EJB) 1.1
* Java Message Service(JMS) 1.0
* Java Transaction API(JTA) 1.0
* JavaMail API 1.1
* JavaBeans Activation Framework(JAF) 1.0
3. 最新平臺特性
1. JavaSE7
* 增加了對動態(tài)語言的和64位壓縮指針的支持,改善了64位JVM的性能
* 泛型實(shí)例化的簡寫
Map <String, Object> map = new HashMap<String, Object>(); //JavaSE7之前的寫法
Map <String, Object> map = new HashMap<>(); //JavaEE7新增特性
* 新增try-with-resource語法
2.JavaSE8
* lambda表達(dá)式
* 新的時(shí)間API
3.JavaEE7
* Java API for WebSockets1.0
* Java API for JSON Processing1.0
* 其他略
Web應(yīng)用程序結(jié)構(gòu)
1. Servlet 過濾器 監(jiān)聽器 JSP
基礎(chǔ)知識 (略)
2. 目錄結(jié)構(gòu)
WebApp Root
-- META-INF
MANIFEST.MF
Container Resources
-- WEB-INF
-- classes
-- META-INF
Application Resources
Java.class Files and Resources
-- i18n
Internationalization Files
-- lib
Bundled JAR Files
-- tags
JSP Tag Files
-- tld
JSP Tag Library Descriptors
Other Web-Accessible Files
3. 部署描述符和類加載器架構(gòu)
- 部署描述符
用于描述Web應(yīng)用程序的元數(shù)據(jù),為JavaEE WebApp 在服務(wù)器的部署和運(yùn)行提供指令。傳統(tǒng)上,所有元數(shù)據(jù)都來自于部署描述符文件/WEB-INF/web.xml,通常該文件包含Servlet、監(jiān)聽器和過濾器的定義,以及HTTP會話、JSP和應(yīng)用程序的配置選項(xiàng)。Java EE 6中的Servlet 3.0添加了使用注解和Java Configuration API配置Web應(yīng)用的能力,默認(rèn)情況下Servlet3.0及更高版本的環(huán)境將掃描Web應(yīng)用程序和Web片段中的Java EE應(yīng)用程序注解,用于配置WebApp。
- 類加載器架構(gòu)(雙親優(yōu)先類加載委托模式 VS 子女優(yōu)先類加載委托模式)
典型的應(yīng)用程序中,JavaSE平臺中的java.* 類將由特定的根類加載器加載,并且不能被覆蓋,這種方式很安全,避免了惡意代碼的執(zhí)行。之后是擴(kuò)展類加載器,加載JRE安裝目錄中的擴(kuò)展JAR。最后應(yīng)用程序ClassLoader將加載應(yīng)用程序中的所有其他類。上述方式稱為雙親優(yōu)先類加載委托模式,該模式并不完全適用于JavaEE Web環(huán)境中的應(yīng)用。
運(yùn)行Web程序的服務(wù)器通常相當(dāng)復(fù)雜,許多供應(yīng)商都有自己的實(shí)現(xiàn)。服務(wù)器可能與個(gè)人應(yīng)用程序使用了相同的第三方庫,但他們的版本可能相互沖突。另外,不同應(yīng)用程序之間也可能使用同一個(gè)第三方庫的沖突版本。為了解決這些問題,就需要使用子女優(yōu)先類加載委托模式。
選擇Web容器
1. Apache Tomcat
Apache Tomcat是目前最常見和最流行的Web容器,常用于本地的開發(fā)調(diào)試,它也是Java EE Servlet規(guī)范最初的參考實(shí)現(xiàn)。但是作為一個(gè)輕量級的web容器,缺少了完整JavaEE標(biāo)準(zhǔn)組件的實(shí)現(xiàn)。例如,Java Persistence API、Bean Validation和Java Message Service等。
下表列出了常見Tomcat版本和它實(shí)現(xiàn)的規(guī)范
| Tomcat版本 | JavaEE版本 | Servlet | JSP | EL | WebSocket | 所需最小JavaSE版本 |
|---|---|---|---|---|---|---|
| 5.5.x | 1.4 | 2.4 | 2.0 | - | - | 1.4 |
| 6.0.x | 5 | 2.5 | 2.1 | 2.1 | - | 5.0 |
| 7.0.x | 6 | 3.0 | 2.2 | 2.2 | - | 6 |
| 8.0.x | 7 | 3.1 | 2.3 | 2.3 | 1.0 | 7 |
2. GlassFish
GlassFish服務(wù)器是開源的,且完整實(shí)現(xiàn)了Java EE標(biāo)準(zhǔn)的應(yīng)用服務(wù)器。并且目前是Java EE規(guī)范的參考實(shí)現(xiàn)。
3.JBoss
另一款非常流行的JavaEE服務(wù)器,完整實(shí)現(xiàn)了Java EE標(biāo)準(zhǔn),由RedHat研發(fā)。