1.servlet
1.繼承接口的話,需要實作接口的五個抽象方法,有點麻煩,是以可是采用繼承其子類的方式
1.子類
GenericServlet:實作了除service之外的其他方法(實際就是空實作)
2.孫類
HttpServlet:隻需要重寫裡面的doPost方法和doGet方法就可以了,還給省略了判斷浏覽器請求資料的格式
2.servlet相關配置
其實就注解這個挺好的,但是稍微想一下其他的
1.注解裡面可以寫數組
2.可以省略部分,*是通配符
2.http
http:Hyper Text Transfer Protocol 超文本傳輸協定。
* 特點:
1. 基于TCP/IP的進階協定
2. 預設端口号:80
3. 基于請求/響應模型的:一次請求對應一次響應
4. 無狀态的:每次請求之間互相獨立,不能互動資料
1.請求行:
請求方式 請求url 請求協定/版本
GET /login.html HTTP/1.1
* 請求方式:
* HTTP協定有7中請求方式,常用的有2種
* GET:
1. 請求參數在請求行中,在url後。
2. 請求的url長度有限制的
3. 不太安全
* POST:
1. 請求參數在請求體中
2. 請求的url長度沒有限制的
3. 相對安全
2.請求頭:
1. User-Agent:浏覽器告訴伺服器,我通路你使用的浏覽器版本資訊
* 可以在伺服器端擷取該頭的資訊,解決浏覽器的相容性問題
2. Referer:http://localhost/login.html
* 告訴伺服器,我(目前請求)從哪裡來?
* 作用:
1. 防盜鍊:
2. 統計工作:
3.請求空行:
用來分隔請求頭與請求體的;
4.請求體:
3.request
1.擷取請求消息資料
1.請求行:GET /day14/demo1?name=zhangsan HTTP/1.1
1.GET方法
* GET /day14/demo1?name=zhangsan HTTP/1.1
* 方法:
1. 擷取請求方式 :GET
* String getMethod()
2. (*)擷取虛拟目錄:/day14
* String getContextPath()
3. 擷取Servlet路徑: /demo1
* String getServletPath()
4. 擷取get方式請求參數:name=zhangsan
* String getQueryString()
5. (*)擷取請求URI:/day14/demo1
* String getRequestURI(): /day14/demo1
* StringBuffer getRequestURL() :http://localhost/day14/demo1
* URL:統一資源定位符 : http://localhost/day14/demo1 中華人民共和國
* URI:統一資源辨別符 : /day14/demo1 共和國
6. 擷取協定及版本:HTTP/1.1
* String getProtocol()
7. 擷取客戶機的IP位址:
* String getRemoteAddr()
2.請求頭:
getHeader(String name):擷取指定請求頭的浏覽器資訊
user-agent:
referer:
3.請求體:
必須得是post才有請求體,先寫一個post
步驟:
1.擷取流對象
BufferedReader reader
2.從流中擷取資料
2.其他功能
1. 擷取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來擷取請求參數
1. String getParameter(String name):根據參數名稱擷取參數值 username=zs&password=123
2. String[] getParameterValues(String name):根據參數名稱擷取參數值的數組 hobby=xx&hobby=game
3. Enumeration<String> getParameterNames():擷取所有請求的參數名稱
4. Map<String,String[]> getParameterMap():擷取所有參數的map集合
* 中文亂碼問題:
* get方式:tomcat 8 已經将get方式亂碼問題解決了
* post方式:會亂碼
* 解決:在擷取參數前,設定request的編碼request.setCharacterEncoding("utf-8");
2. 請求轉發:一種在伺服器内部的資源跳轉方式
1. 步驟:
1. 通過request對象擷取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response)
2. 特點:
1. 浏覽器位址欄路徑不發生變化
2. 隻能轉發到目前伺服器内部資源中。
3. 轉發是一次請求
3. 共享資料:
* 域對象:一個有作用範圍的對象,可以在範圍内共享資料
* request域:代表一次請求的範圍,一般用于請求轉發的多個資源中共享資料
* 方法:
1. void setAttribute(String name,Object obj):存儲資料
2. Object getAttitude(String name):通過鍵擷取值
3. void removeAttribute(String name):通過鍵移除鍵值對
4. 擷取ServletContext:
* ServletContext getServletContext()
4.案例
使用者登入案例需求:
1.編寫login.html登入頁面
username & password 兩個輸入框
2.使用Druid資料庫連接配接池技術,操作mysql,day14資料庫中user表
3.使用JdbcTemplate技術封裝JDBC
4.登入成功跳轉到SuccessServlet展示:登入成功!使用者名,歡迎您
5.登入失敗跳轉到FailServlet展示:登入失敗,使用者名或密碼錯誤
-------------------
1.導入jar包,配置檔案
2.先在資料庫中寫一個賬号密碼
3.建立一個User類
4.想辦法做一個資料庫連接配接池,就需要一個JDBCUtils
5.建立一個UserDao類,提供login方法
6.終于到了servlet的地方,擷取username和password的資料,然後封裝對象,調用login
案例的話,在/day14/loginServlet中,不粘貼出來了。檔案有點多。
5.總結
好多天沒寫過總結了。今天稍微考慮一下寫一次吧。首先是現在已經開學了。不能再像暑假那樣每天都花這麼多時間學Java了;其次,這兩天生了個病,感覺很難受,學習進度也被拖下來了;3.最後,我感覺最近的學習勁頭下降了很多,在此也隻能希望再接再厲。