java web入門——概念理解、名詞解釋

引言:當(dāng)你想入門java web后,一定會查閱到很多相關(guān)的名詞:Servlet,HTML,Spring...等等之類的,但是對于他們之間的關(guān)系總是比較混亂的,這篇文章就是理清這些名詞的關(guān)系。

什么是web應(yīng)用?

web應(yīng)用是一種可以通過Web訪問的應(yīng)用程序。在J2EE領(lǐng)域下,web應(yīng)用就是遵守基于JAVA技術(shù)的一系列標(biāo)準(zhǔn)的應(yīng)用程序。

最簡單的web應(yīng)用什么樣?

2個(gè)文件夾、1個(gè)xml文件就能成為一個(gè)web應(yīng)用
第一個(gè)文件夾:應(yīng)用名,如test
第二個(gè)文件夾:在test文件夾中創(chuàng)建名為WEB-INF的文件夾
XML文件:在WEB-INF文件夾下創(chuàng)建web.xml文件,文件內(nèi)容只需<web-app></web-app>

Servlet規(guī)范

Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容。

狹義的Servlet是指Java語言實(shí)現(xiàn)的一個(gè)接口,廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類,一般情況下,人們將Servlet理解為后者。Servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中。從原理上講,Servlet可以響應(yīng)任何類型的請求,但絕大多數(shù)情況下Servlet只用來擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器。

Servlet是J2EE 規(guī)范中的一種,主要是為java程序提供一個(gè)統(tǒng)一的web應(yīng)用的規(guī)范,方便程序員統(tǒng)一的使用這種規(guī)范來編寫程序,應(yīng)用容器可以使用提供的規(guī)范來實(shí)現(xiàn)自己的特性。

因此,基本上所有的java web應(yīng)用都是基于Servlet規(guī)范,哪些常用框架如Struts,Spring MVC只是對Servlet規(guī)范的封裝而已。

web.xml

web.xml學(xué)名叫部署描述符文件,是在Servlet規(guī)范中定義的,是web應(yīng)用的配置文件。由web容器(如Tomcat)讀取加載。

web.xml配置詳解

web.xml配置詳解

web.xml加載過程:

  • 啟動WEB項(xiàng)目的時(shí)候,容器(如:Tomcat)會去讀它的配置文件web.xml.先讀取<context-param></context-param> 節(jié)點(diǎn)。

  • 緊接著,容器創(chuàng)建一個(gè)ServletContext(上下文),這個(gè)WEB項(xiàng)目所有部分都將共享這個(gè)上下文.

  • 容器將<context-param></context-param>轉(zhuǎn)化為鍵值對,并交給ServletContext.

  • 容器創(chuàng)建<listener></listener>中的類實(shí)例,即創(chuàng)建監(jiān)聽。在監(jiān)聽中會有contextInitialized(ServletContextEvent args) 的初始化方法,在這個(gè)方法中可以獲得context-param 節(jié)點(diǎn)的參數(shù):

    ServletContext = ServletContextEvent.getServletContext();   
    context-param的值 = ServletContext.getInitParameter("context-param的鍵");  
    

得到這個(gè)context-param的值之后,你就可以做一些操作了.注意,這個(gè)時(shí)候你的WEB項(xiàng)目還沒有完全啟動完成.這個(gè)動作會比所有的Servlet都要早.換句話說,這個(gè)時(shí)候,你對<context-param>中的鍵值做的操作,將在你的WEB項(xiàng)目完全啟動之前被執(zhí)行。舉例.你可能想在項(xiàng)目啟動之前就打開數(shù)據(jù)庫.那么這里就可以在<context-param>中設(shè)置數(shù)據(jù)庫的連接方式,在監(jiān)聽類中初始化數(shù)據(jù)庫的連接.

web.xml節(jié)點(diǎn)加載順序:

可以肯定的是,節(jié)點(diǎn)的加載順序與它們在 web.xml 文件中的先后順序無關(guān)。即不會因?yàn)?filter 寫在 listener 的前面而會先加載 filter。
加載順序是:[context-param -> listener -> filter -> servlet] ,而同類型節(jié)點(diǎn)之間的實(shí)際程序調(diào)用的時(shí)候的順序是根據(jù)對應(yīng)的 mapping 的順序進(jìn)行調(diào)用的。

Servlet

這里的Servlet是指Java語言實(shí)現(xiàn)的一個(gè)接口,也就是Servlet規(guī)范的實(shí)現(xiàn)。

通過下面一個(gè)例子體會一下Servlet(實(shí)現(xiàn)接口的對象)的作用:

一個(gè)網(wǎng)絡(luò)請求的過程

有這樣一個(gè)場景:當(dāng)用戶向?yàn)g覽器地址欄輸入一個(gè)網(wǎng)址
1、 瀏覽器使用ip:port(端口號)連接服務(wù)器;
2、 瀏覽器將請求數(shù)據(jù)按照http協(xié)議打成一個(gè)數(shù)據(jù)包(請求數(shù)據(jù)包)發(fā)送給服務(wù)器, 請求數(shù)據(jù)包的內(nèi)容包含了請求資源路徑(如:/helloweb/sayHello?name=zs),另外,在請求數(shù)據(jù)包當(dāng)中,還會包含瀏覽器自動生成的一些信息;
3、 服務(wù)器(web容器,如Tomcat)創(chuàng)建兩個(gè)對象:請求對象(Request)和響應(yīng)對象(Response)服務(wù)器解析請求數(shù)據(jù)包,將解析之后的數(shù)據(jù)存放到請求對象里面,方便servlet讀取請求數(shù)據(jù)(因?yàn)閟ervlet不用解析請求數(shù)據(jù)包,如果要解析,需要理解http協(xié)議)。請求對象是HttpServletRequest接口的一個(gè)實(shí)現(xiàn)。響應(yīng)對象是HttpServletResponse接口的一個(gè)實(shí)現(xiàn),響應(yīng)對象由于存放servlet處理的結(jié)果;
4、 依據(jù)請求資源路徑找到相應(yīng)的servlet配置,通過反射創(chuàng)建servlet實(shí)例。然后調(diào)用其service()方法;在調(diào)用service()方法時(shí),會將事先創(chuàng)建好的請求對象(request)和響應(yīng)對象(response)作為參數(shù)進(jìn)行傳遞。在servlet內(nèi)部,可以通過request獲得請求數(shù)據(jù),或者通過response設(shè)置響應(yīng)數(shù)據(jù),在這里完成你所需要的操作并放回結(jié)果;
5、服務(wù)器從response中獲取數(shù)據(jù),按照http協(xié)議打成一個(gè)數(shù)據(jù)包(響應(yīng)數(shù)據(jù)包)。發(fā)送 給瀏覽器;
6、瀏覽器會解析響應(yīng)數(shù)據(jù)包,取出相應(yīng)的數(shù)據(jù),生成相應(yīng)的界面。

filter

也即Servlet過濾器,它具有客戶端(瀏覽器)請求的功能,Servlet過濾器可以改變請求中的內(nèi)容來滿足實(shí)際開發(fā)中的需求。

它是Servlet技術(shù)中最實(shí)用的技術(shù),WEB開發(fā)人員通過Filter技術(shù),對web服務(wù)器管理的所有web資源:例如JSP,Servlet,靜態(tài)圖片文件或靜態(tài)HTML文件進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊功能。例如實(shí)現(xiàn)URL級別的權(quán)限控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級功能。

著名框架Struts就是基于filter實(shí)現(xiàn)的。

listener

監(jiān)聽器的作用是監(jiān)聽Web容器的有效事件,他是由容器管理的,可以監(jiān)聽Application、Session、Request對象,當(dāng)這些對象發(fā)生變化就會調(diào)用對應(yīng)的監(jiān)聽方法。

Struts2

Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互。Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來處理用戶的請求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。

Spring

Spring 框架的核心特性可以用于開發(fā)任何 Java 應(yīng)用程序,但是在 Java EE 平臺上構(gòu)建 web 應(yīng)用程序是需要擴(kuò)展的。 Spring 框架的目標(biāo)是使 J2EE 開發(fā)變得更容易使用,通過啟用基于 POJO 編程模型來促進(jìn)良好的編程實(shí)踐。

控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了低耦合。當(dāng)應(yīng)用了IoC,一個(gè)對象依賴的其它對象會通過被動的方式傳遞進(jìn)來,而不是這個(gè)對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時(shí)不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點(diǎn),例如日志或事務(wù)支持。

Spring MVC

Spring MVC 是一個(gè)模型 - 視圖 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它負(fù)責(zé)發(fā)送每個(gè)請求到合適的處理程序,使用視圖來最終返回響應(yīng)結(jié)果的概念。Spring MVC 是 Spring 產(chǎn)品組合的一部分,它享有 Spring IoC容器緊密結(jié)合Spring松耦合等特點(diǎn),因此它有Spring的所有優(yōu)點(diǎn)。


Servlet是一個(gè)java web應(yīng)用的核心,而我們訪問網(wǎng)頁看到的界面可不是完全由java代碼生成的,這個(gè)頁面是由HTML+CSS構(gòu)成,但這只能是靜態(tài)頁面,動態(tài)的頁面由JavaScript,JSP等技術(shù)提供支持。

HTML

超文本標(biāo)記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創(chuàng)建網(wǎng)頁的標(biāo)準(zhǔn)標(biāo)記語言?!俺谋尽本褪侵疙撁鎯?nèi)可以包含圖片、鏈接,甚至音樂、程序等非文字元素。超文本標(biāo)記語言的結(jié)構(gòu)包括“頭”部分(英語:Head)、和“主體”部分(英語:Body),其中“頭”部提供關(guān)于網(wǎng)頁的信息,“主體”部分提供網(wǎng)頁的具體內(nèi)容。

簡單點(diǎn)說就是頁面的結(jié)構(gòu)是怎樣的,這里顯示一張圖片,那邊是一個(gè)按鈕。

CSS

層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現(xiàn)HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個(gè)應(yīng)用)或XML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個(gè)子集)等文件樣式的計(jì)算機(jī)語言。CSS不僅可以靜態(tài)地修飾網(wǎng)頁,還可以配合各種腳本語言動態(tài)地對網(wǎng)頁各元素進(jìn)行格式化。

其實(shí)也就是控件的樣式了,比如按鈕是什么顏色,什么大小之類的。

JavaScript

JavaScript(也可以簡寫為js)一種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動態(tài)功能,可以把靜態(tài)頁面轉(zhuǎn)變成支持用戶交互并響應(yīng)應(yīng)用實(shí)踐的動態(tài)頁面。經(jīng)常應(yīng)用JavaScript進(jìn)行數(shù)據(jù)驗(yàn)證、控制瀏覽器以及生成時(shí)鐘、日歷和時(shí)間戳文檔等。

js主管動作,減輕后臺的操作,可以很簡單的就實(shí)現(xiàn)對輸入的數(shù)據(jù)的驗(yàn)證。比如說注冊的時(shí)候,用js中的ajax到后臺實(shí)時(shí)驗(yàn)證本用戶名是否已經(jīng)被注冊,驗(yàn)證碼是否正確或者用來實(shí)現(xiàn)異步更新,為用戶帶來更好的體驗(yàn)。用jquery來驗(yàn)證密碼的合法性,輸入密碼與確認(rèn)密碼是否一樣,從而反饋到html頁面上,可以通過操控css或者h(yuǎn)tml頁面內(nèi)容來確認(rèn)輸入內(nèi)容是否有錯(cuò)。但是ajax和jquery都是js的一個(gè)庫。

JSP

SUN首先發(fā)展出Servlet,其功能比較強(qiáng)勁,體系設(shè)計(jì)也很先進(jìn),只是,它輸出HTML語句還是采用了老的CGI方式,是一句一句輸出,所以,編寫和修改HTML非常不方便,并且不能把網(wǎng)站的邏輯和頁面的輸出分開。為了解決Java Servlet的這種缺點(diǎn), 推出了類似于ASP的鑲嵌型的JSP,把JSP TAG鑲嵌到HTML語句中,這樣,就大大簡化和方便了網(wǎng)頁的設(shè)計(jì)和修改,這就是Java Server Pages—JSP。

JSP全名為Java Server Pages,中文名叫java服務(wù)器頁面,其根本是一個(gè)簡化的Servlet設(shè)計(jì),它[1] 是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)有點(diǎn)類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag),從而形成JSP文件,后綴名為(*.jsp)。

JSP文件會被編譯器編譯成Servlet的class類,所以我的理解是:為了方便編寫頁面設(shè)計(jì)的另一形式的java代碼編寫方式。


最后就是是數(shù)據(jù)相關(guān)的技術(shù),在網(wǎng)站上注冊的用戶,肯定是記錄下來的,不然下次就不能登錄了,數(shù)據(jù)存儲使用了數(shù)據(jù)庫。java層要訪問數(shù)據(jù)庫就需要用到JDBC。

JDBC

JDBC(Java DataBase Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,同時(shí),JDBC也是個(gè)商標(biāo)名。

Hibernate

Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,是一個(gè)全自動的orm框架,hibernate可以自動生成SQL語句,自動執(zhí)行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。

MyBatis

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。

MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。
iBATIS一詞來源于“internet”和“abatis”的組合。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,706評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評論 0 11
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • 什么是知識圖譜,我們可以把它理解成一張由知識點(diǎn)相互連接而成的語義網(wǎng)絡(luò)。 任何一種網(wǎng)絡(luò)都是由節(jié)點(diǎn)和節(jié)點(diǎn)關(guān)系構(gòu)成。為了...
    高天蒲閱讀 36,273評論 2 25

友情鏈接更多精彩內(nèi)容