MyEclipse,是在eclipse基礎上加上自己的外掛程式開發而成的功能強大的企業級整合開發環境,主要用於Java、Java EE以及行動應用程式的開發。以下這篇文章主要介紹了myeclipse開發servlet的相關資料,需要的朋友可以參考下。
在web.xml中可以對同一個Servlet配置多個對外存取路徑,並且如果在web.xml中配置的資訊伺服器會自動載入部署,而如果是在Servlet中進行程式碼的修改,則每次都要重新部署。
首先,在使用MyEclipse建立Servlet後,會根據所建立的Servlet進行到web.xml檔案的映射,如下圖所示:
#經過這個映射之後,在web.xml檔中就自動產生了這個Servlet的設定資訊:
當然,我們可以在web.xml檔中把這個Servlet繼續新增一條對外訪問路徑,使得這個Servlet可以從不同路徑進行訪問,現在我們在伺服器開啟的情況下,為這個Servlet添加一個新的對外訪問路徑好了:
紅框部分是新添加的,這時候伺服器在Console視窗會自動提示已經重新部署,是的,只要在web.xml中修改的都無需關閉伺服器就可以被伺服器重新更新載入部署:
那麼我們試試新的存取位址:
#可以訪問! !
細節二:在web.xml中為Servlet配置對外存取路徑的
一種格式是整個內容只能有「*.副檔名」# ,如
在瀏覽器可以在通配符位置隨便輸入:
#這樣造成了一種偽靜態的現象,我們以為是造訪一個靜態的頁面,其實卻是一個動態web資源。
另一種格式是以正斜線「/」開頭,加上自訂路徑,以「/*」結尾,如
在瀏覽器的網址列內可以在萬用字元位置隨便輸入,副檔名都不需要:
細節三:由細節二導出的多個Servlet資源的映射路徑如果使用了通配符,就可能發生衝突,那麼這時候伺服器將會以哪個Servlet資源作為回應呢?我們來看看下面的問題,就能明白了:
# 細節四: 在Servlet的整個生命週期內,Servlet的init()方法只會被呼叫一次。而對於Servlet的每次存取請求,Servlet都會呼叫service()方法一次。並且對於每次的請求訪問,Servlet都會建立一個新的HttpServletRequest請求物件和新的HttpServletResponse回應物件。當然在每次請求存取完成之後,這些請求物件和回應物件都會立刻被銷毀,等待下次請求再重新創建,這樣就能給伺服器減小壓力(非並發情況下)。
細節五:之前談到的Servlet在伺服器部署後,都是只在第一次對該Servlet存取時才由伺服器建立Servlet的實例對象,而如果在web.xml中在某個
細節六:如果某個Servlet的映射路徑僅僅為一個正斜線“/”,那麼這個Servlet就稱為當前web應用的預設Servlet。凡是在web.xml檔中找不到符合的
例如我現在建立兩個Servlet,其中一個有自訂的對外映射路徑,而另一個設定成了預設Servlet:
#要想存取SecondServlet就必須依照其對應的路徑在瀏覽器網址列中鍵入:
而對於預設Servlet,則是在web應用程式後隨便輸:
(如果不輸則會顯示的是已有的首頁index.jsp,為什麼呢,請看下面細節六)
細節六(重要) :如果我們在自己開發的Servlet中沒有配置預設Servlet,而是直接存取我們web工程下的一個靜態web資源的話(如果有),那麼我們將能從瀏覽器中看到這個web資源,記住:請求任何web資源都是以某個Servlet來回應回傳資料的,那麼既然我們沒有設定預設Servlet的話,為什麼能訪問這個資源呢?換句話說,是哪個Servlet將我們需要的資源回應給我們看的?答案就是Tomcat伺服器的預設Servlet! ! ! Tomcat伺服器的預設Servlet在Tomcat的【conf】目錄下的web.xml檔案中設定了映射路徑:
從Tomcat的web.xml檔案中可以看出,其預設Servlet在伺服器啟動就建立實例對象,並且是最早建立的,對外路徑已經設定了預設格式。而這個預設Servlet會管理每個自訂建立的Servlet工程,如果我們沒有在自己的web工程中建立預設Servlet,那麼當我們要存取自己web工程中的某個資源時,Tomcat的預設Servlet會幫我們將該資源封裝成回應對象傳回客戶端。
例如,我在我的web工程下建立一個1.html頁面:
而我去瀏覽器造訪這個頁面:
對於這個URL,Tomcat伺服器首先去配對我的Servlet是否有對應的映射路徑,如果沒有,並且如果我沒有在自己的web工程中設定預設Servlet,那麼Tomcat的預設Servlet就在我的web應用下搜尋HTTP請求的資源,找到並封裝成回應物件回傳給客戶端。如果Tomcat的預設Servlet找不著所需的資源,那它依然會回應客戶端,只是客戶端看到的是一些提示找不著該資源,如404提示。另外,根據這個過程,我們在開發自己的Servlet時,建議不要將自己的某個Servlet映射成預設Servlet為好。
接下來,討論一個首頁的問題。除了我們存取web應用程式中某個特定資源(在瀏覽器位址上最後鍵入一個檔案名稱),還會是在鍵入web應用程式名稱之後就發送HTTP請求了,這時候我們看到的也是一個頁面,通常稱為“首頁”,而這個首頁,也是由預設Servlet來回應的。
例如我使用MyEclipse建立一個web應用程式時就會預設幫我建立一個「index.jsp」檔案:
#而我在該web應用中沒有建立任何Servlet,或即使建立Servlet也對應到某個特定的對外URL上,那麼我在瀏覽器輸入主機位址+web應用程式名稱還是會看到這個index.jsp:
前面所說,這個頁面一定是由Tomcat伺服器的預設Servlet傳回給客戶端的,那麼Tomcat伺服器為什麼是傳回這個資源呢,而不是別的資源呢?答案還是在web.xml檔中,還記得之前《Tomcat詳細用法學習(三)》中定義的首頁設定嗎,對,就是這個方法,這個方法由預設Servlet來管理,我們再來回顧下在Tomcat的web .xml檔案中的
如果瀏覽器的輸入位址只輸入了web應用名,那麼Tomcat的預設Servlet傳送這個web應用下的index.html文件,否則傳送index.htm文件,再否則傳送index.jsp,如果三個都沒有那麼只能回傳404了。
如果我把這段程式碼註解掉或刪掉,再想直接存取web應用程式名稱就跟我把index.jsp檔案刪除一樣,Tomcat的預設Servlet找不到資源,回傳404提示(在MyEclipse中需要重新啟動伺服器):
#
所以如果我們想為自己的web應用程式弄出個漂亮首頁,只需要在index .jsp中開發就行了,或另外建立一個index.html檔案開發,這個檔案會比index.jsp更優先被存取。
細節七:因為我們的開發Servlet都要繼承Servlet介面的某個實作類,那麼我們在寫doGet方法或是doPost方法的時候很可能呼叫了某些會拋出例外的方法,那麼我們對這些異常只能捕獲處理,而不能拋出,這是因為子類別在覆蓋父類別的方法時,不能拋出比父類別更多的異常。
總結
#以上是Java中myeclipse開發servlet的圖文教學的詳細內容。更多資訊請關注PHP中文網其他相關文章!