整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaWeb編程之Servlet

          JavaWeb編程之Servlet

          ervlet 簡介

          Servlet 是運行在Web服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。

          使用 Servlet,可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的記錄,還可以動態創建網頁。

          Servlet 架構

          Servlet 生命周期

          Servlet 生命周期可被定義為從創建直到毀滅的整個過程。以下是 Servlet 遵循的過程:

          1. Servlet 初始化后調用 init () 方法。
          2. Servlet 調用 service() 方法來處理客戶端的請求。
          3. Servlet 銷毀前調用 destroy() 方法。
          4. 最后,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。

          init() 方法

          init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在后續每次用戶請求時不再調用。因此,它是用于一次性初始化。

          Servlet 創建于用戶第一次調用對應于該 Servlet 的 URL 時,但是也可以指定 Servlet 在服務器第一次啟動時被加載。

          當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。

          init 方法的定義如下:

          public void init() throws ServletException {

          // 初始化代碼...

          }

          service() 方法

          Service()方法的定義如下:

          public void service(ServletRequest request,ServletResponse response)

          throws ServletException, IOException{}

          service()方法是執行實際任務的主要方法。Servlet 容器調用 service() 方法來處理來自客戶端的請求,并把格式化的響應寫回給客戶端。

          每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程并調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。所以,不用對 service() 方法做任何動作,只需要根據來自客戶端的請求類型來重寫 doGet() 或 doPost() 即可。

          doGet() 方法

          GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。

          public void doGet(HttpServletRequest request,HttpServletResponse response)

          throws ServletException, IOException {

          // Servlet 代碼

          }

          doPost() 方法

          POST 請求來自于一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。

          public void doPost(HttpServletRequest request,HttpServletResponse response)

          throws ServletException, IOException {

          // Servlet 代碼

          }

          destroy() 方法

          destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。destroy() 方法可以釋放鏈接、清除緩存、。

          在調用 destroy() 方法之后,servlet 對象被標記為垃圾回收。

          destroy 方法定義如下所示:

          public void destroy() {

          // 終止化代碼...

          }

          Servlet 客戶端 HTTP 請求

          1. 請求頭重要信息

          頭信息

          描述

          Accept

          這個頭信息指定瀏覽器或其他客戶端可以處理的 MIME 類型。值 image/png 或 image/jpeg 是最常見的兩種可能值。

          Accept-Charset

          這個頭信息指定瀏覽器可以用來顯示信息的字符集。例如 ISO-8859-1。

          Accept-Encoding

          這個頭信息指定瀏覽器知道如何處理的編碼類型。值 gzip 或 compress 是最常見的兩種可能值。

          Accept-Language

          這個頭信息指定客戶端的首選語言,在這種情況下,Servlet 會產生多種語言的結果。例如,en、en-us、ru 等。

          Authorization

          這個頭信息用于客戶端在訪問受密碼保護的網頁時識別自己的身份。

          Connection

          這個頭信息指示客戶端是否可以處理持久 HTTP 連接。持久連接允許客戶端或其他瀏覽器通過單個請求來檢索多個文件。值 Keep-Alive 意味著使用了持續連接。

          Content-Length

          這個頭信息只適用于 POST 請求,并給出 POST 數據的大小(以字節為單位)。

          Cookie

          這個頭信息把之前發送到瀏覽器的 cookies 返回到服務器。

          Host

          這個頭信息指定原始的 URL 中的主機和端口。

          If-Modified-Since

          這個頭信息表示只有當頁面在指定的日期后已更改時,客戶端想要的頁面。如果沒有新的結果可以使用,服務器會發送一個 304 代碼,表示 Not Modified 頭信息。

          If-Unmodified-Since

          這個頭信息是 If-Modified-Since 的對立面,它指定只有當文檔早于指定日期時,操作才會成功。

          Referer

          這個頭信息指示所指向的 Web 頁的 URL。例如,如果您在網頁 1,點擊一個鏈接到網頁 2,當瀏覽器請求網頁 2 時,網頁 1 的 URL 就會包含在 Referer 頭信息中。

          User-Agent

          這個頭信息識別發出請求的瀏覽器或其他客戶端,并可以向不同類型的瀏覽器返回不同的內容。

          1. 讀取 HTTP 頭的方法

          通過 HttpServletRequest 對象獲取相應方法。

          序號

          方法 & 描述

          1

          Cookie[] getCookies()
          返回一個數組,包含客戶端發送該請求的所有的 Cookie 對象。

          2

          Enumeration getAttributeNames()
          返回一個枚舉,包含提供給該請求可用的屬性名稱。

          3

          Enumeration getHeaderNames()
          返回一個枚舉,包含在該請求中包含的所有的頭名。

          4

          Enumeration getParameterNames()
          返回一個 String 對象的枚舉,包含在該請求中包含的參數的名稱。

          5

          HttpSession getSession()
          返回與該請求關聯的當前 session 會話,或者如果請求沒有 session 會話,則創建一個。

          6

          HttpSession getSession(boolean create)
          返回與該請求關聯的當前 HttpSession,或者如果沒有當前會話,且創建是真的,則返回一個新的 session 會話。

          7

          Locale getLocale()
          基于 Accept-Language 頭,返回客戶端接受內容的首選的區域設置。

          8

          Object getAttribute(String name)
          以對象形式返回已命名屬性的值,如果沒有給定名稱的屬性存在,則返回 null。

          9

          ServletInputStream getInputStream()
          使用 ServletInputStream,以二進制數據形式檢索請求的主體。

          10

          String getAuthType()
          返回用于保護 Servlet 的身份驗證方案的名稱,例如,"BASIC" 或 "SSL",如果JSP沒有受到保護則返回 null。

          11

          String getCharacterEncoding()
          返回請求主體中使用的字符編碼的名稱。

          12

          String getContentType()
          返回請求主體的 MIME 類型,如果不知道類型則返回 null。

          13

          String getContextPath()
          返回指示請求上下文的請求 URI 部分。

          14

          String getHeader(String name)
          以字符串形式返回指定的請求頭的值。

          15

          String getMethod()
          返回請求的 HTTP 方法的名稱,例如,GET、POST 或 PUT。

          16

          String getParameter(String name)
          以字符串形式返回請求參數的值,或者如果參數不存在則返回 null。

          17

          String getPathInfo()
          當請求發出時,返回與客戶端發送的 URL 相關的任何額外的路徑信息。

          18

          String getProtocol()
          返回請求協議的名稱和版本。

          19

          String getQueryString()
          返回包含在路徑后的請求 URL 中的查詢字符串。

          20

          String getRemoteAddr()
          返回發送請求的客戶端的互聯網協議(IP)地址。

          21

          String getRemoteHost()
          返回發送請求的客戶端的完全限定名稱。

          22

          String getRemoteUser()
          如果用戶已通過身份驗證,則返回發出請求的登錄用戶,或者如果用戶未通過身份驗證,則返回 null。

          23

          String getRequestURI()
          從協議名稱直到 HTTP 請求的第一行的查詢字符串中,返回該請求的 URL 的一部分。

          24

          String getRequestedSessionId()
          返回由客戶端指定的 session 會話 ID。

          25

          String getServletPath()
          返回調用 JSP 的請求的 URL 的一部分。

          26

          String[] getParameterValues(String name)
          返回一個字符串對象的數組,包含所有給定的請求參數的值,如果參數不存在則返回 null。

          27

          boolean isSecure()
          返回一個布爾值,指示請求是否使用安全通道,如 HTTPS。

          28

          int getContentLength()
          以字節為單位返回請求主體的長度,并提供輸入流,或者如果長度未知則返回 -1。

          29

          int getIntHeader(String name)
          返回指定的請求頭的值為一個 int 值。

          30

          int getServerPort()
          返回接收到這個請求的端口號。

          31

          int getParameterMap()
          將參數封裝成 Map 類型。

          Servlet 服務器 HTTP 響應

          1. 響應信息描述

          頭信息

          描述

          Allow

          這個頭信息指定服務器支持的請求方法(GET、POST 等)。

          Cache-Control

          這個頭信息指定響應文檔在何種情況下可以安全地緩存。可能的值有:public、private 或 no-cache 等。Public 意味著文檔是可緩存,Private 意味著文檔是單個用戶私用文檔,且只能存儲在私有(非共享)緩存中,no-cache 意味著文檔不應被緩存。

          Connection

          這個頭信息指示瀏覽器是否使用持久 HTTP 連接。值 close 指示瀏覽器不使用持久 HTTP 連接,值 keep-alive 意味著使用持久連接。

          Content-Disposition

          這個頭信息可以讓您請求瀏覽器要求用戶以給定名稱的文件把響應保存到磁盤。

          Content-Encoding

          在傳輸過程中,這個頭信息指定頁面的編碼方式。

          Content-Language

          這個頭信息表示文檔編寫所使用的語言。例如,en、en-us、ru 等。

          Content-Length

          這個頭信息指示響應中的字節數。只有當瀏覽器使用持久(keep-alive)HTTP 連接時才需要這些信息。

          Content-Type

          這個頭信息提供了響應文檔的 MIME(Multipurpose Internet Mail Extension)類型。

          Expires

          這個頭信息指定內容過期的時間,在這之后內容不再被緩存。

          Last-Modified

          這個頭信息指示文檔的最后修改時間。然后,客戶端可以緩存文件,并在以后的請求中通過 If-Modified-Since 請求頭信息提供一個日期。

          Location

          這個頭信息應被包含在所有的帶有狀態碼的響應中。在 300s 內,這會通知瀏覽器文檔的地址。瀏覽器會自動重新連接到這個位置,并獲取新的文檔。

          Refresh

          這個頭信息指定瀏覽器應該如何盡快請求更新的頁面。您可以指定頁面刷新的秒數。

          Retry-After

          這個頭信息可以與 503(Service Unavailable 服務不可用)響應配合使用,這會告訴客戶端多久就可以重復它的請求。

          Set-Cookie

          這個頭信息指定一個與頁面關聯的 cookie。

          1. 設置 HTTP 響應報頭的方法

          通過 HttpServletResponse 對象獲取。

          序號

          方法 & 描述

          1

          String encodeRedirectURL(String url)
          為 sendRedirect 方法中使用的指定的 URL 進行編碼,或者如果編碼不是必需的,則返回 URL 未改變。

          2

          String encodeURL(String url)
          對包含 session 會話 ID 的指定 URL 進行編碼,或者如果編碼不是必需的,則返回 URL 未改變。

          3

          boolean containsHeader(String name)
          返回一個布爾值,指示是否已經設置已命名的響應報頭。

          4

          boolean isCommitted()
          返回一個布爾值,指示響應是否已經提交。

          5

          void addCookie(Cookie cookie)
          把指定的 cookie 添加到響應。

          6

          void addDateHeader(String name, long date)
          添加一個帶有給定的名稱和日期值的響應報頭。

          7

          void addHeader(String name, String value)
          添加一個帶有給定的名稱和值的響應報頭。

          8

          void addIntHeader(String name, int value)
          添加一個帶有給定的名稱和整數值的響應報頭。

          9

          void flushBuffer()
          強制任何在緩沖區中的內容被寫入到客戶端。

          10

          void reset()
          清除緩沖區中存在的任何數據,包括狀態碼和頭。

          11

          void resetBuffer()
          清除響應中基礎緩沖區的內容,不清除狀態碼和頭。

          12

          void sendError(int sc)
          使用指定的狀態碼發送錯誤響應到客戶端,并清除緩沖區。

          13

          void sendError(int sc, String msg)
          使用指定的狀態發送錯誤響應到客戶端。

          14

          void sendRedirect(String location)
          使用指定的重定向位置 URL 發送臨時重定向響應到客戶端。

          15

          void setBufferSize(int size)
          為響應主體設置首選的緩沖區大小。

          16

          void setCharacterEncoding(String charset)
          設置被發送到客戶端的響應的字符編碼(MIME 字符集)例如,UTF-8。

          17

          void setContentLength(int len)
          設置在 HTTP Servlet 響應中的內容主體的長度,該方法設置 HTTP Content-Length 頭。

          18

          void setContentType(String type)
          如果響應還未被提交,設置被發送到客戶端的響應的內容類型。

          19

          void setDateHeader(String name, long date)
          設置一個帶有給定的名稱和日期值的響應報頭。

          20

          void setHeader(String name, String value)
          設置一個帶有給定的名稱和值的響應報頭。

          21

          void setIntHeader(String name, int value)
          設置一個帶有給定的名稱和整數值的響應報頭。

          22

          void setLocale(Locale loc)
          如果響應還未被提交,設置響應的區域。

          23

          void setStatus(int sc)
          為該響應設置狀態碼。

          狀態碼

          1. 狀態碼描述

          代碼

          消息

          描述

          100

          Continue

          只有請求的一部分已經被服務器接收,但只要它沒有被拒絕,客戶端應繼續該請求。

          101

          Switching Protocols

          服務器切換協議。

          200

          OK

          請求成功。

          201

          Created

          該請求是完整的,并創建一個新的資源。

          202

          Accepted

          該請求被接受處理,但是該處理是不完整的。

          203

          Non-authoritative Information


          204

          No Content


          205

          Reset Content


          206

          Partial Content


          300

          Multiple Choices

          鏈接列表。用戶可以選擇一個鏈接,進入到該位置。最多五個地址。

          301

          Moved Permanently

          所請求的頁面已經轉移到一個新的 URL。

          302

          Found

          所請求的頁面已經臨時轉移到一個新的 URL。

          303

          See Other

          所請求的頁面可以在另一個不同的 URL 下被找到。

          304

          Not Modified


          305

          Use Proxy


          306

          Unused

          在以前的版本中使用該代碼。現在已不再使用它,但代碼仍被保留。

          307

          Temporary Redirect

          所請求的頁面已經臨時轉移到一個新的 URL。

          400

          Bad Request

          服務器不理解請求。

          401

          Unauthorized

          所請求的頁面需要用戶名和密碼。

          402

          Payment Required

          您還不能使用該代碼。

          403

          Forbidden

          禁止訪問所請求的頁面。

          404

          Not Found

          服務器無法找到所請求的頁面。.

          405

          Method Not Allowed

          在請求中指定的方法是不允許的。

          406

          Not Acceptable

          服務器只生成一個不被客戶端接受的響應。

          407

          Proxy Authentication Required

          在請求送達之前,您必須使用代理服務器的驗證。

          408

          Request Timeout

          請求需要的時間比服務器能夠等待的時間長,超時。

          409

          Conflict

          請求因為沖突無法完成。

          410

          Gone

          所請求的頁面不再可用。

          411

          Length Required

          "Content-Length" 未定義。服務器無法處理客戶端發送的不帶 Content-Length 的請求信息。

          412

          Precondition Failed

          請求中給出的先決條件被服務器評估為 false。

          413

          Request Entity Too Large

          服務器不接受該請求,因為請求實體過大。

          414

          Request-url Too Long

          服務器不接受該請求,因為 URL 太長。當您轉換一個 "post" 請求為一個帶有長的查詢信息的 "get" 請求時發生。

          415

          Unsupported Media Type

          服務器不接受該請求,因為媒體類型不被支持。

          417

          Expectation Failed


          500

          Internal Server Error

          未完成的請求。服務器遇到了一個意外的情況。

          501

          Not Implemented

          未完成的請求。服務器不支持所需的功能。

          502

          Bad Gateway

          未完成的請求。服務器從上游服務器收到無效響應。

          503

          Service Unavailable

          未完成的請求。服務器暫時超載或死機。

          504

          Gateway Timeout

          網關超時。

          505

          HTTP Version Not Supported

          服務器不支持"HTTP協議"版本。

          1. 設置 HTTP 狀態代碼的方法

          通過 HttpServletResponse 對象獲取。

          序號

          方法 & 描述

          1

          public void setStatus ( int statusCode )
          該方法設置一個任意的狀態碼。setStatus 方法接受一個 int(狀態碼)作為參數。如果您的響應包含了一個特殊的狀態碼和文檔,請確保在使用 PrintWriter 實際返回任何內容之前調用 setStatus。

          2

          public void sendRedirect(String url)
          該方法生成一個 302 響應,連同一個帶有新文檔 URL 的 Location 頭。

          3

          public void sendError(int code, String message)
          該方法發送一個狀態碼(通常為 404),連同一個在 HTML 文檔內部自動格式化并發送到客戶端的短消息。

          期咱們聊到了mvvm模型,這一期咱們來聊一下vue的實例,這個是個很重要的東西,千萬別輕視了,下面開始:

          目標:1 了解實例中的data用法和method用法

          最基本的實例是什么樣子的呢,是這樣的啦:

          • el: 表示要操作的頁面元素, 必填參
          • data: 數據, 可以理解為面向對象中的"屬性",他主要是存儲數據的,當程序運行時,監控頁面傳來的數據,進行修改,啟動時根據他的數據渲染頁面。
          • methods: 方法, 可以理解為面向對象中的"方法",根據方法可以改變屬性的值,從而改變頁面,請求交互,一系列的操作

          這樣理解是不是就很清楚啦?

          為了再詳細解釋一下這個概念,咱們來做一個練習:

          這個練習很經典,就是實現一個加法器,比如左邊兩個輸入框,右邊為結果框,當左邊輸入時點擊等于=號,計算結果:

          目的:鍛煉data和method的理解,下面開始我的表演:


          圖片在這里,該腫么辦呢?那按照步驟來吧!

          1 先創建html文件,命名method.html


          2 完成上文提到的vue三部曲(這個一定要掌握,后面項目要用到)


          3 vue三部曲搞完之后搞頁面,創造三個input框,一個按鈕


          4使用v-model綁定屬性

          5 綁定方法



          這樣就可以算出來啦!

          總結:通過兩個input框綁定數值,這樣當input框輸入值時,通過v-model綁定了值,在等于號加上方法,當輸入值時,點擊等于號,調用方法,這樣雙向綁定的方法會計算出來!

          下一期會講一下組件的用法,這也是很重要的,同時也是為電商項目實戰做準備,歡迎關注!

          . 下列哪一種敘述是正確的(D )

          A. abstract修飾符可修飾字段、方法和類

          B. 抽象方法的body部分必須用一對大括號{ }包住

          C. 聲明抽象方法,大括號可有可無

          D. 聲明抽象方法不可寫出大括號

          2. 如下代碼

           public class Test {
           public int aMethod() {
           static int i=0;
           i++;
           return i;
           }
           public static void main (String args[]) {
           Test test=new Test();
           test.aMethod();
           int j=test.aMethod();
           System.out.println(j);
           }
           }
          

          輸出結果是什么? D

          A. 0

          B. 1

          C. 2

          D. 編譯失敗

          3. 下列哪種說法是正確的( D)

          A. 實例方法可直接調用超類的實例方法

          B. 實例方法可直接調用超類的類方法

          C. 實例方法可直接調用其他類的實例方法

          D. 實例方法可直接調用本類的類方法

          4. 如下代碼:

           class Super {
           public Integer getLenght() { return new Integer(4); }
           }
           
           public class Sub extends Super {
           public Long getLenght() { return new Long(5); }
           public static void main(String[] args) {
           Super sooper=new Super();
           Sub sub=new Sub();
           System.out.println(sooper.getLenght().toString() + "," +
           sub.getLenght().toString() );
           }
           }
          

          輸出是什么? B

          A. 4,4

          B. 4,5

          C. 5,4

          D. 5,5

          5. 在Servlet處理請求的方式為: C

          A.以進程的方式

          B.以程序的方式

          C.以線程的方式

          D.以響應的方式

          6. JDBC中,用于表示數據庫連接的對象是: B

          A.Statement

          B.Connection

          C.DriverManager

          D.PreparedStatement

          7. 用于調用存儲過程的對象是: C

          A.ResultSet

          B.DriverManager

          C.CallableStatemet

          D.PreparedStatement

          8. 按照MVC設計模式,JSP用于實現: B

          A.Model

          B.View

          C.Controller

          D.容器

          9. 下面的語句會產生什么樣的輸出? A

          System.out.println(4&7);

          A.4

          B.5

          C.6

          D.7

          E.0

          10.下面哪個不是JAVA關鍵字 A

          A integer

          B double

          C float

          D default

          11. 在J2EE中屬于Web層的組件有: A

          A.Servlet

          B.EJB

          C.Applet

          D.HTML

          12. 在Servlet的生命周期中,容器只調用一次的方法是: C

          A.service

          B.getServletConfig

          C.init

          D.destroy

          13. 以下關于異常的說法正確的是:D

          A. 一旦出現異常,程序運行就終止了

          B. 如果一個方法申明將拋出某個異常,它就必須真的拋出那個異常

          C. 在catch子句中匹配異常是一種精確匹配

          D. 可能拋出系統異常的方法是不需要申明異常的

          14. 如下代碼:

           public class Foo {
           public static void main(String[] args) {
           try {
           return;
           } finally {
           System.out.println( "Finally" );
           }
           }
           }
          

          輸出結果是什么? A

          A. Finally

          B.編譯失敗

          C. 代碼正常運行但沒有任何輸出.

          D. 運行時拋出異常

          15. jsp指令中isELIgnored="boolean"的意思是(C )

          A.決定是否實現Servler的單線程模式,

          B.決定改頁面是否是一個錯誤處理頁面,

          C.決定是否支持EL表示,

          D.沒有具體的含義。

          16.下列標識符(名字)命名原則中,正確的是( ) D

          A. 類名的首字母小寫

          B. 變量和方法名的首寫字母大寫

          C. 接口名的首寫字母小寫

          D. 常量完全大寫

          17. 對于import java.util包,以下那種說法是錯誤的?C

          A. Vector類屬于java.util包

          B. Vector類放在…/java/util/目錄下

          C. Vector類放在java.util文件中

          D. Vector類是Sun公司的產品

          18. 在一個線程中Sleep(1000)方法,將使得該線程在多少時間后獲得對CPU的控制(假設睡眠過程中不會有其他事件喚醒該線程)?C

          A. 正好1000毫秒

          B. 1000毫秒不到

          C.=>1000毫秒

          D. 不一定

          19. 在WEB-INF目錄下,必須存放的文件為: B

          A.class文件

          B.web.xml

          B.jar文件

          D.html文件

          20. 下面關于垃圾收集的說法正確的是:D

          A. 一旦一個對象成為垃圾,就立刻被收集掉。

          B. 對象空間被收集掉之后,會執行該對象的finalize方法

          C. finalize方法和C++的析構函數是完全一回事情

          D. 一個對象成為垃圾是因為不再有引用指著它,但是線程并非如此。


          主站蜘蛛池模板: 久久中文字幕一区二区| 亚洲一区爱区精品无码| 无码一区18禁3D| 日韩亚洲AV无码一区二区不卡| 国产伦精品一区二区三区免.费 | 久草新视频一区二区三区| 91精品一区国产高清在线| 亚洲熟女一区二区三区| 午夜DV内射一区二区| 日本伊人精品一区二区三区| 久夜色精品国产一区二区三区| 无码国产精品一区二区免费式芒果| 日韩在线观看一区二区三区| 亚洲一区在线免费观看| 成人一区二区三区视频在线观看 | 内射白浆一区二区在线观看| 久久国产高清一区二区三区 | 午夜性色一区二区三区免费不卡视频 | 亚洲av无码不卡一区二区三区 | 国产精品女同一区二区久久| 中文字幕av无码一区二区三区电影| 国产吧一区在线视频| 影院无码人妻精品一区二区| 精品一区二区AV天堂| 夜色阁亚洲一区二区三区| 亚洲一区二区三区在线视频| 亚洲毛片不卡av在线播放一区| 福利在线一区二区| 国精品无码A区一区二区| 国产乱码一区二区三区| 日本一区二区免费看| 无码人妻一区二区三区精品视频| 亚洲午夜精品一区二区麻豆| 国精产品一区一区三区MBA下载| 一区二区免费视频| 3d动漫精品成人一区二区三| 国产视频一区在线观看| 无码av人妻一区二区三区四区| 亚洲国产精品一区二区久| 日本一区二区视频| 色噜噜一区二区三区|