1. 程式人生 > >JavaWeb09-HTML篇筆記(二)

JavaWeb09-HTML篇筆記(二)

java

1.1 案例一:使用Servlet完成一個用戶登錄的案例.1.1.1 需求:
在網站的首頁上,登錄的鏈接,點擊登錄的鏈接,可以跳轉到登錄的頁面.在登錄的頁面中輸入用戶名和密碼點擊登錄的案例.完成登錄的功能.
技術分享圖片
1.1.2 分析:1.1.2.1 技術分析:
【HTTP的協議的概述】

? 協議:
* 什麽是協議:規定雙方需要遵守的規則.
? HTTP協議:
* 什麽是HTTP協議:用來規定瀏覽器與服務器之前需要遵守的規則.
 ![](http://i2.51cto.com/images/blog/201805/21/4e240f07b0bd6b1c9545ff695376ff85.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

? HTTP協議的作用:規範瀏覽器和服務器之間的數據傳遞.
? HTTP協議的特點:
* 基於請求和響應的模型.
    * 必須先有請求後有響應.
    * 請求和響應必須成對出現.
* 默認的端口號是80.
? HTTP協議的版本:
* 1.0   :每次響應後即刻關閉了連接.
* 1.1   :現在使用.不是每次響應後掛斷,等待長時間以後沒有請求會掛斷.

【HTTP協議的演示】

抓包分析:GET方式:
* 請求部分:

GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 59176-10011
Referer: http://localhost:8080/day09/demo1-http/demo1.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost:8080
DNT: 1
Connection: Keep-Alive

抓包分析:POST方式:
POST /day09/demo1-http/demo2.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 59176-10031
Referer: http://localhost:8080/day09/demo1-http/demo1.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 15
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache

name=bbb&age=38

* 響應部分:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"145-1461807615933"
Last-Modified: Thu, 28 Apr 2016 01:40:15 GMT
Content-Type: text/html
Content-Length: 145
Date: Thu, 28 Apr 2016 01:43:52 GMT

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Demo2.html</h1>
</body>
</html>

【HTTP協議的詳解】

? 請求部分
* 請求行
    * 提交方式:
        * 提交方式有很多,常用的GET和POST:
        * GET和POST的區別:
            * GET的提交的參數會顯示到地址欄上,而POST不顯示.
            * GET往往是有大小限制的,而POST沒有大小的限制.
            * GET沒有請求體,而POST有請求體.
    * 提交路徑:
    * 協議版本:
* 請求頭
    * 都是鍵值對的形式顯示的.一般一個key對應一個value,也有個別的是一個key對應多個value.
    * User-Agent    :代表瀏覽器的類型. --- 文件下載:下載中文文件:IE使用URLEncodor進行編碼,而Firefox使用Base64編碼.
    * Referer   :代表的是網頁的來源. --- 防盜鏈.
    * If-Modified-Since :通常與響應中的頭Last-Modified一起使用查找本地緩存.
* 請求體
    * 就是POST提交方式的提交的參數.
? 響應部分
* 響應行:
    * 協議版本
    * 狀態碼   :
        * 200   :成功
        * 302   :重定向
        * 304   :查找本地緩存
        * 404   :資源不存在
        * 500   :服務器內部錯誤
    * 狀態碼描述
* 響應頭:鍵值對,一般一個key對應一個value,也有一個key對應多個value.
    * Last-Modified :與請求中的If-Modified-Since一起使用查找本地緩存.
    * Content-Dispostion    :文件下載的使用使用的一個頭信息.
    * Location  :重定向的跳轉的路徑.
    * Refresh   :定時刷新/定時跳轉.
* 響應體:顯示瀏覽器的頁面的內容.
【Servlet的概述】

? 什麽是Servlet:
* 就是一個運行在WEB服務器上的小的Java程序,用來接收和響應從客戶端發送過來的請求,通常使用HTTP協議.
* Servlet就是SUN公司提供的一個動態網頁開發技術.
? Servlet的作用:
* 用來處理從客戶端瀏覽器發送的請求,並且可以對請求作出響應
? 使用Servlet:
* 編寫一個類實現Servlet接口.
* 將編寫的這個類配置到服務器中.
? Servlet的入門:
* 編寫類:
public class ServletDemo1 implements Servlet{

@Override
/**
 * 為用戶處理請求和響應的方法.
 */
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().println("Hello Servlet...");
}
...
}
* 配置:
``` test1 com.itheima.a_servlet.ServletDemo1 test1 /ServletDemo1 * 訪問: http://localhost:8080/day09/ServletDemo1 【使用ServletRequest接收參數】 ![](http://i2.51cto.com/images/blog/201805/21/be54d20c345f503507a7b200efb6297d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) * String getParameter(String name); ---用於接收一個名稱對應一個值的數據. * String[] getParameterValues(String name);---用於接收一個名稱對應多個值的數據. * Map getParameterMap(); ---用於接收表單中的所有的數據,Map的key是表單提交的參數名稱,Map的value是提交參數的值. * Enumeration getParameterNames() ---用於獲取表單中提交的所有的參數的名稱. 【Servlet的訪問流程】 【Servlet的實現的關系】 Servlet :接口 | GenericServlet :通用的Servlet | HttpServlet :HttpServlet * 編寫一個類繼承HttpServlet,重寫doGet和doPost方法. * 配置 ``` 1.1.3 代碼實現1.1.3.1 步驟一:創建數據庫和表: ``` create database day09; use day09; create table user( id int primary key auto_increment, username varchar(20), password varchar(20), nickname varchar(20) ); insert into user values (null,‘aaa‘,‘111‘,‘小鳳‘); insert into user values (null,‘bbb‘,‘111‘,‘小童童‘); ``` 1.1.3.2 步驟二:創建包和類: 1.1.3.3 步驟三:引入jar包 ``` * mysql的數據庫的驅動包 * c3p0連接池的jar包 * dbutils的包 ``` 1.1.3.4 引入login的頁面 1.1.3.5 編寫Servlet-->Service-->DAO 1.1.4 總結:1.1.4.1 Servlet的生命周期:(*****) ``` ? 生命周期:就是一個對象從創建到銷毀的過程. ? Servlet生命周期:Servlet從創建到銷毀的過程. * 何時創建:用戶第一次訪問Servlet創建Servlet的實例 * 何時銷毀:當項目從服務器中移除的時候,或者關閉服務器的時候. ? 用戶第一次訪問Servlet的時候,服務器會創建一個Servlet的實例,那麽Servlet中init方法就會執行.任何一次請求服務器都會創建一個新的線程訪問Servlet中的service的方法.在service方法內部根據請求的方式的不同調用doXXX的方法.(get請求調用doGet,post請求調用doPost).當Servlet中服務器中移除掉,或者關閉服務器,Servlet的實例就會被銷毀,那麽destroy方法就會執行. ``` 1.1.4.2 Servlet的相關的配置: 【啟動時創建Servlet】 ``` Servlet默認是在第一次訪問的時候創建的.現在讓Servlet在服務器啟動的時候創建好.進行對Servlet的配置: 在web.xml中在標簽中配置: * 2 --- 傳入正整數,整數越小,被創建的優先級就越高. 【url-pattern的配置】 url-pattern配置方式共有三種: 1.完全路徑匹配 :以 / 開始 例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6 2.目錄匹配 :以 / 開始 需要以 * 結束. 例如: /* ,/aaa/* ,/aaa/bbb/* 3.擴展名匹配 :不能以 / 開始 以 * 開始的. 例如: *.do , *.action ***** 錯誤的寫法 : /*.do ``` 有如下的配置: ``` ServletDemo4 com.itheima.a_servlet.ServletDemo4 ServletDemo4 /ServletDemo4 ServletDemo5 com.itheima.a_servlet.ServletDemo5 ServletDemo5 /* ServletDemo6 com.itheima.a_servlet.ServletDemo6 ServletDemo6 *.do 如果訪問地址: http://localhost:8080/day09/ServletDemo4 :第一個 http://localhost:8080/day09/aaa.do :第二個 ***** 完全路徑匹配 > 目錄匹配 > 擴展名匹配 ``` 1.1.4.3 開發中的路徑的編寫: ``` ? 相對路徑:都是需要找位置相對關系.不能以 / 開始的. * ./ 當前路徑 ../上一級目錄 * 使用相對路徑訪問: * http://localhost:8080/day09/demo4-url/demo1.html * http://localhost:8080/day09/ServletDemo6 ? 絕對路徑:不需要找位置相對關系. 以 / 開始的. * 絕對路徑中分為客戶端路徑和服務器端路徑: * 客戶端路徑一定要加工程名. /day09/ServletDemo6 * 服務器端路徑不需要加工程名. /ServletDemo6 ```

JavaWeb09-HTML篇筆記(二)