01.動態網頁的優勢
動態網頁是在服務器端運行的程序!隨不同用戶,不同條件 返回不同的結果!
001.交互性:網頁會根據用戶的要求和選擇而動態的改變和現實網頁內容!
002.自動更新:無需改變頁面的代碼,便會自動更新頁面內容!
003.隨機性:當不同的時間,不同身份的用戶訪問同一頁面會產生不同的的頁面效果!
02.動態網頁是靜態網頁的替代品嗎?
兩者各有優點,選擇哪種頁面取決於網站功能的需求和內容的多少。如果網站的功能簡單,內容少,采用靜態網頁的方式更合適!
反之,一般要使用動態網頁!
03.B/S架構(Browser/Server 瀏覽器/服務器)
001.在B/S架構下,應用程序 完全 放在應用服務器上,並通過應用服務器與數據庫服務器進行通信,系統界面通過瀏覽器展現。
002.B/S和C/S各自優勢
B/S的優勢:
維護和升級方式簡單。C/S架構必須安裝和配置客戶端軟件。如果系統需要更新,必須對每一個客戶端都進行更新!
B/S架構中,軟件應用的業務邏輯完全在服務器端實現,所有的客戶端只是瀏覽器,不需要維護!(升級瀏覽器需在客戶端進行)
維護人員只需要關注服務器端軟件的軟件更新!
C/S的優勢:
B/S的界面沒有C/S的友好,很難做出像office這樣界面豐富的軟件。
在速度和安全性上需要花費巨大的設計成本!
由於B/S架構的交互是 請求/響應 模式的,一旦數據信息發生變化,必須通過刷新頁面才能看到更新的數據信息!
C/S架構一般面向固定的用戶群,一般高度機密的信息系統采用C/S架構!
B/S架構適用於公開信息發布,對信息的保密性要求較低的情況!
003.B/S架構的工作流程
01.瀏覽器接收用戶的輸入
02.瀏覽器向服務器發送請求,等待服務器響應(此請求先到應用程序服務器,再到數據庫服務器!)
03.數據處理:服務器通常使用服務器腳本語言(Java等)進行數據庫訪問
04.服務器向瀏覽器發送響應!(如動態生成的html頁面,並有瀏覽器進行渲染后展現給用戶!)
04.URL(Uniform Resource Locator) 統一資源定位符!
01.URL用於完整的描述Internet上網頁和其他資源的地址的一種標識方法!(簡單說URL就是網址!)
02.在Internet上所有資源都有一個獨一無二的URL!
03.URL的組成! http://localhost/news/index.jsp
協議:http ==> HyperText Transfer Protocol 超文本傳輸協議!
https ==> 安全的! safe
該協議支持簡單的 請求/響應對話!對於Web服務器是最常用的協議!
服務器域名 IP:localhost
端口號:
端口是用於服務器內外部通信的通道!當外部訪問服務器時就需要通過指定的通道來訪問!
為了避免復雜的ip地址,通常用域名來代替!例如百度ip為 202.108.22.5 域名為baidu.com
路徑:
包含兩層含義!
例如news/index.jsp
news是指Web應用程序 對外發布時 對應的上下文路徑!即Web應用的根目錄!index.jsp代表具體的資源!
05.常用的Web服務器(Web容器)
001.Tomcat
002.JBoss
003.Jetty
06.Web應用的目錄結構
/ :根目錄,該目錄下的所有文件 對客戶端都可以訪問!(jsp html css js ..)
/WEB-INF:存放應用程序所使用的各種資源,該目錄及其子目錄對客戶端 不可以訪問!(其中包括web.xml 部署描述符)
/WEB-INF/classes :存放應用程序 所有的class文件!
/WEB-INF/lib : 存放Web應用使用的 jar文件!
注意:01.Tomcat運行過程中,Tomcat類加載器會先加載 classes目錄下的class文件!然后再加載 lib目錄下的 jar文件!
如果在這兩個目錄下存在同名的類,那么classes目錄下的類具有優先權!
02.每個JavaWeb應用都有一個核心文件 即web.xml !(保存在WEB-INF目錄下!)
web.xml 控制整個應用程序的行為方式和方法!
03.修改web.xml后,需要重啟Web服務器!
04.web.xml 文件中的<welcome-file-list>標簽用於設定web應用的起始訪問頁面列表!
<welcome-file>用於指定某一具體頁面!
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
...
</welcome-file-list>
07.JSP頁面 Java Server Page(Java服務器端的頁面)
01.JSP技術是在 html頁面中嵌入 Java腳本語言,然后由應用程序服務器中的 JSP容器來編譯和執行 之后將產生的結果返回給客戶端!
02.JSP的組成:
靜態內容
JSP指令
JSP表達式
JSP小腳本
JSP聲明
注釋等元素構成!
001.靜態內容:如 html文本 與Java和JSP的語法無關!
002.JSP指令元素: <%@ %>
例如 01.page指令,在一個JSP頁面中可以多個page指令!page指令只對 當前頁面有效!
page指令的屬性:
import="java.util.*"
language="java"
contentType="text/html;charset=utf-8"
contentType屬性告訴web容器在客戶端瀏覽器上以哪種格式/編碼 顯示“響應”的內容!
02.include指令 等
003.JSP腳本元素:
小腳本 <% java代碼 %>
表達式 <% java變量/java表達式 %> 不能在表達式結尾加分號 “;” !
聲明 <%! %>用來定義方法/變量 (都是全局的!)
004.JSP注釋:<%-- 注釋 --%> 在客戶端瀏覽器通過查看源碼 是看不到的! (安全的!)
html注釋:<!-- 注釋 --> 查看源碼可以看到!(不安全的!)
在JSP腳本中使用注釋: <% //單行注釋 %> 多行<% /*多行注釋*/ %> 查看源碼看不到!(安全的!)
08.JSP 執行過程! *****
當請求發送至服務器,web容器通過三個階段實現處理!
01. 翻譯階段!
用戶通過瀏覽器訪問jsp時,web容器(tomcat)中的 jsp引擎 負責把jsp 轉化為 java文件
001.jsp聲明 ==> java文件中的成員方法!
002.jsp腳本 ==> java文件中 _jspService()方法中的一段代碼!
003.jsp表達式 ==> java文件中 _jspService()方法中的一段代碼! out.print(表達式);
004.普通html代碼 ==> _jspService()中一段out代碼! out.print("html標簽");
02. 編譯階段!
服務器將java文件編譯成 class文件
03. 執行階段!
服務器執行 class文件!
001. 首先對生成的java類進行實例化!
002.調用實例化后的 對象._jspService() 輸出 html 給瀏覽器!
注意:無論請求的URL 是 html 還是jsp 服務器響應回來的都是 html (jsp ==> html的過程發生在服務器內部!)
04. 瀏覽器 渲染html數據 顯示給用戶!
注意:一旦web容器把jsp文件翻譯和編譯完成。web容器就會將 編譯好的 class字節碼文件保存在 內存中!
當用戶再次請求相同的jsp時, 就可以 重用 這個編譯好的class字節碼文件!而不會把jsp重新翻譯編譯!
這樣做大大提升了 web應用程序的性能!(請求后服務器直接運行class文件!)
但如果對jsp進行了修改,web容器就會重新 翻譯編譯!
綜上所述,jsp在第一次請求時會比較慢!