天天看點

servlet&&http&request

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.最後,我感覺最近的學習勁頭下降了很多,在此也隻能希望再接再厲。

繼續閱讀