1.servlet映射
<servlet-mapping>
<servlet-name>MyName</servlet-name>
<url-pattern>/hello.html<url-pattern>
</servlet-mapping>
其中,url也可以使用通配符,但是只有兩種形式:
1)*.擴(kuò)展名
2)正斜杠"/"開頭,并以"/*結(jié)尾"
例如:指定/action/*.xx,在地址欄中輸入/action/test.xx是無法匹配的,因?yàn)?action/*.xx是一個(gè)無效的映射路徑。
2.servlet激活器
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*<url-pattern>
</servlet-mapping>
這段內(nèi)容說明,當(dāng)訪問應(yīng)用程序下面任何以/servlet/開頭的程序時(shí),都會(huì)去調(diào)用一個(gè)注冊(cè)名為invoker的servlet。
這個(gè)注冊(cè)名為invoker的servlet,在tomcat主目錄/conf目錄下的web.xml中有定義,
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
其中l(wèi)oad-on-startup設(shè)定為隨tomcat啟動(dòng)而加載,
而invoker這個(gè)servlet的作用就是去激活和調(diào)用任何其他的Servlet,故被稱為Servlet激活器。
3.servlet的加載
1)當(dāng)接到某個(gè)servlet的請(qǐng)求時(shí),servlet引擎會(huì)檢查是否已經(jīng)創(chuàng)建了該servlet的實(shí)例對(duì)象,如果已經(jīng)創(chuàng)建了,直接到第4步,否則第2步。
2)創(chuàng)建并裝載Servlet的一個(gè)實(shí)例對(duì)象
3)調(diào)用servlet的init()方法,執(zhí)行Servlet的一些初始化工作
4)創(chuàng)建一個(gè)用于封裝HTTP請(qǐng)求消息的HttpServletRequest對(duì)象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對(duì)象,然后調(diào)用servlet的service()方法,將這兩個(gè)對(duì)象傳遞進(jìn)去
5)在一個(gè)Web應(yīng)用程序被停止或者重新啟動(dòng)之前,servlet引擎將卸載其中運(yùn)行的servlet。在卸載之前,調(diào)用servlet的destory()方法,執(zhí)行servlet的一些清理工作。
如果對(duì)某個(gè)已經(jīng)裝載的servlet做了修改,除非重新啟動(dòng)服務(wù)器,否則內(nèi)存中運(yùn)行的仍舊是舊的servlet代碼。
tomcat服務(wù)器可以設(shè)置,當(dāng)servlet被修改后,是否自動(dòng)裝載,tomcat主目錄/conf/server.xml中的Context元素中的reloadable屬性,默認(rèn)為false,就是不自動(dòng)加載修改的servlet。設(shè)定為true,會(huì)自動(dòng)裝載。當(dāng)開發(fā)時(shí),可以設(shè)定為true,提高開發(fā)效率,生產(chǎn)環(huán)境中再設(shè)定為false,減輕服務(wù)器負(fù)擔(dān)。