我很長一段時間嘗試自學java的ASP.NET開發人員。我有Jetty下載和一個基本的網絡應用程序設置。 Head First Servlets和JSP中的教程告訴我在編譯時引用容器的servlet-api.jar(或者Jetty的案例中的servlet-api-3.0.jar)文件,這是有道理的,因爲我擴展了servlet類和所有的類,但是這不會將我的應用程序綁定到特定容器的servlet實現嗎?如果我用Jetty編譯我的應用程序,我還可以在Tomcat或任何EE服務器(glassfish,jboss等)下部署應用程序嗎?我是否必須針對特定的servlet容器編譯我的java web應用程序類?
1
A
回答
2
不,這不應該成爲問題,因爲您沒有引用特定於servlet的類。 servlet-api.jar
是幾個接口和抽象類形式的詳細說明文檔。
每個容器都必須具有此JAR的副本(可能使用不同的Java版本或編譯器進行編譯),因爲它實現了規範,但API本身從不更改。但是請注意,您並不需要引用容器提供的JAR。您可以安全地使用maven的版本或任何其他您可以找到的版本。它們都是兼容的。有時,由於各種許可不兼容,它們並未捆綁在一起。
這就是說:寫一次,到處跑也適用於此處。
1
你沒有對jar編碼,而是編碼到jar恰好包含的規範。任何提供Web容器的服務器都會有這個規範的實現,它所包含的jar是完全不相關的。
只要你只對規範進行編碼,那麼你就沒有綁定到任何服務器實現。
JAR在編譯和運行時使用來解決您所需的類依賴關係。您可以使用任何在編譯時提供必要API依賴項的jar,但是在運行時您將隱式使用特定服務器提供的實現。我隱含地說,因爲你不必爲自己的webapp做任何特定的配置來包含標準的API或其實現,服務器已經爲你提供了,不像獨立的應用程序。
相關問題
- 1. 我是否必須用4.2編譯我的iPhone應用程序?
- 2. 我是否必須預編譯asp.net mvc應用程序?
- 3. 我的Android應用程序名稱是否必須是com.myAppName
- 4. 我的默認應用程序是否必須部署到appspot.com?
- 5. 是否必須在我的應用程序中進行配置?
- 6. 我是否必須關閉瀏覽器才能刷新我的Java小程序?
- 7. 我必須依賴編譯器NRVO嗎?
- 8. 使用Qt時,我是否必須在特定的操作系統上編譯特定的操作系統?
- 9. 當我升級第三方jar時,是否必須重新編譯我的應用程序?
- 10. 針對特定Web應用程序的SharePoint計時器作業?
- 11. 我是否必須配置SQLiteCommand對象?
- 12. 我是否必須使用新證書更新我的應用程序?
- 13. 是否必須在web.xml文件中指定servlet過濾器?
- 14. UISplitViewController是否必須是iPad應用程序的根控制器?
- 15. Servlet是編寫Java Web應用程序的唯一方式
- 16. 在創建針對Android HTML5應用程序,我們是否必須使用不同的圖像分辨率?
- 17. 我是否必須一直指定System.Web.HttpContext.Current.Server?
- 18. 我是否必須將csv值加載到用於java web應用程序的數據庫
- 19. 我是否必須處理我不使用的返回對象?
- 20. 支持庫是否已編譯到我的應用程序中?
- 21. 我是否必須對子類中的協議重複確認?
- 22. 我對Web應用程序中的servlet實例感到困惑
- 23. 我是否必須將我的網站項目轉換爲Web應用程序項目才能遷移到Azure?
- 24. 我是否必須在我的應用程序和數據庫之間創建Web服務?
- 25. 如果我想寫一個servlet,是否必須重寫所有的Java服務器?
- 26. 必須重新編譯運行x32 ABI應用程序的內容?
- 27. 我必須編譯成JavaScript嗎?
- 28. 編譯器是否針對.pyc文件?
- 29. 我是否必須進行沒有特定功能的單元測試類?
- 30. 我是否必須處理Process.Start(url)?
我假設你正在擴展HttpServlet?一般來說Jetty沒有任何關於這個類或者http servlet框架的具體內容;你不會被綁定到特定的容器實現。 – skiller3 2012-03-16 19:00:32
那麼爲什麼每個容器都有自己的servlet實現。爲什麼不是Java核心庫的servlet API部分或某個獨立包? – Chris 2012-03-16 19:01:40
據我所知,容器沒有自己的servlet實現。 Jetty維護人員簡單地將servlet-api-3.0.jar與下載捆綁在一起,這是爲了方便您,因爲Jetty(像所有容器)在運行時需要它的類。這些類不是核心Java的一部分,僅僅是因爲它們迎合了非常特殊的上下文(假設世界上有很多生產servlet代碼) – skiller3 2012-03-16 19:05:52