摘要:當后繼請求相同的頁面時,容器加載之前生成的類,并且通知去執行已經存在的字節碼,從而省去了轉換的過程,這也是第一次執行頁面時間較長的原因。
以往學習的時候大多是看完書或者看完視頻,動手實踐一下就OK了。然而過了一段時間我發現東西都忘差不多了,需要復習才能重新掌握。現在開始學習JavaWeb了,我將在這里記錄自己的學習的一點一滴,不僅便于自己以后回顧知識點,也希望能對JavaWeb初學者有所幫助。文章的內容主要是我對李剛老師的《輕量級JavaEE企業應用實戰》一書的學習總結。本系列文章為Java新手的學習總結,大神請自動路過。
JSP/Servlet是Java EE規范的兩個基礎成員,也是Java EE開發的基礎知識,同時也是Java Web開發的重點知識。JSP與Servlet的本質相同,JSP最終必須編譯成Servlet才能運行。JSP的特點就是在HTML代碼中嵌入Java代碼或者使用各種JSP標簽,動態的提供頁面內容。
(一)創建第一個Web應用在開始學習之前首先需要搭建Tomcat服務器,關于服務器的搭建請自行百度。我選擇的集成開發環境是Idea。下面我將手動建立一個Web應用:
在任一目錄下新建名為myFirstWebApp的文件夾
在myFirstWebApp文件夾內新建一個名為WEB-INF的文件夾(注意區分大小寫)
在WEB-INF文件夾下新建一個名為class和一個名為lib的文件夾
打開Tomcat的webapps文件夾,將任一示例的Web應用的WEB-INF下的web.xml文件復制到WEB-INF目錄下
將該文件根元素
在myFirstWebApp目錄下新建一個index.jsp文件,注意是jsp格式,使用記事本打開該文件添加以下內容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>我的第一個Web應用 Hello,my first WebApp!
這個文件實際上就是一個靜態HTML頁面但與之略有不同,項目部署成功以后,我們可以通過瀏覽器訪問這個頁面。
至此,我們就構建完成了一個基本的Web應用。myFirstWebApp是Web項目對應文件夾的名字。classes與lib文件夾的作用一致,都是用于保存Web應用所需要的Java類文件,其中classes文件夾用于保存單個的.class文件,lib文件夾用于保存打包的JAR文件。web-xml文件被稱為配置描述符,它的作用將在下面作詳細介紹。index.jsp是Web項目在有多個JSP頁面時首先訪問的頁面,它其實就是一個靜態頁面,我們可以通過瀏覽器訪問它。
下面我們將在Tomcat服務器上部署這個這個應用:
將該Web應用復制到Tomcat的webapps路徑下,這樣Web應用就可以自動部署到Tomcat服務器中。
啟動Tomcat,對于Windows平臺,只需要雙擊Tomcat安裝路徑下bin目錄中的startup.bat文件即可啟動Tomcat。
使用瀏覽器訪問http://localhost:8080/myFirst...。
你會看到剛才那個HTML代碼被瀏覽器渲染了
如果看到如下顯示則表示我們的已經成功把Web應用部署到Tomcat上了。
(二)配置描述符web.xmlweb.xml文件對于整個項目十分重要。在servlet2.5之前,每個Java Web應用必須包含一個web.xml文件且必須是在WEB-INF目錄下。但是從servlet3.0開始,此文件夾不再是必須的,但是為了同一性,通常我們還是保留這個文件。web.xml有很多配置管理作用,以后會逐步學到。
web.xml文件的根元素是
在web.xml文件中配置首頁使用welcome-file-list元素,該元素包含多個welcome-file子元素,每個元素匹配一個首頁。
index.html index.htm index.jsp
依次匹配每個頁面,不存在就使用下一個,以此類推。
其實每個Web容器都會提供一個系統的web.xml文件,用于描述所有Web應用共同的配置屬性。在Tomcat中,web.xml文件放在了conf路徑下。
(三)JSP的基本原理JSP的本質就是Servlet。當用戶向指定的Servlet發送請求時,Servlet利用輸出流動態的生成HTML頁面。其實,在每次的輸出流中存在大量的靜態文本,這些都極大的拖累了Servlet的開發效率。隨著JSP的出現,JavaWeb的開發效率大大提高:JSP通過在HTML代碼中嵌套java代碼,從而使靜態的部分不再需要Java程序控制,Java只控制那些需要從數據庫讀取或者需要動態生成的內容頁面。
所以,一個JSP頁面內容一般由靜態和動態兩個部分組成。靜態的部分就是一般的HTML代碼,動態的就是<% %>包裹的Java代碼,看起來JSP頁面與Java類沒有任何關系,其實JSP的本質依然是Servlet(一個特殊的類)。JSP頁面由系統編譯成Servlet,由Servlet響應用戶的請求。由此可見,每個JSP頁面就是一個Servlet實例,是Servlet的簡化,因為每個頁面都會被Servlet容器生成對應的Servlet類。
JSP頁面的基本工作原理如下:
首先由客戶端發起請求,JSP服務器判斷被請求的頁面是否是第一次收到請求,如果是,則先編譯JSP文件,生成對應的Servlet來響應請求,返回標準的HTML頁面。如果不是,那么表示該JSP頁面已有對應的Servlet,則會根據請求動態的生成HTML代碼返回給客戶端。
下面深入學習一下JSP的運行原理:
一個JSP運行體系至少包括Web服務器、JSP引擎和JVM三個部分,其運行過程如下圖所示:
用戶從客戶端向Web服務器發送請求時,服務器端首先判斷該請求是否包含JSP內容,如果只是請求HTML頁面,則直接把結果返回給客戶端,完成服務器端的響應工作。如果請求還包含JSP內容,那么先傳遞給JSP/Servlet引擎,該引擎解釋請求頁面中的JSP標記和腳本,把源代碼轉換為以".java"為后綴的Servlet代碼,并且傳送給JVM;JVM把這些Servlet代碼編譯成以".class"為后綴的可執行字節碼文件,并且存放在服務器上,接著執行字節碼,然后把結果傳送給JSP引擎,JSP引擎再把結果傳遞給Web服務器,最后Web服務器把結果以HTML頁面的形式傳送給客戶端,完成服務器端的響應工作。
當后繼請求相同的JSP頁面時,JSP容器加載之前生成的Servlet類,并且通知JVM去執行已經存在的字節碼,從而省去了轉換的過程,這也是第一次執行JSP頁面時間較長的原因。在JSP執行期間,JSP容器會檢查JSP文件,看是否有更新,如果有更新,JSP容器會再次編譯JSP或Servlet。
現在我們學會了如何建立一個web項目和了解了JSP的基本工作原理,接下來我們將學習JSP的基本語法和編譯指令。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66754.html
摘要:下面我們再打開對應的文件,我們會看到如下部分內容靜態測試調用我是文件,我被文件調用了我們發現,在該包含文件被引入處那條語句被執行了。 在上一節中我們學習了如何搭建一個簡單的Web應用,并且已經知曉了一個JSP頁面主要由靜態的HTML內容和動態的Java腳本共同組成。JSP的基本語法共有JSP注釋、JSP聲明、輸出JSP表達式與JSP程序片段四種,用來控制動態向頁面輸出內容的。現在我們就...
摘要:我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習后臺,因為最近接了私活的問題,好多都要后臺和前端一起做。 我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習Java后臺,因為最近接了私活的問題,好多都要Java后臺和前端一起做。平常我在做什么,當然是忙著賺錢了 除了敲代碼,你還有什么副業嗎?接了活自己還要找開發Java后臺開發的,為什么我自己不會呢...
摘要:我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習后臺,因為最近接了私活的問題,好多都要后臺和前端一起做。 我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習Java后臺,因為最近接了私活的問題,好多都要Java后臺和前端一起做。平常我在做什么,當然是忙著賺錢了 除了敲代碼,你還有什么副業嗎?接了活自己還要找開發Java后臺開發的,為什么我自己不會呢...
摘要:我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習后臺,因為最近接了私活的問題,好多都要后臺和前端一起做。 我沒有什么本事,人也丑,也不會忽悠,只能硬著頭皮學習了。最近計劃學習Java后臺,因為最近接了私活的問題,好多都要Java后臺和前端一起做。平常我在做什么,當然是忙著賺錢了 除了敲代碼,你還有什么副業嗎?接了活自己還要找開發Java后臺開發的,為什么我自己不會呢...
摘要:系列文章請查看超詳細的面試題總結一之基礎知識篇超詳細的面試題總結二之基礎知識篇超詳細的面試題總結三之集合篇常見問題下面的都是自己之前在學習的時候總結的,對于鞏固的基礎知識應該有很大幫助。注意多線程的并發的讀寫類屬性會導致數據不同步。 系列文章請查看: 超詳細的Java面試題總結(一)之Java基礎知識篇 超詳細的Java面試題總結(二)之Java基礎知識篇 超詳細的Java面試題總結(...
閱讀 2529·2021-07-26 23:38
閱讀 3430·2019-08-30 13:10
閱讀 2316·2019-08-29 18:33
閱讀 2321·2019-08-29 16:12
閱讀 987·2019-08-29 10:59
閱讀 1798·2019-08-26 17:40
閱讀 766·2019-08-26 11:59
閱讀 812·2019-08-26 11:41