JavaWeb09-HTML篇筆記(二)
阿新 • • 發佈:2018-05-21
java1.1 案例一:使用Servlet完成一個用戶登錄的案例.1.1.1 需求:
在網站的首頁上,登錄的鏈接,點擊登錄的鏈接,可以跳轉到登錄的頁面.在登錄的頁面中輸入用戶名和密碼點擊登錄的案例.完成登錄的功能.
1.1.2 分析:1.1.2.1 技術分析:
【HTTP的協議的概述】
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
```
在網站的首頁上,登錄的鏈接,點擊登錄的鏈接,可以跳轉到登錄的頁面.在登錄的頁面中輸入用戶名和密碼點擊登錄的案例.完成登錄的功能.
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..."); } ... } * 配置:
JavaWeb09-HTML篇筆記(二)