servlet 是運行在 Web 服務器(tomcat)中的小型 Java 程序(即:服務器端的小應用程序)
(其實就是一個java類,只不過不用再new了)。servlet 通常通過 HTTP(超文本傳輸協議)接收和響應來自 Web 客戶端的請求
一、實現javax.servlet.Servlet接口
寫一個java類,實現servlet接口
輸入impl 然后alt+/可以自動補齊 。
鼠標放在Servlet上可以自動出現要包含的包名。
下圖鼠標放在1的位置然后選擇2這樣就會出現要實現的方法。
然后如下圖修改web.xml文件
注意:下圖中的1是項目的全路徑,如果你在建web project項目時填的是com.it.servlet那么下面應該填的是com.it.servlet .Demo1 下圖中的2不要忘了/
全路徑復制方法入下圖:(這樣就可以復制出com.it.servlet.Demo1 )
應用部署到服務器(tomcat)
啟動服務器,輸入 http://localhost:8080/day8/demo1
瀏覽器啥都沒有,因為我們啥都沒寫。。。。。原理如下:
執行過程如下:
tomcat接受瀏覽器信息,然后找到相應的web project(day07),然后根據web.xml找到servletDemo1(就是我們寫的類),並實例化servletDemo1。 然后tomcat調用servlet中的init()方法 Service()方法等
二、繼承javax.servet.GenericServlet類
只要重寫service方法就行了——適配器模式
然后輸入下面的程序:(技巧 alt+ / 自動補齊GenericServlet 注意大小寫)
然后鼠標放到servlet_demo2處自動補齊service方法
然后在web.xml下輸入
然后重新部署tomcat
然后在瀏覽器中輸入:
http://localhost:8080/day07/demo2
(就會在myeclipse下框中輸出servletDemo2 )
按住ctrl鍵然后點擊下圖
然后點擊下圖
然后點擊下圖
然后倒入tomcat源碼
下圖,點擊1顯示出來的就是GenericServlet類的所有方法,帶三角號(箭頭2)的是繼承servlet的,不帶三角號(箭頭3)的是自己實現的方法。
三、繼承javax.servlet.http.HttpServlet類
(模板方法設計模式)看源碼可知其實就是多態 【開發中常用】
新建應用程序然后導包
插入Override函數(重寫函數):
在1空白處點擊右鍵,然后選擇Source->Override/Implement Methods...如下圖:
然后如下圖選擇doget()方法 dopost()方法
然后重寫這兩個方法如下圖
在web.xml文件輸入
然后重新加載
瀏覽器中訪問
http://localhost:8080/day07/demo3
就會在 Myeclipse 出現
原理:
Tomcat會創建一個demo3對象,但是demo3是繼承httpservlet類的,而瀏覽器在訪問服務器時,Tomcat會調用service方法,但是httpservlet類里重寫了GenericServlet類的service方法,所以會調用httpservlet類中的service方法,這個方法中調用了doget方法。所以我們要實現doget方法(按住ctrl鍵,然后鼠標點擊相關的類名和函數名可以查找看一下源碼)
Servlet --> GenericServlet --> HttpServlet (繼承HttpServlet)
曾祖父 爺爺 爸爸 孫子
更簡單的創建 【自動生成web.xml 中的內容】
然后就會自動生成惹
輸入http://localhost:8080/day9/servlet/demo4 即可訪問
servet映射細節
在Web.xml添加下圖箭頭1,那么在瀏覽器中輸入:
http://localhost:8080/day9/demo666 訪問的也是demo4中的內容·
web.xml如下圖添加的內容作用:
上圖的箭頭1 *.do 代表任意字符串.do 都能訪問demo4
瀏覽器輸入:
http://localhost:8080/day9/demo.do
上圖的箭頭2 /* 代表任意字符串都能訪問demo4
瀏覽器輸入:
上圖的箭頭3 /action/* 以/action開頭的請求都可以訪問demo4
瀏覽器輸入:
http://localhost:8080/day9/action/dew
匹配規則:
優先級:從高到低
絕對匹配(就是名字完全匹配)--> /開頭匹配 --> 后綴名方式匹配
打開 F:\apache-tomcat-7.0.52\conf 下的web.xml在97行和360行可知只要在瀏覽器中輸入
http://localhost:8080/day9/ 默認打開的資源都是servlet