servlet編程
『壹』 JSP頁面的編寫和servlet的編寫各有什麼優勢
這兩個東西沒有什麼大的區別,現在都是mvc框架,純粹在jsp寫代碼,不便於維護。後期維護的費用可是大於開發費用很多。至於泄密這種事情隨便一段代碼反編譯就都出來了。一般都是jsp管視圖,後台用框架。
『貳』 JSP中Servlet一般用來幹嘛啊
Servlet是一種伺服器端的java應用程序,具有獨立於平台和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與伺服器響應(HTTP伺服器上的資料庫或應用程序)的中間層。 Servlet是位於Web 伺服器內部的伺服器端的Java應用程序,與傳統的從命令行啟動的Java應用程序不同,Servlet由Web伺服器進行載入,該Web伺服器必須包含支持Servlet的Java虛擬機。servlet由來servlet是在伺服器上運行的小程序。這個詞是在Java applet的環境中創造的,Java applet是一種當作單獨文件跟網頁一起發送的小程序,它通常用於在客戶端運行,結果得到為用戶進行運算或者根據用戶互作用定點陣圖形等服務。 伺服器上需要一些程序,常常是根據用戶輸入訪問資料庫的程序。這些通常是使用公共網關介面(CGI(Common Gateway Interface))應用程序完成的。然而,在伺服器上運行Java,這種程序可使用Java編程語言實現。在通信量大的伺服器上,Java servlet的優點在於它們的執行速度更快於CGI程序。各個用戶請求被激活成單個程序中的一個線程,而無需創建單獨的進程,這意味著伺服器端處理請求的系統開銷將明顯降低。 最早支持Servlet技術的是JavaSoft的Java Web Server。此後,一些其它的基於Java的WebServer開始支持標準的ServletAPI。Servlet的主要功能在於互動式地瀏覽和修改數據,生成動態Web內容。這個過程為: 客戶端發送請求至伺服器端; 伺服器將請求信息發送至Servlet Servlet生成響應內容並將其傳給Server。響應內容動態生成,通常取決於客戶端的請求 伺服器將響應返回給客戶端 Servlet看起來像是通常的Java程序。Servlet導入特定的屬於Java ServletAPI的包。因為是對象位元組碼,可動態地從網路載入,可以說Servlet對Server就如同Applet對Client一樣,但是,由於Servlet運行於Server中,它們並不需要一個圖形用戶界面。從這個角度講,Servlet也被稱為FacelessObject。 一個servlet就是Java編程語言中的一個類,它被用來擴展伺服器的性能,伺服器上駐留著可以通過「請求-響應」編程模型來訪問的應用程序。雖然servlet可以對任何類型的請求產生響應,但通常只用來擴展Web伺服器的應用程序。 目前最新版本為3.0草案
『叄』 java servlet怎樣學好
學習程序的最好方式是參照源代碼,先仿照,後創新,慢慢有積累了,就可以收發自由了。沒關系的,慢慢來,不可能一步到位的。java確實很難學.
學習Java其實應該上升到如何學習程序設計這種境界,其實學習程序設計又是接受一種編程思想。每一種語言的程序設計思想大同小異,只是一些由語言特性的而帶來的細微差別比如Java中的Interface,你幾乎在以前的學習中沒有碰到過。以下我仔細給你說幾點:
1。我們必須明確一個大方向,也就是說現在面向對象的編程范疇。盡管人工智慧曾經有
所浪潮(看看Borland為什麼有Turbo Prolog),但未來5-10年工業界廣泛承認並接受的
將是面向對象式的編程。
2。工業界目前最流行的面向對象編程語言就是C++和Java。所以基本上鎖定這兩個方向就
可以了。而且完全可以同時掌握。
3。掌握Java的精華特性而且一定要知道為什麼。比如,Interface和multi-thread。用
interface是更好的多繼承的模型,而多線程則是設計到語言一級的重要特性。要完全理
解interface是為什麼,用多線程又有幾種常用的編程模型。
4。理解了語言的特性是為什麼了之後,就可以試著上升到設計這個層次,畢竟學習語言
是要用的。目前比較好的開發模式是採用自定向下的面向對象的設計,加上MVC的模式(
你可以看一下我介紹的關於MVC的內容)。首先要找出最頂層的對象(這往往是最難的)
,然後一層一層往下遞歸 ,記住每次應符合7+/-2的原則,因為我們人的短記憶就是這樣。一般有圖形用戶界面的 應從界面開始設計。
5。有了基本設計模型後,可以學一些設計模式(Design Pattern)。這是目前證明很有效
的。比如體系結構模式(Layering分層,Pipe/Filter管道或過濾器),設計模式(有很
多,比如對象池Object Pool、緩沖池Cache等),編程模式(比如Copy-on-Write)。懂了這些模式之後,就會對 系統的整體結構有很好的把握,而學術上也有傾向一個系統完全可以由各種模式組合而成 。前面提到的MT實際上就有好幾種模式,掌握後就不用自己花很多時間去試了。另外一個 很重要的領域就是並行 和分布式計算領域,大概有20種左右。
6。接下來就不能紙上談兵了,最好的方法其實是實踐。一般教科書上的例子並不能算是
實踐,只能算是讓你掌握語言特性用的。而提倡做實際的Project也不是太好,因為你還
沒有熟練的能力去綜合各種技術,這樣只能是你自己越來越迷糊。我認為比較好的方法是
找一些比較經典的例子, 每個例子比較集中一種編程思想而設計的,比如在我的實踐當中,我曾經學習過一個很經 典的例子就是用Java實現的HotDraw(源自SmallTalk),你可以用rolemodel或hotdraw在 搜索引擎上找一下,我記不大清楚了。好象rolemodel.com是個網站,上面有原代碼和一些基本設計的文檔。另 一個來源可以到www.umlchina.com是個不錯的文檔基地。從HotDraw上我學到了什麼是 Framework,以及如何用rolemodel的方式來構造,這樣我就可以應用到其他的地方。順便 說一句,這個例子你絕對不會覺得小,只會覺得大,並且他還是真正的商用的Framework 。
7。結合前面學到的設計模式你就可以很好的理解這些經典的例子。並且自己可以用他來
實現一些簡單的系統。如果可以對他進行進一步的修改,找出你覺得可以提高性能的地方
,加上自己的設計,那就更上一個層次了,也就會真正地感到有所收獲。
8。好象以上談的跟Java沒什麼關系,其實我們早就應該從單純的學習語言到真正的學習
好編程的領域。學習技術是沒有止境的,你學習第一種語言可能要半年時間,以後每種語
言都不應該超過兩個月,否則你會覺得學習語言是包袱,是痛苦。
9。學習是為了用的,是為了讓你的程序產生價值,把握住這個原則會比較輕松點。
我帶了JAVA班以後,來學習的同學很多都是初學者,一部分是急著找工作的,一部分是很感興趣的。他們都想在短短一兩個星期內掌握,這是不切實際的。而且這樣做很容易讓自己心浮氣燥,難以靜下心來思考。
JAVA是比較熱門,但我們自己不能頭腦發熱。我覺得所有初學者要學好JAVA或C或UNIX等任何一門計算機技術,一定要做到:
動手,動腦,動嘴,靜心。
其中動手是最為重要的了。很多人學計算機技術就是看書、聽課,當時是明白了,過後馬上就忘記。如果不願意敲鍵盤,就不如不學。即使有時候所敲的代碼你不明白,可以先運行,看看結果,增加感性認識,然後上升到理性的認識。特別是在大家做考題的時候,很多東西,概念,你只要隨便敲一個程序做做實驗就能很深刻的理解,但很多人都是不願意動手,這樣的學習效率能高嗎。
動腦,動嘴, 就是要多想問題,多思考,有不懂的問題就大聲說出來。很多人一是不動腦筋想問題,也就提不出問題。還有一些人怕自己提出的問題傻,怕人笑話。其實IT行業技術面很廣,工作了5、6年的人說出一些傻話來也是正常的。
然後靜心很重要。現在社會很浮躁,IT行業更浮躁,這種心態是學不好東西的。學會了基本的東西,高級的內容才容易掌握,否則就是本末倒置。當然有些人情況特殊,急著工作,那去學很多人JAVA做了幾年了,連多態,線程都沒搞明白。
JAVA中,有些概念不好理解怎麼辦,有學生說我就是不理解線程是怎麼回事。我覺得理解是需要時間的,一下不能理解,多看看,甚至多背幾遍就理解了。讀書千遍,其義自見,現在也管用。而且我覺得初學時候要不求甚解,多做,多敲代碼。等你做的足夠多的時候,見多識廣的時候,概念,理論的東西就很容易理解了。
JAVA的精華就在面向對象思想,好比指針是C語言的精華一樣,多花點心思就能掌握。
『肆』 編寫一個Servlet程序,處理URL請求"/retrieve",功能是獲取伺服器IP地址和伺服器埠號,並返回給用戶
環境:JDK 11.0.9 Tomcat 8.5.691
server代碼(僅供參考)
『伍』 如何用servlet實現多線程編程
Servlet的多線程和線程安全
線程安全
首先說明一下對線程安全的討論,哪種情況我們可以稱作線程安全?
網上對線程安全有很多描述,我比較喜歡《Java並發編程實戰》給出的定義,「當多個線程訪問某個類時,不管運行時環境採用何種調度方式,或者這些線程將如何交替執行,並且在主調代碼中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼就稱這個類是線程安全的」。
Servlet的調用過程和生命周期
Servlet的生命周期
Servlet是運行在Servlet容器中的,常用的tomcat、jboss、weblogic都是Servlet容器,其生命周期是由容器來管理。Servlet的生命周期通過java.servlet.Servlet介面中的init()、service()、和destroy()方法表示。Servlet的生命周期有四個階段:載入並實例化、初始化、請求處理、銷毀。
載入並實例化
Servlet容器負責載入和實例化Servelt。當Servlet容器啟動時,或者在容器檢測到需要這個Servlet來響應第一個請求時,創建Servlet實例。當Servlet容器啟動後,Servlet通過類載入器來載入Servlet類,載入完成後再new一個Servlet對象來完成實例化。
初始化
在Servlet實例化之後,容器將調用init()方法,並傳遞實現ServletConfig介面的對象。在init()方法中,Servlet可以部署描述符中讀取配置參數,或者執行任何其他一次性活動。在Servlet的整個生命周期類,init()方法只被調用一次。
請求處理
當Servlet初始化後,容器就可以准備處理客戶機請求了。當容器收到對這一Servlet的請求,就調用Servlet的service()方法,並把請求和響應對象作為參數傳遞。當並行的請求到來時,多個service()方法能夠同時運行在獨立的線程中。通過分析ServletRequest或者HttpServletRequest對象,service()方法處理用戶的請求,並調用ServletResponse或者HttpServletResponse對象來響應。
銷毀
一旦Servlet容器檢測到一個Servlet要被卸載,這可能是因為要回收資源或者因為它正在被關閉,容器會在所有Servlet的service()線程之後,調用Servlet的destroy()方法。然後,Servlet就可以進行無用存儲單元收集清理。這樣Servlet對象就被銷毀了。這四個階段共同決定了Servlet的生命周期。
Servlet的調用過程
1.客戶端通過發送請求給Tomcat,Tomcat發送客戶端的請求頁面給客戶端。
2.用戶對請求頁面進行相關操作後將頁面提交給Tomcat,Tomcat將其封裝成一個HttpRequest對象,然後對請求進行處理,。
3.Tomcat截獲請求,根據action屬性值查詢xml文件中對應的servlet-name,再根據servlet-name查詢到對應的java類(如果是第一次,Tomcat則會將servlet編譯成java類文件,所以如果servlet有很多的話第一次運行的時候程序會比較慢)。
4.Tomcat實例化查詢到的java類,注意該類只實例化一次。
5.調用java類對象的service()方法(如果不對service()方法進行重寫則根據提交的方式來決定執行doPost()方法還是doGet()方法)。
6.通過request對象取得客戶端傳過來的數據,對數據進行處理後通過response對象將處理結果寫回客戶端。
Servlet是線程安全的嗎?
從上面Servlet的調用過程可以看出,當客戶端第一次請求Servlet的時候,tomcat會根據web.xml配置文件實例化servlet,
當又有一個客戶端訪問該servlet的時候,不會再實例化該servlet,也就是多個線程在使用這個實例。
JSP/Servlet容器默認是採用單實例多線程(這是造成線程安全的主因)方式處理多個請求的,這種默認以多線程方式執行的設計可大大降低對系統的資源需求,提高系統的並發量及響應時間。
Servlet本身是無狀態的,一個無狀態的Servlet是絕對線程安全的,無狀態對象設計也是解決線程安全問題的一種有效手段。
所以,servlet是否線程安全是由它的實現來決定的,如果它內部的屬性或方法會被多個線程改變,它就是線程不安全的,反之,就是線程安全的。
下面這個示例來自《Java並發編程實戰》,在競態條件下存在線程不安全。
『陸』 servlet 來自哪一個包,父類
在J2EE中跟Servlet相關的一個包是javax.servlet,其中最基本的Servlet被聲明為一個介面javax.servlet: Interface Servlet,這是Servlet最高層次的一個抽象,它是和網路協議無關的。同樣在javax.servlet中,實現了一個類 javax.servlet: class GenericServlet,這個類實現了Servlet介面,也是和協議無關的。而這個類是構建其他和協議相關的Servlet子類型的通用的父類(至少HttpServlet是從它繼承而來的,從它的名字也能看出這一點)。
也就是說Servlet所適用的網路協議可以是多種多樣的,比如HTTP,FTP,SMTP,TELNET等,但是就目前而言,只有HTTP服務已經形成了標準的Java組件。對應的軟體包有兩個javax.servlet.http和javax.servlet.jsp,分別對應我們要講解的Servlet和JSP編程。我們通常所說的Servlet編程主要就是指針對HTTP的Servlet編程,用到的就是javax.servlet.http包中的類(典型的就是HttpServlet類),實際上Java Servlet編程的概念要更廣一些,在這里我們也就約定俗成的使用Servlet來指代HTTP Servlet的編程,這點讀者是需要了解的。由於JSP最終都是要經過JSP引擎轉換成Servlet代碼的,而且Servlet編程和一般的Java編程是沒有大的區別的,只需要了解一定的規范即可,所以我們在這里先講解Servlet的編程,這樣對以後理解JSP是很大的有好處的,盡管在使用的時候可能JSP更為簡單一些。
目前,Servlet引擎一般是第三方的插件,它通過一定的方法連接到Web伺服器,Servlet引擎把它識別為Servlet請求的那些HTTP請求截獲下來處理,而其他的HTTP請求由Web伺服器按照通常的方式來處理,Servlet引擎會裝載合適的Servlet到內存中,如果Servlet還沒有運行的話,會分配一個可以使用的線程來處理請求,再把Servlet的輸出返回到發出請求的Web客戶機。
Java Servlet和Java Applet正好是相對應的兩種程序類型,Applet運行在客戶端,在瀏覽器內執行,而Servlet在伺服器內部運行,通過客戶端提交的請求啟動運行,讀者在學習過程可以作簡單的比較。
由於Servlet是用Java編寫的,所以它與生俱來就有跨平台的特性,因此Servlet程序的設計完全和平台是無關的,同樣的Servlet完全可以在Apache,IIS等不同Web伺服器上執行,不管底層的操作系統是Windows,Solaris,Mac,Linux還是其他的能支持Java的操作系統。
Servlet是跟普通的Java程序一樣,是被編譯成位元組碼後由JVM執行的。相比傳統的CGI,盡管CGI是用本地代碼直接執行的,但是由於每次客戶端發出請求,伺服器必須啟動一個新的程序來處理請求,這就把高負載強加給了伺服器資源,尤其如果CGI使用腳本語言編寫時,如perl,伺服器還必須啟動語言解釋程序,程序越多,佔用的內存就越多,消耗CPU也越多,嚴重影響系統性能。
Servlet運行於Servlet引擎管理的Java虛擬機中,被來自客戶機的請求所喚醒,與CGI不同的是,在虛擬機中只要裝載一個Servlet就能夠處理新的請求,每個新請求使用內存中那個Servlet的相同副本,所以效率比CGI來得高。如果採用伺服器端腳本,如ASP,PHP,語言解釋程序是內置程序,因此可以加快伺服器的運行,但是效率還是比不上准編譯的Servlet。實際的使用也已經證明,Servlet是效率很高的伺服器端程序,很適合用來開發Web伺服器應用程序。
Java Servlet有著十分廣泛的應用。不光能簡單的處理客戶端的請求,藉助Java的強大的功能,使用Servlet還可以實現大量的伺服器端的管理維護功能,以及各種特殊的任務,比如,並發處理多個請求,轉送請求,代理等
10.1.3 Servlet的運行環境
典型的Servlet運行環境有JSWDK,Tomcat,Resin等
『柒』 servlet語言
get和post這是http協議的兩種方法,另外還有head, delete等
這兩種方法有本質的區別,get只有一個流,參數附加在url後,大小個數有嚴格限制且只能是字元串。post的參數是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進制數據,如文件的上傳。
在servlet開發中,以doGet()和doPost()分別處理get和post方法。
另外還有一個doService(), 它是一個調度方法,當一個請求發生時,首先執行doService(),不管是get還是post。在HttpServlet這個基類中實現了一個角度,首先判斷是請求時get還是post,如果是get就調用doGet(), 如果是post就調用doPost()。你也可以直接過載doService()方法,這樣你可以不管是get還是post。都會執行這個方法。
service()是在javax.servlet.Servlet介面中定義的, 在 javax.servlet.GenericServlet 中實現了這個介面, 而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子類. 所有可以這樣理解, 其實所有的請求均首先由 service() 進行處理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判斷請求類型是 Get 還是 Post, 然後調用對應的 doGet/doPost 執行.
doGet:處理GET請求 doPost:處理POST請求 doPut:處理PUT請求 doDelete:處理DELETE請求 doHead:處理HEAD請求 doOptions:處理OPTIONS請求 doTrace:處理TRACE請求 通常情況下,在開發基於HTTP的servlet時,開發者只需要關心doGet和doPost方法,其它的方法需要開發者非常的熟悉HTTP編程,因此這些方法被認為是高級方法。 而通常情況下,我們實現的servlet都是從HttpServlet擴展而來。 doPut和doDelete方法允許開發者支持HTTP/1.1的對應特性; doHead是一個已經實現的方法,它將執行doGet但是僅僅向客戶端返回doGet應該向客戶端返回的頭部的內容; doOptions方法自動的返回servlet所直接支持的HTTP方法信息; doTrace方法返回TRACE請求中的所有頭部信息。 對於那些僅僅支持HTTP/1.0的容器而言,只有doGet, doHead 和 doPost方法被使用,因為HTTP/1
『捌』 servlet編程需要注意哪些問題
Servlet開發中注意的細節問題
客戶端訪問伺服器的時候是通過URL訪問的,所以我們要想用瀏覽器訪問我們的Servlet的時候,我們就需要將我們的Servlet映射到一個URL上(通過我們的web.xml文件中的<servler-mapping>中的兩個子標簽<servlet-name>和<url-pattern>兩個標簽實現URL的配置,<Servlet>標簽是注冊了一個Servlet,只有注冊了我們才能進行映射,而且注冊一個可以映射多個,所以一個注冊的Servlet會被多次映射,也就是可以被瀏覽器的多個url訪問,而且我們的加一個後綴名也可以訪問)
/*、/news/*、/*.do這三種方式的映射分別實現了不同的作用
/*:任何的路徑都可以訪問
/news/*:特定文件夾下的所有路徑
/*.do:特定擴展名的所有路徑
誰先被被匹配到???
誰的匹配度高就匹配誰,誰最像就匹配誰。*.do的優先順序最低,兩個原則。Servlet的單例問題:Servlet是一個供其他java程序調用的類,它不能獨立運行,針對客戶端的多次請求,通常狀況下,Servlet只會創建一個Servlet實例對象,一旦創建它就會駐留在內存中,為後續的請求提供服務,直至退出web應用為止,也就是當我們關閉了瀏覽器之後我們的Servlet就終止了。
當Servlet第一次訪問的時候,就被載入到內存中,以後該實例對各個請求服務,沒次情況會調用一次service方法。
這樣會出現什麼問題:因為Servlet是單例的,所以會出現線程安全問題:
例如:售票系統(如果一個變數被多個用戶共享,我們就需要實現同步機制,如果一個變數不需要共享直接在doGet或者doPost中定義,這樣不會存在線程安全問題)
解決方法1:用這個對象將其synchronized(this){}包住,實現同步機制。
解決方法2servlet中配置<load-on-startup>配置的說明:
需求:當我們的網站啟動的時候,可能會要求初始化一些數據(比如像創建一些臨時的表),再比如我們的網站會有一些要定時完成的任務(定時寫日誌,定時發送郵件)
解決方法:可以使用配置這個標簽然後結合一些線程相關的知識解決問題。
先說明<load-on-startup>:通過配置該標簽,可以指定該Servlet自動創建。
實例1:初始化一些東西
實現:1、在Servlet標簽中配置<load-on-startup>標簽。2、在init函數中寫要初始化的東西。
實例2:每隔1分鍾發送一份電子郵件
實現:1、新建一個線程 2、調用線程,配置<load-on-startup>標簽
publicvoidinit()throwsServletException{
//Putyourcodehere
System.out.println("我們的線程啟動了");
SendEmailsend=newSendEmail();
send.sendmail();
}
packagecom.lyw.servlet;<load-on-startup>2</load-on-startup>
{
publicvoidsendmail(){
inti=0;
while(true){
i++;
try{
Thread.sleep(10*1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("發送第"+i+"份郵件");
}
}
}
我們的<load-on-startup>標簽中夾的數字是什麼意思???有什麼作用??
這代表我們啟動是順序,因為在實際開發中我們肯定要初始化多個對象,所以我們在這里要用數字表明啟動的順序。
5、ServletConfig對象
該對象主要是用於讀取Servlet的一些配置信息,
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
packagecom.lyw.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
Stringencoding=this.getServletConfig().getInitParameter("encoding");
response.setCharacterEncoding(encoding);
PrintWriterout=response.getWriter();
out.print("編碼是:"+encoding);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
/**
*Initializationoftheservlet.<br>
*
*@
*/
publicvoidinit()throwsServletException{
//Putyourcodehere
System.out.println("我們的線程啟動了");
SendEmailsend=newSendEmail();
send.sendmail();
}
}
讀取配置信息,該配置信息只能由該Servlet讀取。但是,如果希望讓所有的Servlet讀取某個參數,應該這樣配置:<contex-param>標簽下配置的可以被任何Servlet讀取。
6、如何去修改Servlet的文件
在myeclipse的plugin目錄下輸入wizards進行搜索找到相應的jar包,用壓縮包打開之後進行修改,改成自己想要的樣子,然後保存即可,修改的時候要把myeclipse關閉了。
引用:網頁鏈接
『玖』 JSP/Servlet/JavaBean是什麼東東
JSP是伺服器端的編程語言,見得比較多的是在一些網站上(當然作用絕不僅於此)
JSP是由Servlet發展而來的,我們首先解釋一下什麼是Servlet
Servlet是基於Java的伺服器端的編程組件,可以用於生成動態的網頁。什麼叫動態呢?比如訪問西祠,為什麼每次訪問我們版,用的域名是一樣的,可是內容每次不同?當然不可能是用的純html的靜態頁面,是因為加入了動態元素(西祠用的是ASP)。Servlet提供了編寫商務邏輯的方法,可以自動處理比如這兒的發帖子啊之類的,如果你對http比較熟悉你會比較明白這一點
總之,Servlet用於伺服器,你也可以簡單片面的理解為用於網站
JSP是什麼呢?因為Servlet生成頁面不很方便,特別是對於非Java專業人員,所以演變而來的一種語言,它的語法上就是Java+HTML,你看幾個源程序就明白了。其實,所有的JSP都要被自動翻譯成Servlet才能工作,它只是編程起來比較方便,所以受歡迎
JavaBean是一種組件,常用於提供給JSP一些輔助功能,比如大家習慣於用JSP編寫頁面,那麼一些復雜的商業邏輯放在一塊兒就亂了,所以用JavaBean封裝起來,其實JavaBean就是普通的Java類,只不過多了一些特性而以
如果你要學習,建議你先學習HTML,然後是HTTP的一些知識,然後開始學JSP,然後就會自然地看到Servlet和JavaBean了