在web.xml中可以對(duì)同一個(gè)Servlet配置多個(gè)對(duì)外訪問(wèn)路徑,并如果在web.xml中配置的信息服務(wù)器會(huì)自動(dòng)加載部署,而如果是在Servlet中進(jìn)行程序代碼的修改,則每次都要重新部署。
為洮南等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及洮南網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站建設(shè)、洮南網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!首先,在使用MyEclipse創(chuàng)建Servlet后,會(huì)根據(jù)所創(chuàng)建的Servlet進(jìn)行到web.xml文件的映射,如下圖所示:
經(jīng)過(guò)這個(gè)映射之后,在web.xml文件中就自動(dòng)生成了這個(gè)Servlet的配置信息:
當(dāng)然,我們可以在web.xml文件中把這個(gè)Servlet繼續(xù)添加一條對(duì)外訪問(wèn)路徑,使得這個(gè)Servlet可以從不同路徑進(jìn)行訪問(wèn),現(xiàn)在我們?cè)诜?wù)器開(kāi)啟的情況下,為這個(gè)Servlet添加一個(gè)新的對(duì)外訪問(wèn)路徑好了:
紅框部分是新添加的,這時(shí)候服務(wù)器在Console窗口會(huì)自動(dòng)提示已經(jīng)重新部署,是的,只要在web.xml中修改的都無(wú)需關(guān)閉服務(wù)器就可以被服務(wù)器重新更新加載部署:
那么我們?cè)囋囆碌脑L問(wèn)地址:
可以訪問(wèn)!!
細(xì)節(jié)二:在web.xml中為Servlet配置對(duì)外訪問(wèn)路徑的<url-pattern>可以使用“*”作為通配符,但是這種只能有兩種格式:
一種格式是整個(gè)內(nèi)容只能有“*.擴(kuò)展名” ,如<url-pattern>*.html<url-pattern>,而如果寫(xiě)成這樣<url-pattern>abc/*.html<url-pattern>就是錯(cuò)誤的。尤其是<url-pattern>/*.html<url-pattern>也是錯(cuò)誤的,不能有“/”,一定要注意。例:
在瀏覽器可以在通配符位置隨便輸入:
這樣造成了一種偽靜態(tài)的現(xiàn)象,我們以為是訪問(wèn)一個(gè)靜態(tài)的頁(yè)面,其實(shí)卻是一個(gè)動(dòng)態(tài)web資源。
另一種格式是以正斜線“/”開(kāi)頭,加自定義路徑,以“/*”結(jié)尾,如<url-pattern>/abc/*<url-pattern>。這時(shí)候連擴(kuò)展名都任意了。例:
在瀏覽器的地址欄內(nèi)可以在通配符位置隨便輸入,擴(kuò)展名都不需要:
細(xì)節(jié)三:由細(xì)節(jié)二導(dǎo)出的多個(gè)Servlet資源的映射路徑如果使用了通配符,就可能發(fā)生沖突,那么這時(shí)候服務(wù)器將會(huì)以哪個(gè)Servlet資源作為響應(yīng)呢?我們看一下下面的問(wèn)題,就能明白了:
細(xì)節(jié)四: 在Servlet的整個(gè)生命周期內(nèi),Servlet的init()方法只會(huì)被調(diào)用一次。而對(duì)于Servlet的每次訪問(wèn)請(qǐng)求,Servlet都會(huì)調(diào)用service()方法一次。并對(duì)于每次的請(qǐng)求訪問(wèn),Servlet都會(huì)創(chuàng)建一個(gè)新的HttpServletRequest請(qǐng)求對(duì)象和新的HttpServletResponse響應(yīng)對(duì)象。當(dāng)然在每次請(qǐng)求訪問(wèn)完成之后,這些請(qǐng)求對(duì)象和響應(yīng)對(duì)象會(huì)立馬被銷毀,等待下次請(qǐng)求再重新創(chuàng)建,這樣就能給服務(wù)器減小壓力(非并發(fā)情況下)。
細(xì)節(jié)五:之前談到的Servlet在服務(wù)器部署后,都是只在第一次對(duì)該Servlet訪問(wèn)時(shí)才由服務(wù)器創(chuàng)建Servlet的實(shí)例對(duì)象,而如果在web.xml中在某個(gè)<servlet>標(biāo)簽下配置<load-on-startup>標(biāo)簽,則該Servlet會(huì)在服務(wù)器啟動(dòng)后就創(chuàng)建實(shí)例對(duì)象,并執(zhí)行Servlet的初始化init()方法。<load-on-startup>的內(nèi)容為一個(gè)正整數(shù)值。該值越小,代表在服務(wù)器啟動(dòng)后優(yōu)先創(chuàng)建Servlet對(duì)象并執(zhí)行初始化方法。
細(xì)節(jié)六:如果某個(gè)Servlet的映射路徑僅僅為一個(gè)正斜線“/”,那么這個(gè)Servlet就稱為當(dāng)前web應(yīng)用的默認(rèn)Servlet。凡是在web.xml文件中找不到匹配的<servlet-mapping>標(biāo)簽的URL,它們的訪問(wèn)請(qǐng)求都是交個(gè)默認(rèn)Servlet來(lái)處理,也就是說(shuō)默認(rèn)Servlet用于處理所有其他Servlet都不處理的訪問(wèn)請(qǐng)求。
例如我現(xiàn)在創(chuàng)建兩個(gè)Servlet,其中一個(gè)有自定義的對(duì)外映射路徑,而另一個(gè)設(shè)置成了默認(rèn)Servlet:
要想訪問(wèn)SecondServlet就必須按照其對(duì)應(yīng)的路徑在瀏覽器地址欄中鍵入:
而對(duì)于默認(rèn)Servlet,則是在web應(yīng)用名后隨便輸:
(如果不輸則會(huì)顯示的是已有的首頁(yè)index.jsp,為什么呢,請(qǐng)看下面細(xì)節(jié)六)
細(xì)節(jié)六(重要) :如果我們?cè)谧约洪_(kāi)發(fā)的Servlet中沒(méi)有配置默認(rèn)Servlet,而是直接訪問(wèn)我們web工程下的一個(gè)靜態(tài)web資源的話(如果有),那么我們將能從瀏覽器中看到這個(gè)web資源,記?。赫?qǐng)求任何web資源都是以某個(gè)Servlet來(lái)響應(yīng)回傳數(shù)據(jù)的,那么既然我們沒(méi)有配置默認(rèn)Servlet的話,為什么能訪問(wèn)到這個(gè)資源呢?換句話說(shuō),是哪個(gè)Servlet將我們需要的資源響應(yīng)給我們看的?答案就是Tomcat服務(wù)器的默認(rèn)Servlet?。?!Tomcat服務(wù)器的默認(rèn)Servlet在Tomcat的【conf】目錄下的web.xml文件中設(shè)置了映射路徑:
從Tomcat的web.xml文件中可以看出,其默認(rèn)Servlet在服務(wù)器啟動(dòng)就創(chuàng)建實(shí)例對(duì)象,并且是最早創(chuàng)建的,對(duì)外路徑已經(jīng)設(shè)置了默認(rèn)格式。而這個(gè)默認(rèn)Servlet會(huì)管理每個(gè)自定義創(chuàng)建的Servlet工程,如果我們沒(méi)有在自己的web工程中創(chuàng)建默認(rèn)Servlet,那么要訪問(wèn)自己web工程中的某個(gè)資源時(shí),Tomcat的默認(rèn)Servlet會(huì)幫我們將該資源封裝成響應(yīng)對(duì)象傳回客戶端。
例如,我在我的web工程下創(chuàng)建一個(gè)1.html頁(yè)面:
而我去瀏覽器訪問(wèn)這個(gè)頁(yè)面:
對(duì)于這個(gè)URL,Tomcat服務(wù)器首先去配對(duì)我的Servlet是否有對(duì)應(yīng)的映射路徑,如果沒(méi)有,并且如果我沒(méi)有在自己的web工程中設(shè)置默認(rèn)Servlet,那么Tomcat的默認(rèn)Servlet就在我的web應(yīng)用下搜尋HTTP請(qǐng)求的資源,找到并封裝成響應(yīng)對(duì)象返回給客戶端。如果Tomcat的默認(rèn)Servlet找不著所需的資源,那它依然會(huì)響應(yīng)客戶端,只是客戶端看到的是一些提示找不著該資源,如404提示。另外,根據(jù)這個(gè)過(guò)程,我們?cè)陂_(kāi)發(fā)自己的Servlet時(shí),建議不要將自己的某個(gè)Servlet映射成默認(rèn)Servlet為好。
接下來(lái),討論一個(gè)首頁(yè)的問(wèn)題。除了我們?cè)L問(wèn)web應(yīng)用中某個(gè)特定資源(在瀏覽器地址上最后鍵入一個(gè)文件名),還會(huì)是在鍵入web應(yīng)用名之后就發(fā)送HTTP請(qǐng)求了,這時(shí)候我們看到的也是一個(gè)頁(yè)面,通常稱為“首頁(yè)”,而這個(gè)首頁(yè),也是由默認(rèn)Servlet來(lái)響應(yīng)的。
例如我使用MyEclipse創(chuàng)建一個(gè)web應(yīng)用時(shí)就會(huì)默認(rèn)幫我創(chuàng)建一個(gè)“index.jsp”文件:
而我在該web應(yīng)用中沒(méi)有創(chuàng)建任何Servlet,或者即使創(chuàng)建Servlet也映射到某個(gè)特定的對(duì)外URL上,那么我在瀏覽器輸入主機(jī)地址+web應(yīng)用名依然能看到這個(gè)index.jsp:
由前面所說(shuō),這個(gè)頁(yè)面肯定是由Tomcat服務(wù)器的默認(rèn)Servlet傳回給客戶端的,那么Tomcat服務(wù)器為什么是傳回這個(gè)資源呢,而不是別的資源呢?答案還是在web.xml文件中,還記得之前《Tomcat詳細(xì)用法學(xué)習(xí)(三)》中定義的首頁(yè)設(shè)置嗎,對(duì),就是這個(gè)方法,這個(gè)方法由默認(rèn)Servlet來(lái)管理,我們?cè)賮?lái)回顧下在Tomcat的web.xml文件中的<welcome-file-list>標(biāo)簽:
如果瀏覽器的輸入地址只輸入了web應(yīng)用名,那么Tomcat的默認(rèn)Servlet傳送這個(gè)web應(yīng)用下的index.html文件,否則傳送index.htm文件,再否則傳送index.jsp,如果三個(gè)都沒(méi)有那么只能返回404了。
如果我把這段代碼注釋掉或刪掉,再想直接訪問(wèn)web應(yīng)用名就跟我把index.jsp文件刪除一樣,Tomcat的默認(rèn)Servlet找不到資源,返回404提示(在MyEclipse中需要重啟服務(wù)器):
所以如果我們想為自己的web應(yīng)用弄出個(gè)漂亮首頁(yè),只需要在index.jsp中開(kāi)發(fā)就行了,或者另外創(chuàng)建一個(gè)index.html文件開(kāi)發(fā),這個(gè)文件會(huì)比index.jsp更優(yōu)先被訪問(wèn)。
細(xì)節(jié)七:因?yàn)槲覀兊拈_(kāi)發(fā)Servlet都要繼承Servlet接口的某個(gè)實(shí)現(xiàn)類,那么我們?cè)诰帉?xiě)doGet方法或者doPost方法的時(shí)候很可能調(diào)用了某些會(huì)拋出異常的方法,那么我們對(duì)這些異常只能捕獲處理,而不能拋出,這是因?yàn)樽宇愒诟采w父類的方法時(shí),不能拋出比父類更多的異常。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。
本文名稱:myeclipse開(kāi)發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理-創(chuàng)新互聯(lián)
路徑分享:http://aaarwkj.com/article22/pjijc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站排名、品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容