java web入门——概念理解、名词解释
引言:當你想入門java web后,一定會查閱到很多相關的名詞:Servlet,HTML,Spring...等等之類的,但是對于他們之間的關系總是比較混亂的,這篇文章就是理清這些名詞的關系。
什么是web應用?
web應用是一種可以通過Web訪問的應用程序。在J2EE領域下,web應用就是遵守基于JAVA技術的一系列標準的應用程序。
最簡單的web應用什么樣?
2個文件夾、1個xml文件就能成為一個web應用 第一個文件夾:應用名,如test 第二個文件夾:在test文件夾中創建名為WEB-INF的文件夾 XML文件:在WEB-INF文件夾下創建web.xml文件,文件內容只需<web-app></web-app>
Servlet規范
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。
狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。
Servlet是J2EE 規范中的一種,主要是為java程序提供一個統一的web應用的規范,方便程序員統一的使用這種規范來編寫程序,應用容器可以使用提供的規范來實現自己的特性。
因此,基本上所有的java web應用都是基于Servlet規范,哪些常用框架如Struts,Spring MVC只是對Servlet規范的封裝而已。
web.xml
web.xml學名叫部署描述符文件,是在Servlet規范中定義的,是web應用的配置文件。由web容器(如Tomcat)讀取加載。
web.xml配置詳解
web.xml配置詳解
web.xml加載過程:
-
啟動WEB項目的時候,容器(如:Tomcat)會去讀它的配置文件web.xml.先讀取<context-param></context-param> 節點。
-
緊接著,容器創建一個ServletContext(上下文),這個WEB項目所有部分都將共享這個上下文.
-
容器將<context-param></context-param>轉化為鍵值對,并交給ServletContext.
-
容器創建<listener></listener>中的類實例,即創建監聽。在監聽中會有contextInitialized(ServletContextEvent args) 的初始化方法,在這個方法中可以獲得context-param 節點的參數:
ServletContext = ServletContextEvent.getServletContext(); context-param的值 = ServletContext.getInitParameter("context-param的鍵"); 復制代碼
得到這個context-param的值之后,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.這個動作會比所有的Servlet都要早.換句話說,這個時候,你對<context-param>中的鍵值做的操作,將在你的WEB項目完全啟動之前被執行。舉例.你可能想在項目啟動之前就打開數據庫.那么這里就可以在<context-param>中設置數據庫的連接方式,在監聽類中初始化數據庫的連接.
web.xml節點加載順序:
可以肯定的是,節點的加載順序與它們在 web.xml 文件中的先后順序無關。即不會因為 filter 寫在 listener 的前面而會先加載 filter。 加載順序是:[context-param -> listener -> filter -> servlet] ,而同類型節點之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。
Servlet
這里的Servlet是指Java語言實現的一個接口,也就是Servlet規范的實現。
通過下面一個例子體會一下Servlet(實現接口的對象)的作用:
一個網絡請求的過程
有這樣一個場景:當用戶向瀏覽器地址欄輸入一個網址 1、 瀏覽器使用ip:port(端口號)連接服務器;
2、 瀏覽器將請求數據按照http協議打成一個數據包(請求數據包)發送給服務器, 請求數據包的內容包含了請求資源路徑(如:/helloweb/sayHello?name=zs),另外,在請求數據包當中,還會包含瀏覽器自動生成的一些信息;
3、 服務器(web容器,如Tomcat)創建兩個對象:請求對象(Request)和響應對象(Response)服務器解析請求數據包,將解析之后的數據存放到請求對象里面,方便servlet讀取請求數據(因為servlet不用解析請求數據包,如果要解析,需要理解http協議)。請求對象是HttpServletRequest接口的一個實現。響應對象是HttpServletResponse接口的一個實現,響應對象由于存放servlet處理的結果;
4、 依據請求資源路徑找到相應的servlet配置,通過反射創建servlet實例。然后調用其service()方法;在調用service()方法時,會將事先創建好的請求對象(request)和響應對象(response)作為參數進行傳遞。在servlet內部,可以通過request獲得請求數據,或者通過response設置響應數據,在這里完成你所需要的操作并放回結果;
5、服務器從response中獲取數據,按照http協議打成一個數據包(響應數據包)。發送 給瀏覽器; 6、瀏覽器會解析響應數據包,取出相應的數據,生成相應的界面。
filter
也即Servlet過濾器,它具有客戶端(瀏覽器)請求的功能,Servlet過濾器可以改變請求中的內容來滿足實際開發中的需求。
它是Servlet技術中最實用的技術,WEB開發人員通過Filter技術,對web服務器管理的所有web資源:例如JSP,Servlet,靜態圖片文件或靜態HTML文件進行攔截,從而實現一些特殊功能。例如實現URL級別的權限控制、過濾敏感詞匯、壓縮響應信息等一些高級功能。
著名框架Struts就是基于filter實現的。
listener
監聽器的作用是監聽Web容器的有效事件,他是由容器管理的,可以監聽Application、Session、Request對象,當這些對象發生變化就會調用對應的監聽方法。
Struts2
Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。
Spring
Spring 框架的核心特性可以用于開發任何 Java 應用程序,但是在 Java EE 平臺上構建 web 應用程序是需要擴展的。 Spring 框架的目標是使 J2EE 開發變得更容易使用,通過啟用基于 POJO 編程模型來促進良好的編程實踐。
控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。
Spring MVC
Spring MVC 是一個模型 - 視圖 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它負責發送每個請求到合適的處理程序,使用視圖來最終返回響應結果的概念。Spring MVC 是 Spring 產品組合的一部分,它享有 Spring IoC容器緊密結合Spring松耦合等特點,因此它有Spring的所有優點。
Servlet是一個java web應用的核心,而我們訪問網頁看到的界面可不是完全由java代碼生成的,這個頁面是由HTML+CSS構成,但這只能是靜態頁面,動態的頁面由JavaScript,JSP等技術提供支持。
HTML
超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創建網頁的標準標記語言。“超文本”就是指頁面內可以包含圖片、鏈接,甚至音樂、程序等非文字元素。超文本標記語言的結構包括“頭”部分(英語:Head)、和“主體”部分(英語:Body),其中“頭”部提供關于網頁的信息,“主體”部分提供網頁的具體內容。
簡單點說就是頁面的結構是怎樣的,這里顯示一張圖片,那邊是一個按鈕。
CSS
層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。
其實也就是控件的樣式了,比如按鈕是什么顏色,什么大小之類的。
JavaScript
JavaScript(也可以簡寫為js)一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能,可以把靜態頁面轉變成支持用戶交互并響應應用實踐的動態頁面。經常應用JavaScript進行數據驗證、控制瀏覽器以及生成時鐘、日歷和時間戳文檔等。
js主管動作,減輕后臺的操作,可以很簡單的就實現對輸入的數據的驗證。比如說注冊的時候,用js中的ajax到后臺實時驗證本用戶名是否已經被注冊,驗證碼是否正確或者用來實現異步更新,為用戶帶來更好的體驗。用jquery來驗證密碼的合法性,輸入密碼與確認密碼是否一樣,從而反饋到html頁面上,可以通過操控css或者html頁面內容來確認輸入內容是否有錯。但是ajax和jquery都是js的一個庫。
JSP
SUN首先發展出Servlet,其功能比較強勁,體系設計也很先進,只是,它輸出HTML語句還是采用了老的CGI方式,是一句一句輸出,所以,編寫和修改HTML非常不方便,并且不能把網站的邏輯和頁面的輸出分開。為了解決Java Servlet的這種缺點, 推出了類似于ASP的鑲嵌型的JSP,把JSP TAG鑲嵌到HTML語句中,這樣,就大大簡化和方便了網頁的設計和修改,這就是Java Server Pages—JSP。
JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它[1] 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。
JSP文件會被編譯器編譯成Servlet的class類,所以我的理解是:為了方便編寫頁面設計的另一形式的java代碼編寫方式。
最后就是是數據相關的技術,在網站上注冊的用戶,肯定是記錄下來的,不然下次就不能登錄了,數據存儲使用了數據庫。java層要訪問數據庫就需要用到JDBC。
JDBC
JDBC(Java DataBase Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序,同時,JDBC也是個商標名。
Hibernate
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
MyBatis
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。 iBATIS一詞來源于“internet”和“abatis”的組合。
總結
以上是生活随笔為你收集整理的java web入门——概念理解、名词解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】10A--求裴波那切数
- 下一篇: Shodan搜索引擎介绍