JSP的全稱是Java Server Page,而它和Servlet一樣,都是HttpServlet(Servlet API)的子類。那他和Servlet差異是什麼呢?其實主要是工作的面向不同
在介紹Servlet的時候,每當我們需要顯示內容回傳給客戶端的時候,我們都透過了out.println()的方法。光要寫一個基本的html頁面就很痛苦了,更別說如果要加上Javascript,或者比較複雜的模板,利用Servlet來做更本就是夢魘。通常我們網站都會有部份是一樣的,例如頁首和頁尾,可以想像的到如何用out.println()把這些都拼起來的畫面嗎?我相信程式設計師應該會崩潰吧。更別說如果要維護和修改。
當初的Sun看到問題,所以才有了JSP的誕生。
JSP的面向是處理View的部份,也就是實際把動態產生的內容呈現給客戶端的處理。這樣的做法是我們能夠把邏輯和顯示層分開,達到更容易維護,並且做到sepreation of concerns。
前言
Servlet的介紹就告了一段落,今天開始,我們來看看另外一個使用了Servlet的技術作為底層,JSP。
什麼是JSP
JSP的全稱是Java Server Page,而它和Servlet一樣,都是HttpServlet(Servlet API)的子類。那他和Servlet差異是什麼呢?其實主要是工作的面向不同
在介紹Servlet的時候,每當我們需要顯示內容回傳給客戶端的時候,我們都透過了out.println()的方法。光要寫一個基本的html頁面就很痛苦了,更別說如果要加上Javascript,或者比較複雜的模板,利用Servlet來做更本就是夢魘。通常我們網站都會有部份是一樣的,例如頁首和頁尾,可以想像的到如何用out.println()把這些都拼起來的畫面嗎?我相信程式設計師應該會崩潰吧。更別說如果要維護和修改。
當初的Sun看到問題,所以才有了JSP的誕生。
JSP的面向是處理View的部份,也就是實際把動態產生的內容呈現給客戶端的處理。這樣的做法是我們能夠把邏輯和顯示層分開,達到更容易維護,並且做到sepreation of concerns。
JSP頁面的構成
基本上JSP和ASP非常的像。因此,如果有寫過aspx的人對於jsp頁面的會感覺比Servlet來的親切。
JSP頁面基本上有兩大類的內容:
- 純粹的靜態html element
- JSP Element - 這些是畫面動態的部份。裡面還有不同類型的JSP Element。有Scriptlet(就是在JSP裡面的java 語法)、Directive和Tag等
通常網頁一定有部份是靜態的,例如menu的文字這種比較不會變換的。不過有些是要動態產生的,例如登入的會員名字,就需要透過JSP Element。
之後會詳細看看每一個不同的JSP Element,但是目前來說,我們只需要知道在jsp裡面包在<% %>裡面的就是jsp element。
JSP和Servlet不同之處
JSP和Servlet雖然有共同的父類,但是他們有很多不同之處:
URL對應
Servlet的URL對應是需要設定的。
但是JSP的對應就是它的實體路徑
如何被載入
Servlet一開始就是被編譯成class檔案,然後被http request的時候在被Web Container掛載進來。
JSP是在被第一次呼叫的時候才會被Web Container先翻譯成為Servlet的java寫法,才編譯成為class檔案,放在Web Container一個 暫時的資料夾。雖然第一次執行會比Servlet慢,不過掛載以後就一樣了(因為JSP和Servlet一樣,只會掛載一次)。
更新方式
Servlet如果有修改,需要重新編譯,因此需要重啟Web Container的服務。
JSP頁面因為Web Container有在監控,因此,只要有修改,他會重新翻譯、編譯然後掛載。因此不需要重啟Web Container就能看到最新修改。
結語
透過這篇的介紹,希望對於JSP有了一些概念。
接下來我們會更深入的看JSP裡面的技術,並且如何讓我們開發網站更容易。