JavaWeb在有了Servlet這項技術之後,就能夠編寫動態網頁了。在動態網頁中,通常來講樣式是不變的,變化的是數據。若是程序員在Servlet類中寫了大量的靜態代碼,例如out.println("<html>");這樣的代碼,程序就會難以理解,並且前端人員不可能在Java類裏面寫HTML代碼。爲了彌補Servlet在編寫HTML代碼上的不足,SUN公司推出了JSP技術。html
JSP實際上由兩部分組成,一部分是HTML標籤,一部分是嵌入在<% %>中的Java代碼。Web容器在收到.jsp爲擴展名的URL時,會將請求交給JSP引擎處理。每一個JSP頁面在第一次被訪問時,JSP引擎會將JSP文件,翻譯成Servlet文件(.java),而後再由Servlet引擎像處理正常的Servlet同樣,處理翻譯後的Servlet文件。咱們能夠舉個例子,如下是JSP文件翻譯後的Java類代碼:前端
咱們能夠看,JSP引擎翻譯後的Java類,繼承了HttpServlet。有本身的init、destroy、service方法。java
小結:JSP的出現是爲了解決Servlet寫前端頁面代碼難以理解維護的問題,http請求在請求jsp資源時,由Web容器中的JSP引擎,翻譯JSP文件爲Servlet文件,而後交給Servlet引擎處理。處理過程與通常的Servlet一致。程序員
注意:jsp 生成java源碼,默認第一次被請求時生成,以後的請求,直接執行代碼邏輯,而不會從新翻譯,除非內容修改,具體點說,因爲JSP只會在客戶端第一次請求的時候被編譯,所以第一次請求JSP時會感受比較慢,而以後的請求由於不會編譯JSP,因此速度就快多了,若是將Tomcat保存的JSP編譯後的class文件刪除,Tomcat也會從新編譯JSP。在開發Web程序的時候常常須要修改JSP,Tomcat可以自動檢測到JSP程序的改動,若是檢測到JSP源代碼發生了改動,Tomcat會在下次客戶端請求JSP時從新編譯JSP,而不須要重啓Tomcat,這種自動檢測功能默認是開啓的,檢測改動會消耗少許的時間,在部署web應用程序的時候能夠在web.xml中將它關掉。這也就是爲何咱們可以在jsp頁面直接修改內容,而不用從新啓動服務器的緣由。web
JSP和servlet有一點區別就在於:jsp是先部署後編譯(先部署JSP文件到服務器,而後在用戶訪問時,服務器將JSP文件翻譯爲java類,再編譯爲class文件),而servlet是先編譯後部署(將由java類編譯後的class文件部署到服務器上)。服務器