Servlet细节
修改發(fā)布到tomcat/webapps下面的應(yīng)用名稱:Web Project Settings。
?
修改或刪掉Servlet,web.xml里面相關(guān)的配置不會(huì)與之同步。
?
Servlet的實(shí)現(xiàn)類:
1.GenericServlet:覆寫(xiě)感興趣的方法,一般情況下,只需要覆寫(xiě)service方法。
2.在web開(kāi)發(fā)中,由于使用http協(xié)議,程序員在編寫(xiě)servlet時(shí),一般都是繼承GenericServlet的子類HttpServlet。
在HttpServlet中覆寫(xiě)了service方法,該方法體內(nèi)的代碼會(huì)自動(dòng)判斷用戶的請(qǐng)求方式,如為GET方式,則調(diào)用doGet方法 ,如為post方式,則調(diào)用doPost方法。因此,在開(kāi)發(fā)中,我們完全沒(méi)有必要覆寫(xiě)service方法,直接根據(jù)請(qǐng)求方式覆寫(xiě)對(duì)應(yīng)的doGet和doPost方法即可。
3.HttpServlet在調(diào)用doGet和doPost方法之前(service方法中),會(huì)將ServletRequest和ServletResponse對(duì)象強(qiáng)轉(zhuǎn)成HttpServletRequest和HttpServletResponse。
?
src目錄下面各種類型的文件都會(huì)發(fā)布到WEB-INF目錄下面的classes文件夾下面。
?
Servlet映射
url-pattern用于指定供外界訪問(wèn)的路徑或資源名,"/"表示web應(yīng)用
Servlet映射到的URL中也可以使用*通配符,但是只能有兩種固定的格式:① "*.擴(kuò)展名" ② 以"/"開(kāi)頭并以"/*"結(jié)尾
such as:
<url-pattern>/itcast/*</url-pattern>
<url-pattern>*.do</url-pattern>
注意:
*.do 與 /*這兩種方式不可同時(shí)使用
針對(duì)于滿足多個(gè)條件的訪問(wèn)路徑時(shí),只會(huì)訪問(wèn)一個(gè)Servlet,此時(shí)會(huì)訪問(wèn)路徑最相仿的那個(gè),同時(shí),/*的優(yōu)先級(jí)要高于*.do
?
默認(rèn)的Servlet映射
<url-pattern>/</url-pattern>
?
load-on-startup元素
servlet 元素中配置此元素,會(huì)在web應(yīng)用加載時(shí)實(shí)例化并調(diào)用其init()方法,數(shù)字越小就越先完成初始化,當(dāng)值小于0或者沒(méi)有指定時(shí),表示容器在該servlet被選擇時(shí)才會(huì)去加載。
?
tomcat\conf\web.xml
該服務(wù)器下所有的web應(yīng)用中的web.xml都繼承自此文件
?
http://localhost:8080/day05/a.html
上面的url訪問(wèn)的url在web.xml文件中并沒(méi)有配置
此時(shí)會(huì)去訪問(wèn)缺省的Servlet,在tomcat\conf\web.xml文件中配置了一個(gè)缺省的DefaultServlet,它會(huì)幫我們?nèi)eb應(yīng)用下讀取a.html文件,并打給瀏覽器,如果沒(méi)有發(fā)送404頁(yè)面,也就是說(shuō)通過(guò)IE訪問(wèn)服務(wù)器訪問(wèn)的都是Servlet。
?
Servlet 線程安全問(wèn)題
方法的局部變量不會(huì)有線程安全問(wèn)題!
Servlet 創(chuàng)建之后駐留在內(nèi)存中 所以會(huì)出現(xiàn)線程安全問(wèn)題!
同步的解決方案:對(duì)方法的執(zhí)行過(guò)程進(jìn)行加鎖 synchronized(this) {};
實(shí)現(xiàn)接口的解決方案:實(shí)現(xiàn) SingleThreadModel 接口的 Servlet ,服務(wù)器會(huì)做判斷,當(dāng)有請(qǐng)求過(guò)來(lái),如果 Servlet 對(duì)象忙,服務(wù)器會(huì)再創(chuàng)建一個(gè) Servlet 對(duì)象為用戶提供服務(wù),如果 Servlet 閑置,就直接提供服務(wù),這樣的方式實(shí)際上是回避了線程安全問(wèn)題,單線程訪問(wèn)Servlet,這樣的方式不可取。
轉(zhuǎn)載于:https://www.cnblogs.com/Knuth/archive/2012/04/26/2471675.html
總結(jié)
- 上一篇: TDD--测试驱动开发的核心思想
- 下一篇: [转载]如何在只能力加载的有限元程序里面