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