直接安裝,桌面是沒有東西出來的,打開IE瀏覽器,右鍵勾選全部顯示;欄,點工具http watch professional出現如下界面表示已經安裝好css
用IE瀏覽器打開tomcat首頁html
請求數據包含三個內容:請求行,請求頭,請求體 請求行:Post/Examples/Servlets/RequestParametersExamples/Http/1.1 post 請求方式,以postqu提交數據 /Examples/Servlets/RequestParametersExamples 服務器請求的地址路徑 Http/1.1 協議版本 請求頭: accept 客戶端向服務器表示支持什麼類型的數據 Referer 真正請求的地址路徑 全路徑 Accept-Language 支持語言格式 User-Agent 用戶代理向服務器代表當前來訪的客戶端信息 Content-type 提交的數據類型 form表單數據 Accept-Ecording:gzip,deflate 壓縮算法 Host 主機地址 Content-length 數據長度 Connection:keep-Alive 保持鏈接 Cache-Control 對緩存的操做 請求體:瀏覽器真正發送給服務器的東西 發送的數據實現是key=value,若是存在多個數據那麼使用&
響應解析也包含三個部分:響應行,響應頭,響應體 響應行:Http/1.1 200 ok Http/1.1 協議版本 200 表示狀態碼 200 成功正常處理,獲得數據 403:for bidden 拒絕訪問 404:Not Found 500 服務器異常 ok 對應狀態碼 響應頭: servlet 服務器類型 Tomcat Content-type 提交的數據類型 form表單數據 Content-length 數據長度 Date 通信的日期,響應的時間
1. 請求路徑不一樣: post url後面不跟任何數據 get url地址後面跟上數據 2. 帶上的數據不一樣: post 使用流的方式寫數據 get 在地址欄上跟數據 3. post使用流寫數據因此必定須要Content-length來講明數據長度 4. 安全性: post 使用流的方式寫數據,不在地址欄上,安全性高,通常提交數據到服務器使用post,並且沒有限制數據大小 get 在地址欄後跟數據,不安全,應用於從服務器獲取且客戶端不須要提交數據的時候 ,帶的數據有限:1kb
(服務器可以返回的一切東西均可以看做是web資源) 在http協議當中,規定了請求和響應雙方,客戶端和服務器端,與web相關的資源
有兩種分類java
- 其實就是一個Java程序,運行在咱們的web服務器上,用於接受和響應客戶端的http請求 - 更多的是配合動態資源來作,當靜態資源也須要使用到servlet,只不過是Toomcat裏面已經定義好了一個DefaultServlet
寫一個工程,要有一個服務器web
測試運行servlet算法
新建一個類實現servlet接口瀏覽器
在Java Resources下面的src中新建一個類實現servlet接口實現方法,本次用方法sevice()舉例 緩存
配置Servlet,在WEB-INF下的web.xml中寫如下內容,用意:告訴服務器咱們的應用有這麼些servlettomcat
<!-- 向Tomcat報告,這個應用裏面有這個Servlet,名字叫作HelloServlet,具體的路徑是s20190711.mine.servlet.HelloServlet--> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>s20190711.mine.servlet.HelloServlet</servlet-class> </servlet> <!-- 註冊Servlet映射, servlet-name:找到上面註冊的具體的servlet, url-pattern:在地址欄上的path,注意以/開頭不然報錯 --> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/a</url-pattern> </servlet-mapping>
從新將工程右鍵發送到servlet,在地址欄上輸入http://localhost:8080/項目名稱/a ,查看console結果以下圖表示成功 安全
問題記錄:建立web工程下的web-inf中沒有web.xml,緣由建立的過程當中一鍵finish就沒有,若是一直點next會出現建立的同時自動建立web.xml;解決:右鍵工程找到 java EE Tools 中的generate deployment descripter stub點擊,這個時候打開web-inf中就有web.xml服務器
- 找到tomcat應用
- 找到項目
- 找到項目中的web.xml,而後再裏面找到url-pattern有沒有哪個內容是/a
- 找到servlet-mapping中那個servlet-name[HelloServlet]
- 找到上面定義的servlet元素中的servlet-name中的[HelloServlet]
- 找到下面定義的servlet-class而後開始建立類的實例
- 繼而執行該servlet中的service方法
因爲繼承servlet接口要實現的方法太多了,而實際只用一個service方法,所以能夠看看servlet下面的實現類,httpservlet
定義一個類繼承httpservlet,(這裏能夠複寫service方法於運行servlet),
推薦複寫doGet方法和doPost方法
由於父類httpservlet中有service方法且方法中判斷請求是post或者get分別執行dopost、doget,這是servlet的通用寫法 這裏注意若是有出現拋異常能夠去掉方法中的super.doPost(req, resp);和super.doGet(req, resp);
配置Servlet,在WEB-INF下的web.xml中
從新將工程右鍵發送到servlet,在地址欄上輸入http://localhost:8080/HelloServlet/HelloServlet1 ,查看console結果
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 HelloServlet1 extends HttpServlet{ /* * @Override protected void service(HttpServletRequest req, HttpServletResponse * resp) throws ServletException, IOException { super.service(req, resp); } */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); System.out.println("get請求helloservlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); System.out.println("post請求helloservlet"); } }
<servlet> <servlet-name>HelloServlet1</servlet-name> <servlet-class>s20190711.mine.servlet.HelloServlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet1</servlet-name> <url-pattern>/HelloServlet1</url-pattern> </servlet-mapping>
從建立到銷燬的一段時間
從建立到銷燬,所調用的那些方法。
是指,熊對象的建立到銷燬必定會執行的方法,doget和dopost不是生命週期方法
init方法
在建立該servlet的實例就執行該方法init()初始化,默認狀況下是初次訪問servlet時就建立實例,init方法只會執行一次
service方法
只要客戶端來請求就會執行service方法,service()方法能夠被執行不少次,一次請求對應一次service的調用
destroy方法
servlet銷燬的時候執行destroy方法: 1. 該項目從tomcat中移除 2. 正常關閉服務器 tomcat-bin-shutdown
由於初次訪問可能會在init方法中停留過久時間,能夠將初始化時間提早
因此在配置web.xml中servlet元素下再加一句,這裏的數字越小初始化越早,通常不寫負數從2開始,發佈到servlet的時候就會提早調用init方法而不是訪問的時候
<load-on startup>2<load-on startup>
ServletConfig 能夠獲取servlet在配置的一些信息
獲得ServletConfig 對象:getServletConfig(),專門用於配置servlet的信息
獲取到的是配置servlet裏面的servlet-name的文本內容:getservletname
能夠獲取具體的某一個參數:getInitParameter()
//1. 獲得servlet配置對象 專門用於在配置servlet的信息 ServletConfig config = getServletConfig(); //獲取到的是配置servlet裏面servlet-name 的文本內容 String servletName = config.getServletName(); System.out.println("servletName="+servletName); //二、。 能夠獲取具體的某一個參數。 String address = config.getInitParameter("address"); System.out.println("address="+address); //3.獲取全部的參數名稱 Enumeration<String> names = config.getInitParameterNames(); //遍歷取出全部的參數名稱 while (names.hasMoreElements()) { String key = (String) names.nextElement(); String value = config.getInitParameter(key); System.out.println("key==="+key + " value="+value); }
將來咱們本身開發一些應用,使用到了一些技術或者一些代碼。可是有人寫出來;了,他的diamagnetic放置在本身的servlet類裏面
恰好這個servlet裏面須要一個數字或者叫作變量值,可是這個值不能是固定的,因此要求使用到這個servlet的公司在註冊這個servlet的時候,必需要在web.xml裏面聲明 init-params
總結:
Http協議
1. 使用httpwatch抓包看一看http請求背後的細節 2. 基本瞭解 請求和響應的數據內容 請求行、請求頭、請求體 響應行、響應頭、響應體 3. get和post區別
Servlet
會使用簡單的servlet 寫一個類實現接口servlet 配置servlet 訪問servlet servlet生命週期 init 一次 建立對象,默認初次訪問胡總和經過配置提早 service 屢次,一次請求對應一次service destroy 一次 銷燬的時候 從服務器移除或者正常關閉 ServletConfig 獲取配置的信息,params