一、Servlet簡介
1、什麼是Servlet
servlet是運行在服務端的Java小程序,是sun公司提供的一套規範,用來處理客戶端請求、響應給瀏覽器的動態資源
Servlet是Javaweb三大組件之一(Servlet、Filter、Listener),且最重要
2、Servlet的作用
用來處理從客戶端發送過來的請求,並對該請求作出響應
Servlet的任務有:
<1>獲取請求數據
<2>處理請求
<3>完成響應
3、Servlet的入門
<1>準備工作
Servlet規範要求:Servlet程序需要編寫實現類,並在web.xml進行配置
實現類:通常繼承javax.servlet.http.HttpServlet類,並複寫doGet和doPost方法
doGet()方法用於處理get請求
doPost()方法用於處理post請求
配置信息:在web.xml進行配置
<2>編寫步驟
①創建類,繼承HttpServlet,複寫doGet()和doPost()方法
②在web.xml中編寫配置文件
③瀏覽器訪問
在瀏覽器中地址欄輸入:http://localhost:8080/day13/hello
瀏覽器顯示空白頁
控制打印信息
<3>Servlet執行的流程
4、Request接受請求參數
<1>Request接收請求參數的概述
<2>Request接收請求參數入門
編寫步驟
①編寫表單,提供表單字段:username、password、hobby。以post方式提交
②編寫Servlet實現類,使用對應方法獲得請求參數,並處理POST中文亂碼
③編寫Servlet,配置文件
④測試,訪問“http://localhost:8080/day13/02.request.html”,並提交表單,控制檯顯示
⑤servlet訪問過程
5、案例:登錄功能的實現
<1>案例分析
二、Servlet的生命週期
<1>Servlet規範規定,所有的servlet必須實現javax.servlet.Servlet接口
①第一次調用時,將執行初始化方法:init(ServletConfig)
②每一次調用,都將執行service(ServletRequest,ServletResponse)方法
③服務器關閉,或項目移除:destroy()方法
<2>JavaEE規範中提供Servlet接口實現類
①GenericServlet:通用servlet實現,沒有實現service
②HttpServlet:與Http協議有關的實現,實現service方法,完成與http協議有關的操作
request.getMethod() 獲得請求方式(get、post)
如果是get,將調用doGet()
如果是post,將調用doPost()
<3>生命週期就是一個對象從創建到銷燬的過程
Servlet生命週期:servlet從創建到銷燬的過程
①何時創建:用戶第一次訪問Servlet創建Servlet的實例(單實例)
②何時銷燬:當項目從服務器中移除的時候,或者關閉服務器的時候
用戶第一次訪問Servlet的時候,服務器會創建一個Servlet的實例,那麼Servlet中init方法就會執行。
任何一次請求服務器都會創建一個新的線程訪問Servlet中的service的方法,在service方法內部根據請求方式的不同調用doXXX的方法。(get請求調用doGet,post請求調用doPost())當Servlet中服務器移除掉,或者關閉服務器,Servlet的實例就會被銷燬,那麼destroy方法就會執行
三、Servlet的相關配置
1、基本配置
其中url-pattern的配置方式:
1)完全匹配:訪問的資源與配置的資源完全相同時才能訪問到
2)目錄匹配:格式:/虛擬的目錄../* *代表任意
3)擴展名匹配:格式:*.擴展名
注意:第二種與第三種不要混用 /aaa/bbb/*.abcd(錯誤的)
2、服務器啓動時實例化Servlet配置
servlet何時創建:默認第一次訪問時創建
爲什麼是默認?
當在servlet的配置時,加上一個<load-on-startup>配置,servlet對象在服務器啓動時就創建
3、缺省Servlet
可以將url-pattern配置一個/,代表該servlet是缺省的servlet
什麼是缺省的servlet?
當你訪問資源地址所有的servlet都不匹配時,缺省的servlet負責處理
其實,web應用中所有的資源的響應都是servlet負責,包括靜態資源
4、歡迎頁面
四、ServletContext對象
1、什麼是ServletContext對象
ServletContext代表一個web應用的環境(上下文)對象,ServletContext對象內部封裝的是該web 應用的信息,ServletContext對象一個web應用只有一個
2、ServletContext對象的生命週期
創建:該web應用被加載(服務器啓動或發佈web應用(前提,服務器啓動狀態))
銷燬:web應用被加載(服務器關閉,移除該web應用)
3、怎樣獲得ServletContext對象
<1>ServletContext servletContext=config.getServletContext();
<2>ServletContext servletContext=this.getServletContext();
4、ServletContext的作用
<1>獲得web應用全局的初始化參數
web.xml中配置初始化參數
通過context對象獲得參數
<2>獲得web應用中任何資源的絕對路徑
方法:String path=context.getRealPath(相當於該web應用的相對地址)
<3>Servletontext是一個域對象
Servlet域對象的作用範圍:整個web應用(所有的web應用資源都可以隨意向servletcontext域中存 取數據,數據可以共享)
域對象通用的方法:
setAttribute(String name,Object obj); 存放數據
getAttribute(String name); 獲得數據
removeAttribute(String name); 刪除數據
<4>案例:記錄網站的登錄成功的人數
①分析:
②代碼實現
<5>ServletContext讀取Web資源
在實際開發中,有時候可能會需要讀取Web應用中的一些資源文件,比如配置文件,圖片等。爲此,在ServletContext接口中定義了一些讀取Web資源的方法,這些方法是依靠Servlet容器來實現的。Servlet容器根據資源文件名相對於Web應用的路徑,返回關聯資源文件的IO流,資源文件在文件系統的絕對路徑等。
代碼實現
①加載配置文件
②開發者需要獲取的是資源的絕對路徑。接下來,通過使用getRealPath(String path)方法獲取資源 文件的絕對路徑
<6>類加載器讀取文件
<7>Servlet模板
package ${enclosing_package}; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ${primary_type_name} extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello haohao..."); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }