1.1. servlet簡介
servlet:1、接受瀏覽器發送過來的消息。
2、給瀏覽器返回消息。瀏覽器認識html。可以動態去輸出html
Request:請求。客戶端向服務端發送的信息。
Response:響應。服務器向客戶端放鬆的信息。
通常請求和響應是成對出現的。
作用:servlet 編寫一個程序生成網頁。
瀏覽器請求—servlet,servlet會生產html。把html傳送給瀏覽器(響應)。瀏覽器看到內容是html
sun公司提供過的servlet的api在javaEE的規範中。如果要使用servlet需要使用javaEE的api。(javeEE包)
javaEE相關的包,(myeclipse自帶。當新建一個web工程的時候,myeclipse會自動的把javaEE包導入工程中。)
注意:javaEE的api並不在jdk中。
1.2. servlet快速入門
1.2.1. 編寫servlet
寫servlet做兩件事
1、實現servlet接口。 由sun公司定義的一個接口。(定義一個規範)
2、把類部署到web服務器中(tomcat)。
sun公司定義一個servlet的規範。定義了servlet應該有哪些方法,以及方法需要的參數。
1、實現servlet接口(javax.servlet.Servlet)
public class Hello implements Servlet{} 實現servlet接口
實現接口的所有方法
public void service(ServletRequest requestred, ServletResponse responsered)
throws ServletException, IOException {
}
public void destroy() {
}
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
public void init(ServletConfig arg0) throws ServletException {
}
2、重寫service方法
public void service(ServletRequest requestred, ServletResponse responsered)
throws ServletException, IOException {
System.out.println(“第次請求都會響應");
}
當瀏覽器輸入地址,訪問servlet的時候,servlet會執行servcie方法。
3、在WebRoot/WEB-INF/web.xml中配置servlet的路徑 。瀏覽器訪問servlet的路徑
web.xml(新建web工程的時候,myeclipse自動創建出來的)的位置:
在web.xml的根標籤下,直接書寫如下內日。
4、把項目部署到tomcat中,去啟動tomcat。在地址欄中輸入信息,訪問servlet
1.2.2. 訪問servlet
瀏覽器地址欄中輸入:http://localhost:8080/day09/hello
訪問過程分析:
1.2.3. servlet入門小結
1、快速創建一個serlvet。
1、創建一個類,去實現java.servlet.Serlvet 這個接口
2、重寫類中 service方法
3、在web-inf/web.xml 中去配置serlvet一些信息
2、Servlet的訪問過程?
3、Servlet的api在那裡?javaEE的包裡面。
myeclipse在創建web工程的時候會自帶上。
tomcat的lib目錄中也包含了javaEE的包
1.3. servlet生命週期
servlet的生命週期。
什麼時候創建一個servlet。
什麼時候去銷燬一個servlet。
init方法:當服務器創建一個serlvet的時候,會去調用init方法。
當我們第一次去訪問一個servlet的時候,會去創建這個servlet對象。並且只會創建一次。
如果配置了load-on-startup 表示服務器啟動的時候創建servlet。
service方法:客戶端每一次請求,tomcat都會去調用servcie方法。處理用戶的請求。並且給其響應。
每一次請求都會調用servcie方法。
destroy 方法:當服務器銷燬一個servlet的時候,會調用裡面的destory方法。
當我們的web服務器,正常關閉的時候,會去調用destroy方法。
否則不會調用destroy的方法。
1.4. 快速創建一個servlet---掌握
知道:1、自己去定義的servlet 只需要繼承HttpServlet 就可以實現 servlet的接口了。
2、以後處理用戶的請求,都寫在doGet或者doPost方法中。
掌握:
1、如何藉助工具創建servlet
2、以後書寫的代碼 書寫在使用doGet 或者doPost 中。
步驟:new---servlet
我們自動創建創建的servlet 是繼承 httpServlet
GenericServlet 實現了。servlet的接口。
所以安裝工具類創建的servlet ,也是實現了servlet的接口
GenericServlet 已經對一些servlet中定義方法進行了實現。
HttpServlet 是GenericServlet的子類。針對http協議的 包含了一些協議相關的內容的servlet。
我們在通過工具去創建的servlet中,要重寫的方法是doGet,doPost . ( post,get提交數據的方式,是http協議中的。)
獲取http請求的方式。post 和get
因為httpServlet中, service方法回去調用doGet或者doPost. 可以根據不同的請求方法,進行不同的處理。
1.5. 去除servlet模板:
找到myeclipse的按裝路徑,common搜plugins下面的com.genuitec.eclipse.wizards,用解壓工具打開找到templates/servlet.java
注意:一定要先關閉myeclipse,再進行修改
1.6. url-pattern三種配置
url-pattern 配置servlet的訪問路徑。
1、完全路徑匹配,以”/”開頭 後面是具體的路徑信息。
你輸入什麼內容。訪問的時候,就需要輸入什麼內容,才可以找到對應的servlet
例如
在訪問的時候 http://ip:端口/應用名/hello 才可以找到hello的servlet
2、目錄匹配,以/*結尾
例如 /abc/* ---這這個url-patten 對應的servlet
在訪問的時候只有/abc/xx /abc/dd /abc/cc
http://ip:端口/abc/abx
http://ip:端口/abc/bdsf
/abc/ssss
/abc/fdsafd/asdf/asdf
3、擴展名匹配 *.擴展名
*.do
*.action
當訪問的時候 輸入a.do b.do
/ddd/asdf/a.do
訪問的時候aa.do
/abc/a.do
在url進行匹配的時候,會尋找更具體的進行匹配
1.7. web中的資源路徑
告訴大家:如何去訪問一個web中的資源。
web資源路徑訪問的問題;
1、部署工程文件的位置
WebRoot 下所有資源全部發布到服務器webapps 目錄應用名下 所有靜態頁面放在WebRoot 下或者 WebRoot 子目錄
項目部署的時候,會把工程中的WebRoot這個文件夾拷貝到tomcat的webapps目錄下。把WebRoot文件夾的名字修改成項目的目錄名字;
考慮問題:
在webroot外面去創建了一個html a.html
此時a.html 不能被訪問的。 因為項目部署的時候,至部署了。webRoot 裡面的內容。
以後我們把html文件,css。js都放到webRoot 下
在瀏覽器中,如何去訪問一個html內容。
http://localhost:8080/day09/直接書寫html文件的路徑,相對與WEBROOT這個文件夾路徑
例如b.html 和c.html的訪問路徑可以是:
http://localhost:8080/day09/b.html
http://localhost:8080/day09/html/c.html
關於servlet 。在web.xml中進行配置servlet路徑 url-pattern . 相當於servlet的訪問路徑
之前的內容:http://localhost:8080/day09/url-pattern
例如我們在web.xml中配置了
訪問的時候,可以書寫:http://localhost:8080/day09/login
2: 源碼 servlet 全部在src ---> 映射 WEB-INF / classes 目錄下!!
src存放的java源文件。
把java文件進行編譯,編譯好的classes放到到WEB-INF/classes。
項目中的資源訪問的路徑的問題
瀏覽器輸入什麼樣的路徑信息,才可以找到對應的資源。
1.7.1. 如果有一個表單。表單的內容提交到servlet中,怎麼去書寫路徑
在html的頁面 。書寫 / 表示的內容 http://localhost:8080
1.7.2. 相對路徑
相對路徑的寫法
hello 統一個文件夾下
./hello 統一個文件夾下
../ 表示上一層目錄
使用相對路徑的時候,需要進行路徑的比對
例如在
http://localhost:8080/day09/hello.html
http://localhost:8080/day09/login
那麼在hello.html 這個頁面,可以理解為 hello.html 和 login 在一個路徑下
1.7.3. 絕對路徑
分為服務器端和客戶端(瀏覽器)
•Web系統中的相對路徑和絕對路徑
–絕對路徑:/hello /myweb/hello
•服務器端和客戶端對於/ 的區別
如果是在服務器端 / 表示的是 http://localhost:8080/day9
客戶端 http://localhost:8080
客戶端關於路徑問題的編程結論
*.html *.jsp 內都使用絕對路徑
*.css 內部使用相對路徑---- 背景圖片
*.js中使用絕對路徑
1.7.4. servletConfig說明
servletConfig 是一個對象。javaee規範中定義的一個對象。要求web服務器(tomcat),創建一個servlet的同時,也要去創建一個servletConfig對象。還要給servlet去使用。
serlvetConfig 是我們servlet 一些的配置信息。如果一個servlet 使用的過程中需要一些參數信息。這些參數信息,可以配置到servletConfig中。 之後servlet去使用。
serlvetConfig對象使用總結:
1、如果servlet需要一些參數。我們可以在servlet這個標籤內去進行配置(web.xml)
2、tomcat去工作:讀取servlet中init-param這個標籤。把裡面的內容封裝到servletConfig對象中。
3、tomcat去工作,調用servlet中init方法。把封裝好的servletConfig對象。傳遞到對應的servlet中。
4、如何去使用:
4.1 需要獲取servletConfig,getServletConfig方法去獲取對象
4.2獲取裡面具體的值。servletConfig.getInitParameter(key);
示例
web.xml
servlet.java
1.7.5. servletContext說明
ServletContext是整個web項目應用程序運行後的代表對象。(代表當前一個項目)可以通過ServletConfig的getServletContext() 的方法得到,然後可以用該對象取得整個應用程序的相關資源或者信息。
統計一個網站的訪問量: (多個不同的servlet 都可以進行訪問)
配置全局的字符集:(所有的serlvet都可以使用)
ServletConfig:一個servlet被實例化後,對任何客戶端在任何時候訪問有效,但僅對本servlet
有效,一個servlet的ServletConfig對象不能被另一個servlet訪問。
ServletContext:對任何servlet,任何人在任何時間都有效,等於是全局的對象。
閱讀更多 野生java工程師 的文章