要得到javax.servlet.jsp包需要下載jsp-api.jar。
為了編譯方便需要把 servlet-api.jar 和 jsp-api.jar 和其他 jar 包都放在一起,在 ant build 的時候就會一並被拷到 Web 項目的 WEB-INF/lib 下,不過這次因此出現了一個 jsp 頁面的編譯錯誤,所有的 jsp 頁面打開都會在頁面上報編譯錯誤,後台無任何信息。考慮到 jsp 頁面的編譯可能和 jsp-api.jar 有關,於是將 WEB-INF/lib 下的 servlet-api.jar 和 jsp-api.jar 移走,問題解決。
後來發現放在裡面的這兩個包是 tomcat5.5 的,是 JSP 2.0 規范的,而部署的伺服器是 tomcat 6.0 是 JSP 2.1 規范的,兩者可能有一定的沖突,才導致這樣的錯誤。
⑵ 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與JSP有什麼區別
Servlet與Jsp的區別 * Servlet中沒有內置對象,原來Jsp中的內置對象都是必須通過HttpServletRequest對象,或由 HttpServletResponse對象生成。 * 對於靜態的HTML標簽,Servlet都必須使用頁面輸出流諑行輸出。 總之,Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內容,至於Jsp中的 Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service 方法用於生成對客戶端的響應。-Servlet的開發 Servlet通常稱為伺服器端小程序,用於處理和響應客戶端的請求。 Servlet是個特殊的Java類,這個Java類必須繼承HttpServlet。每個Servlet可以響應客戶端的請求。 Servlet提供了不同的方法用於響應客戶端請求。 * doGet : 用於響應客戶端的get請求 * doPost : 用於響應客戶端的post請求 * doPut : 用於響應客戶端的put請求 * doDelete: 用於響應客戶端的delete請求 * service(HttpServletRequest request, [可以響應客戶端所有類型的請求] HttpServletResponse response) throws ServletException,java.io.IOException其他方法 * init(Servletconfig config) : 創建Servlet實例時,調用的初始化方法。 * destory() : 銷毀Servlet實例時,自動調用的資源回收方法。-Servlet的配置 編譯好的Servlet源文件並不能響應用戶請求,還必須將其編譯成class文件。將編譯後的.class 文件放在WEB-INF/classes路徑下,如果Servlet有包,則還應該將class文件放在對應的包路徑下。 為了讓Servlet能響應用戶請求,還必須將Servlet配置在Web應用中。配置Servlet時,需要修改 web.xml文件。 配置Servlet需要配置兩個部分: * 配置Servlet的名字:對應web.xml中的<servlet/>元素 * 配置Servlet的URL :對應web.xml中的<servlet-mapping/>元素-Servlet的生命周期 Servlet在容器中運行,其實例的創建以及銷毀等都不是由程序員決定的,而是由容器進行控制的。 Servlet的創建有兩個選擇: *客戶端請求對應的Servlet時,創建Servlet實例:大部分的Servlet都是這種Servlet *Web應用啟動時,立刻創建Servlet實例:即load-on-startup ServletServlet的生命周期: Begin ---> 創建實例完成 ---> 初始化[init] ---> 響應客戶端請求[doGet,doPost,service] ---> 被銷毀[destroy] ---> End-使用Servlet作為控制器 使用Servlet作為表現層的工作量太大,所有的HTML標簽都需要使用頁面輸出流生成。 因此使用Servlet作為表現層有如下三個劣勢: * 開發效率低,所有的HTML標簽都需使用頁面輸出流完成 * 不利於團隊協作,美工人員無法參與Servlet界面的開發 * 程序可維護性差,即使修改一個按鈕的標題,讀需要重新編輯Java代碼,並重新編譯使用Servlet的MVC的架構實現: Jsp頁面--> Servlet程序 --> Servlet根據條件轉發新的Jsp頁面-load-on-startup Servlet Servlet實例化的時機還有在Web應用啟動時,即load-on-startup Servlet 應用啟動時就啟動的Servlet,通常是用於某些後台服務的Servlet,或者攔截很多請求的Servlet; 這種Servlet通常作為基礎的Servlet使用,提供重要的後台服務。web.xml中的配置: 在<servlet/>元素中增加元素 <load-on-startup>1</load-on-startup>-訪問Servlet的配置參數 配置Servlet時,還可以增加附加的配置參數,通過使用配置參數,可以實現更好的解除耦合, 避免將所有的參數以硬編碼方式寫在程序中。 訪問Servlet配置參數要通過ServletConfig類的實例完成,ServletConfig提供如下方法: java.lang.String getInitParameter(java.lang.String name) [獲取初始化參數]]
⑷ 如何查看Servlet,JSP的版本
找到jsp-api.jar和servlet-api.jar兩個jar包,分別用winrar這類的軟體打開,裡面的META-INF文件夾下的MANIFEST.MF文件,裡面有相應的版本號
jsp是2.1,servlet是2.5
⑸ 解決項目中jsp-api,servlet-api和tomcat中jar包沖突問題
向myeclipse中導入一項目發現缺少jar包,在tomcat里找了兩個jar包jsp-api,servlet-api
執行時就會報異常
具體異常信息:
主要問題 :
項目中jsp-api,servlet-api和tomcat中lib下的jsp-api,servlet-api文件沖突所致
解決方法:
1.右擊項目名稱----properties----java Build Path----Add Library---myeclipse Libraries----javaEE5 Libraries復選框選中----finish
2.刪掉WEB-INF下的jsp-api,servlet-api重新部署
3.成功
⑹ servlet和jsp之間的關系
1.JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。
2.JSP編譯後是"類版servlet"。
3.Servlet和JSP最主要的不權同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
⑺ 什麼是JSP Servlet和JSP的關系
jsp是什麼1 2樓說的很清楚了
其實java虛擬機是不認識jsp這種東西的, jsp在被使用的時候會被容器轉內換容成servlet然後被調用
你去的你tomcat目錄下的work\Catalina\localhost\下這個文件夾里能找到和你項目同名的文件,這里有你jsp轉成的servlet的.java和class文件
⑻ jsp與servlet的區別
jsp和servlet的區別有以下幾點:
Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內容,回Jsp中的Java腳本如何答鑲嵌到一個類中,由Jsp容器完成。
1、jsp經編譯後就變成了Servlet。
2、jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制。
3、Servlet中沒有內置對象,Jsp中的內置對象都是必須通過HttpServletResponse對象以及HttpServlet對象得到。
4、而Servlet則是個完整的Java類,這個類的Service方法用於生成對客戶端的響應。
(8)servletjsp包擴展閱讀:
Servlet和JSP的不同點:
1、Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。
2、而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
3、JSP側重於視圖,Servlet主要用於控制邏輯
4、Servlet更多的是類似於一個Controller,用來做控制。
參考資料來源:網路-servlet
⑼ servlet在哪個包下
tomcat目錄下,lib文件夾中就有那兩個包,servlet-api.jar和jsp-api.jar導這兩個jar包:jsp-api 、servlet-api 開發JSP需要兩個包:javax.servlet和javax.servlet.http;把jsp-api 、servlet-api 放到項目中的 web-inf/lib目錄下即可。javax.servlet.http.HttpServletRequest是javax.servlet.http下的一個類,要像用它,必須要繼承javax.servlet和javax.servlet.http兩個包,把jsp-api ,servlet-api放到項目中的web-inf/lib目錄下即可。⑽ 如何得到javax.servlet.jsp包
javax.servlet.jsp.* 在 jsp-api.jar 中,而jsp-api.jar在tomcat的common/lib中就可以找到。
具體找法:
打開%TOMCAT_HOME%/common/lib 目錄下有2個jar包如下:
servlet-api.jar, jsp-api.jar
其中 jsp-api.jar封裝了跟jsp有關的api。