什么是Servlet?
Servlet是一種動態的web開發技術,本質就是一個運行在服務端的Java小程序,負責處理業務邏輯,生成動態web內容。
編寫一個servlet步驟:
1.編寫一個類
繼承HttpServlet
重寫doGet或者doPost方法
(截圖里實現了Servlet接口,其實可以不用實現的)
2.編寫配置文件(web-inf/web.xml)
注冊servlet
綁定路徑
3.訪問
http://主機:端口號/項目名/路徑
例:http://localhost:8080/Servlet/ss (Servlet包下的ss)
接受參數: 格式:key=value
String value=request.getParameter("key")
例如: http://localhost/day09/hello?username=tom
request.getParameter("username")就可以獲取tom值
回寫內容:
response
response.getWriter().print("success");
處理響應數據中文亂碼:
resp.setContentType("text/html;charset=utf-8"); //建議大家放在方法中的第一行
Servlet的體系結構
Servlet(接口)
↓
GenericServlet(抽象類)
↓
HttpServlet(抽象類)
↓
自定義Servlet
servlet常用方法:
void init(ServletConfig config):初始化
void service(ServletRequest request,ServletResponse response):服務 處理業務邏輯
void destroy():銷毀
ServletConfig getServletConfig() :獲取當前servlet的配置對象
GenericServlet常用方法:
除了service方法沒有實現,其他都實現了
空參的init();方法,是專門留給開發者重寫的方法。在init(ServletConfig config)中會調用init();但是,開發者千萬不要重寫帶有參數的這個init方法。
HttpServlet常用方法:
對service方法進行了實現,把Service的參數做了強轉,並調用了重載的Service();方法,重載的service方法根據請求方式的不同調用相應doXxx()方法(doGet和doPost方法)
Servlet的生命周期
Servlet是單實例,多線程的。默認第一次訪問的時候,服務器創建Servlet,並調用init方法實現初始化操作(init只會執行一次,所以是單實例),並調用一次service方法。
每當請求來的時候,服務器創建一個線程,調用service方法執行自己的業務邏輯。
當servlet被移除的時候,或者服務器正常關閉的時候,服務器調用servlet的destory方法進行銷毀操作。
正常關閉:
右鍵:
非正常關閉:
url-pattern的配置:
方式1:完全匹配 必須以"/"開始 例如: /hello /a/b/c
方式2:目錄匹配 必須"/"開始 以"*"結束 例如: /a/* /*
方式3:后綴名匹配 以"*"開始 以字符結尾 例如: *.jsp *.do *.action
優先級:
完全匹配>目錄匹配>后綴名匹配
總而言之:就是優先加載url-pattern比較詳細的路徑。
在Servlet標簽中有一個子標簽,Load-on-start-up,作用:用來修改servlet的初始化時機,取值:正整數 值越大優先級越低。
當我們的配置文件里面沒有指定配置的話,會查找tomcat的web.xml,
若請求我們自己的項目處理不了,tomcat的默認的servlet會幫我們處理信息(defaultServlet),處理404之類的。
ServletContext上下文(全局管理者)
是一個項目的引用,代表了當前項目。
當項目啟動的時候,服務器為每一個web項目創建一個ServletContext對象。
當項目被移除或者服務器關閉的時候,銷毀ServletContext對象。
ServletContext的作用:
1.獲取全局的初始化參數
2.共享資源(xxxAttribute)
3.獲取文件資源
4.其他操作
獲取servletcontext:
方式1: getServletConfig().getServletContext()
方式2: getServletContext();
常用方法:
1. String getInitParameter(String key):通過名稱獲取指定的參數值
Enumeration getInitParameterNames() :獲取所有的參數名稱
在根標簽下有一個 context-param子標簽 用來存放初始化參數
<context-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </context-param>
2. setAttribute(String key,Object value);//設置值
Object getAttribute(String key);//獲取值
removeAttribute(String key)://移除值
3.
String getRealPath(String path):獲取文件部署到tomcat上的真實路徑(帶tomcat路徑)
運行結果:
InputStream getResourceAsStream(String path):以流的形式返回一個文件
4.
獲取文件的mime類型 大類型/小類型 String getMimeType(String 文件名稱)
ServletContext是java四大域對象之一。
java四大域對象總結 后面會介紹。
獲取文件的路徑: 在沒有ServletContext的情況下,通過類加載器也能獲取文件的路徑:
注意:這里的文件必須放在src目錄下,不然獲取不到。
運行結果: