麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Tomcatserver.xml配置示例

2019-11-14 14:56:52
字體:
來源:轉載
供稿:網友

幾乎所有容器類型的應用都會包含一個名為 server.xml 的文件結構。基本上,其中的每個元數據或者配置都是容器完成初始化所需要的。正是由于這些內容都是可配置的,使得軟件設計者或架構師可以在容器運行時或銷毀時(停止)的情況下注入需要的服務。明白這一點,其重要性不亞于明白代碼或軟件的工作機制。

對于這篇文章,我們將通過分析 server.xml 文件來理解和配置 appache tomcat 服務器。

準備工作:

  • 安裝 Apache Tomcat 7。(從 apache tomcat 的網站獲取源碼

安裝教程可以點擊這里。

1、Tomcat 安裝目錄

安裝完成 的tomcat,被放在了你的本地存儲中。對于 windows ,通常在 “ PRogram Files ” 文件夾下,對于 Mac 或者 linux,可能在 /user/var/opt 或 /User/<>/application 文件夾下。進入該目錄,可以看到下面這幾個文件和文件夾:

  • bin:Tomcat 二進制啟動腳本。
  • conf:應用于所有 webapp 的全局配置。默認會提供如下配置:
    • catalina.policy 提供特殊的安全策略。
    • 兩個 Properties 文件:catalina.properties 和 logging.properties ,
    • 四個 XML 配置文件:server.xml(Tomcat 主配置文件)、web.xml(web 應用全局部署描述)、context.xml(Tomcat 特殊配置全局選項)和 tomcat-user.xml(授權和訪問控制用戶名,密碼和角色數據庫)。

    每個引擎在conf 目錄下都有一個對應的子目錄,例如Catalina,反過來對于每個 host 都有一個二級子目錄,比如localhost。可以將上下文信息配置放在這里(類似于 context.xml ,但是對于每個在 host 下的 webapp ,該文件命名為 webapp.xml )。

  • lib:確保目錄下的 JAR-file 對于所有 webapp 都有效。默認安裝包括 servlet-api.jar(Servlet),jasper.jar(jsp)和 jasper-el.jar(EL)。外部的 JAR 文件也可以放在這里,如 MySQL JDBC 驅動(mysql-connector-java-5.1.{xx}-bin.jar )和 JSTL(jstl.jar 和 standard.jar)。
  • logs:包括引擎日志文件 Catalina.{yyyy-mm-dd}.log ,host 日志文件 localhost.{yyyy-mm-dd}.log,和其它應用的日志文件,如 manager 和 host-manager。訪問日志(由 accessLogValve 創建)也放在這里。
  • webapps:默認為 appBase – web應用的根目錄。
  • work: contains the translated servlet source files and classes of JSP/JSF. Organized in hierarchy of engine name (Catalina), host name (localhost), webapp name, followed by the Java classes package structure.
  • temp:臨時文件。

2、Tomcat 架構

Tomcat 是一個 HTTP 服務器。也是一個servlet 容器,可以執行 Java Servlet,將 JavaServer Page(JSP)和 JavaServerFaces(JSF)轉換為 Java Servlet。Tomcat 采用了層次化和模塊化的架構,如下:

圖片1.0 Tomcat 架構

3、主配置文件(server.xml)

server.xml

“server.xml” 是 Tomcat 的主配置文件,在 <CATALINA_HOME>conf 目錄下可以看到。重構(刪掉注釋和格式化后)的默認”server.xml“文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
 
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 
    <Engine name="Catalina" defaultHost="localhost">
 
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
 
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

3.1、Server

Server(第二行)是頂級組件,代表一個 Tomcat 實例。可以包含一個或多個 Services ,其中每個 Service 都有自己的 Engines 和 Connectors。

1
<Server port="8005" shutdown="SHUTDOWN"> ...... </Server>

3.1.1、基本屬性

  • className:使用 Java 實現類的名稱。這個類必須實現 org.apache.catalina.Server 接口。如果沒有指定類名,將會使用標準實現。
  • address: server 在這個 TCP/IP 地址上監聽一個 shutdown 命令。如果沒有指定地址,將會使用 localhost。
  • port:server 在這個端口上監聽一個 shutdown 命令。設置為 -1 表示禁用 shutdown 命令。
  • shutdown:連接到指定端口的 TCP/IP 收到這個命令字符后,將會關閉 Tomcat。

3.2、Listeners

Server 可以包含幾個監聽器。一個監聽器監聽指定事件,并對其作出響應。

JasperListener 作用于 Jasper JSP 引擎,該引擎負責對更新后的 JSP 頁面進行重編譯。

1
Listener className="org.apache.catalina.core.JasperListener" />

GlobalResourcesLifecycleListener 作用于全局資源,保證 JNDI 對資源的可達性,比如數據庫。

1
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

3.2.1、基本屬性

  • SSLEngine:使用的SSLEngine名稱。off:不使用 SSL,on:使用 SSL 但不指定引擎。默認值是 on。會初始化本地 SSL 引擎,對于使用 SSLEnabled 屬性的 APR/native connector 來講,該選項必須可用。
  • SSLRandomSeed:指定偽隨機數生成器(PRNG)的隨機數種子源,默認值為 builtin。在開發環境下,可能要將其設置為 /dev/urandom , 以獲得更快地啟動速度。
  • FIPSMode:設置為 on 會請求 OpenSSL 進入 FIPS 模式(如果 OpenSSL 已經處于 FIPS 模式,將會保留該模式)。設置為 enter 會強制 OpenSSL 進入 FIPS 模式(如果 OpenSSL 已經處于 FIPS 模式,將會產生一個錯誤)。設置為 require 要求 OpenSSL 已經處于 FIPS 模式(如果 OpenSSL 當前沒有處于 FIPS 模式將會產生一個錯誤)。

3.3、全局命名資源

9到15行的元素定義了 JNDI(Java 命名和目錄接口)資源,其允許 Java 軟件客戶端通過名稱搜尋和查找數據。

默認配置通過10到14行的元素定義了一個名稱為 UserDatabase 的 JNDI,通過”conf/tomcat-users.xml“得到了一個用于用戶授權的內存數據庫。

1
2
3
4
5
6
7
<GlobalNamingResources>
  <Resource name="UserDatabase" auth="Container"
            type="org.apache.catalina.UserDatabase"
            description="User database that can be updated and saved"
            factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
            pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

你也可以定義其它全局化JNDI資源來實現連接池,比如 MySQL 數據庫。

3.4、Services

一個 Service 可以連接一個或多個 Connectors 到一個引擎。默認配置定義了一個名為“Catalina”的 Service ,連接了兩個 Connectors:HTTP 和 AJP 到當前的引擎。

1
<Service name="Catalina"> ...... </Service>

3.4.1、基本屬性

  • className:該實現使用的 Java 類名稱。這個類必須實現 org.apache.catalina.Service 接口。如果沒有指定類名稱,將會使用標準實現。
  • name:Service 的顯示名稱,如果采用了標準的 Catalina 組件,將會包含日志信息。每個 Service 與某個特定的 Server 關聯的名稱必須是唯一的。

3.5、Connectors

一個 Connector 關聯到一個 TCP 端口,負責處理 Service 與客戶端之間的交互。默認配置定義了兩個 Connectors。

HTTP/1.1:處理 HTTP 請求,使得 Tomcat 成為了一個 HTTP 服務器。客戶端可以通過 Connector 向服務器發送 HTTP 請求,接收服務器端的 HTTP 響應信息。

1
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

與生產服務默認使用80端口不同,Tomcat HTTP 服務默認在 TCP 端口8080上運行 。你可以選擇1024到65535之間的任意數字作為端口號來運行 Tomcat 服務器,前提是該端口沒有被任何其它應用使用。connectionTimeOut 屬性定義了這個 connector 在鏈接獲得同意之后,獲得請求 URI line(請求信息)響應的最大等待時間毫秒數。默認為20秒。redirect 屬性會把 SSL 請求重定向到 TCP 的8443端口。AJP/1.3:Apache JServ Protocol connector 處理 Tomcat 服務器與 Apache HTTP 服務器之間的交互。

1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

可以將 Tomcat 和 Apache HTTP 服務運行在一起,Apache HTTP 服務器處理靜態請求和 php;Tomcat 服務器負責處理 Java Servlet/JSP 。可以參閱“Tomcat 與 Apache 協同工作如何配置”。

3.6、容器

包含了 Engine、Host、Context和 Cluster 的 Tomcat 稱為容器。最高級的是 Engine,最底層的是 Context。某些組件,比如 Realm 和 Valve,也可以放在容器中。

3.7、引擎

引擎是容器中最高級別的部分。可以包含一個或多個 Host。Tomcat 服務器可以配置為運行在多個主機名上,包括虛擬主機。

1
<Engine name="Catalina" defaultHost="localhost"/>

Catalina 引擎 從 HTTP connector 接收 HTTP 請求,并根據請求頭部信息中主機名或 IP 地址重定向到正確的主機上。

3.7.1、基本屬性

  • backgroundProcessorDelay —— 這個值表示了在這個引擎和它的子容器上調用 backgroundProcess 方法之間間隔的秒數,包括所有 host 和 context。值為非負時不會調用子容器(意味著其使用自身的處理線程)。設置為正值會產生一個衍生線程。等待指定的時間之后,該線程會在這個引擎和它的所有子容器上調用 backgroundProcess 方法。如果沒有指定,默認值為10,即會有10秒的延遲。
  • className:實現該引擎使用的 Java 類名。該類必須實現 org.apache.catalina.Engine 接口。如果沒有指定,會使用標準值(下面有定義)。
  • defaultHost:默認主機名,定義了處理指向該服務器的請求所在主機的名稱,但名稱不是在這個文件中配置。
  • jvmRoute:在負載均衡場景下必須定義該參數,來保證 session affinity 可用,對于集群中所有 Tomcat 服務器來講定義的名稱必須是唯一的, 該名稱將會被添加到生成的會話標示符中,因此,允許前端代理總是將特定會話轉發到同一個 Tomcat 實例。
  • name:Engine 的邏輯名稱,用在日志和錯誤信息中。當在相同的 Server 中使用多個 Service 元素時,每個 Engine 必須指定一個唯一的名稱。
  • startStopThreads:Engine 在啟動 Host 子元素時將會并發使用的線程數目。如果設置為0,將會使用 Runtime.getRuntime().availableProcessors() 的值。設置為負數,將會使用  Runtime.getRuntime().availableProcessors() + value 的值,如果結果小于1,將會使用 1 個線程。如果沒有指定,默認值為 1 。

3.8、Realm

一個 Realm(域)就是一個包含 user、passWord 和 role 認證(比如訪問控制)的數據庫。你可以在任何容器中定義 Realm ,例如 Engine、Host、Context 和 Cluster。

1
2
3
<Realm className="org.apache.catalina.realm.LockOutRealm">
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

默認配置定義了一個 Catalina Engine 的 Realm(UserDatabaseRealm),對用戶訪問 engine 的權限進行控制。其使用定義在 GlobalNamingResources 中,名字為 UserDatabase 的 JNDI。

除了 UserDatabaseRealm 以外,還有:JDBCRealm(授權用戶是否可以通過 JDBC 驅動鏈接到關系型數據庫);DataSourceRealm(通過 JNDI 連到數據源);JNDIRealm(連接到一個 LDAP 目錄)和 MemoryRealm (將 XML 文件加載到內存)。

3.8.1、基本屬性

  • className:使用 Java 實現類的名稱。這個類必須實現 org.apache.catalina.Realm 接口。

3.9、Hosts

一個 Host 定義了在 Engine 下的一個虛擬機,反過來其又支持多個 Context(web 應用)。

1
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"/>

默認配置定義了一個名為 localhost 的主機。appBase 屬性定義了所有 webapp 的根目錄,在這種情況下是 webapps。默認情況下,每一個 webapp 的 URL 和它所在的目錄名稱相同。例如,默認的 Tomcat 安裝目錄的 webapps 下提供了四個 web 應用:docs、examples、host-manager 和 manager。只有 ROOT 是個例外,它用一個空字符串定義。也就是說,它的 URL 是  http://localhost:8080/。unpackWARs 屬性指定了放到 webapps 目錄下的 WAR-file 是否應該被解壓。對于 unpackWARs=”false“,Tomcat 將會直接從 WAR-file 運行應用,而不解壓,這可能導致應用運行變慢。autoDeploy 屬性指定了是否自動部署放到 webapps 目錄下的應用。

3.9.1、基本屬性

  • appBase:虛擬機應用的根目錄。該目錄是一個可能包含部署到虛擬機上 web 應用的路徑名。也可能是一個指定的絕對路徑名,或者是一個相對于 $CATALINA_BASE 目錄的路徑名。如果沒有指定,默認會使用 webapps。
  • xmlBase:虛擬機 XML 根目錄。該目錄是一個可能包含部署到虛擬機上context XML 描述符的路徑名。也可能是一個指定的絕對路徑名,或者是一個相對于 $CATALINA_BASE 目錄的路徑名。如果沒有指定,默認會使用 conf/ 目錄。
  • createDirs:如果設置為 true,Tomcat 將會在啟動階段,嘗試創建一個由 appBase 和 xmlBase 屬性定義的目錄。默認值是 true。如果設置為 true ,并且目錄創建失敗,將會打印出一個錯誤信息,但是不會終止啟動過程。
  • autoDeploy:該屬性的值指明了在 Tomcat 運行的時候,是否需要定時檢查新的或者更新后的 web 應用。如果為 true,Tomcat 會定時檢查 appBase 和 xmlBase 目錄,并對找到的新 web 應用和 context XML 描述符進行部署。更新 web 應用 或 XML 上下文描述符將會觸發 web 應用的重載。默認值為 true。
  • backgroundProcessorDelay:表示在調用這臺主機的 backgroundProcess 方法和它的子容器方法,包括所有的 context,之間延遲的秒數。如果延遲值不是負數的話,不會調用子容器(意味著會使用它們自己的處理線程)。設置為正數會產生衍生線程。在等待指定的時間之后,線程將會在該 host 上調用 backgroundProcess 方法,包括它的所有子容器。host將會使用后臺進程執行web 應用部署相關的任務。如果沒有指定,默認值為-1,意味著 host 將會依賴于它的父引擎的后臺處理線程。
  • className:使用的 Java 實現類的名稱。該類必須實現 org.apache.catalina.Host 接口。
  • deployIgnore:一個正則表達式,定義了在自動部署和啟動時部署的情況下需要忽略的目錄。這就允許你在版本控制系統中保持自己的配置,例如,不會將 .svn 或者 CVS 文件夾部署到 appBase 目錄下。該正則表達式是相對于 appBase 的。同時也是固定的,意味著是相對于整個文件或目錄的名稱進行的。因此,foo 只會匹配名稱為 foo 的文件或目錄,而不會匹配foo.war、foobar或者 myfooapp 這樣的名稱。如果想讓“foo”匹配任意名稱,可以使用 .*foo.*。
  • deployOnStartup:指定在 Tomcat 啟動時是否需要自動部署host下的 web 應用。默認值為 true。
  • failCtxIfServletStartFails:設置為 true時,如果它的任意一個 load-on-startup>=0 的 servlet 停止自身啟動后,停止啟動它的每一個子 context 。每一個子 context 可能覆蓋這個屬性。如果沒有指定,將會使用默認值 false。
  • name:通常是虛擬主機的網絡名稱,注冊在你的域名服務器上。無論指定的主機名稱是什么樣的,Tomcat 在內部都會將其轉換為小寫。嵌套在 Engine 內部的 Host ,其中必須有一個 Host 的名稱匹配 Engine 的默認 Host 設置。 
  • startStopThreads:Host 在啟動子 Context 元素時會并發使用的線程數。如果自動部署被使用的話將會使用該線程池部署新的 Context。值為0時將會使用 Runtime.getRuntime().availableProcessors() 的值。值為負數時將會使用 Runtime.getRuntime().availableProcessors() 加上該值得和,而和小于1時將會使用1個線程。如果沒有指定,會使用默認值1。
  • undeployOldVersion:該選項的值決定 Tomcat,即自動部署進程部分,是否會檢查并發部署的過時 web 應用,任何找到的應用都會被移除。只有在 autoDeploy 為 true 的情況下才會生效。如果沒有指定將會使用默認值 false。

3.10、集群

Tomcat 支持服務器集群。它可以復制整個集群的會話和上下文屬性。也可以部署一個 WAR 文件到所有的集群上。

3.10.1、基本屬性

  • className:集群主類,當前只有一個是有效的, org.apache.catalina.ha.tcp.SimpleTcpCluster。
  • channelSendOptions: 組通訊(tribe channel)發送選項,默認為8。該選項被用來標志所有的信息通過 SimpleTcpCluster 發送。該標志指定怎樣發送信息,是一個簡單的邏輯或。
  • channelStartOptions:設置集群使用對象的啟動和停止標志。默認是 Channel.DEFAULT,會啟動所有的 channel 服務,包括發送者、接收者、組播發送者和組播接收者。
  • heartbeatBackgroundEnabled:標志是否在容器的后臺線程中調用 channel 的心跳檢測。默認是 false。當設置為 true 時,不要忘了禁用 channel 心跳檢測線程。
  • notifyLifecycleListenerOnFailure:當所有的 ClusterListener 不能接收 channel 消息時,該標志位決定是否通知 LifecycleListeners。默認是 false。

3.11、Valve

Valve (閥門)作為請求的前置處理程序,可以在請求發送到應用之前攔截 HTTP 請求。可以定義在任何容器中,比如 Engine、Host、Context和 Cluster。默認配置中,AccessLogValve 會攔截 HTTP 請求,并在日志文件中創建一個日志切入點,如下:

1
2
3
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log." suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b" />

3.11.1、基本屬性

  • className:設置為 org.apache.catalina.ha.tcp.ReplicationValve
    • filter —— 對于已知文件擴展名或 url ,可以在請求中使用 Valve 通知 cluster 沒有修改 session,對于本次變化 cluster 沒有必要通知 session 管理者。如果請求匹配該過濾器模型,cluster 會假設 session 沒有發生變化。一個filter 樣例大概是這樣的 filter=“.*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.CSS|.*.txt”。filter 使用  java.util.regex 的正則表達式。
  • primaryIndicator:布爾值。如果為 true,replication valve 將會把 primaryIndicatorName 屬性定義的名稱插入到 request 屬性中。該值無論是 Boolean.TRUE 或者 Boolean.FALSE,都會被放入 request 屬性中。
  • primaryIndicatorName:默認值為 org.apache.catalina.ha.tcp.isPrimarySession,這個值定義了一個 request 屬性的名稱,值是一個布爾值,表示會話所在的服務器是否為主服務器。
  • statistics:布爾值。如果想讓 valve 收集請求的統計數據,設置為 true。默認值為 false

以下是其它一些 valve:

  • RemoteAddrValve:阻截來自特定的 IP 地址的請求。
  • RemoteHostValve:阻截基于主機名稱的請求。
  • RequestDumperValve:記錄了請求的詳細信息。
  • SingleSignOn Valve:當置于a下時,允許單點登錄到該主機下的所有應用上。

更多信息見于 server.xml 文件的頂層和嵌套級別的元素和屬性,可以在這里查看。

4、可選配置(server-<name>.xml)

4.1、包括 server-.xml文件

現在,如果我們想要為應用修改 server.xml 文件該怎么做?不能僅僅因為一個應用修改 server.xml 文件,因為它可能會對所有應用部署的初始化產生影響。對于指定的應用如何隔離指定的變化?

答案就是:創建一個 server-<name>.xml

server-.xml 是一個自定義的文件,包含了對于一個指定 app 需要隔離的配置變化。所有這種格式的文件都會在 server.xml 文件之后被調用。

4.2、使用自定義的 server-<name>.xml 代替 server.xml

不推薦這么做,但如果想滿足下自己好奇心的除外,你可以通過編輯 catalina.bat 文件來使用你自己的 server.xml 作為替代。

1
catalina.bat start -config confserver-<name>.xml

總的來講,無論是 serve.xml 還是你自己的 server-<name>.xml 文件,都是 container 的核心配置。對于應用開發者和發布管理員來講,是一種在部署 J2EE 應用的容器中放入資源文件的補充策略。其它無論以何種方式實現的 J2EE 標準容器(廠商),都有相同的配置文件,允許自定義注入和綁定,同時允許在部署、重新部署和卸載時控制哪些服務是有效的。

前兩天在一群里看見有人推薦一個app叫問啊,就可以發題答題那種的,感覺就跟uber滴滴打車似的,一般這種軟件一上來就砸錢給紅包啥的,哥之前刷過uber的單有經驗!試驗了幾次應該可以刷,把注冊紅包和之前領的紅包錢套現,目前我提了五十多,目測還能刷更多。ps,但是盡量要問技術相關的問題,不然容易被封。有技術的可以自己試,不會的可以q我:315414695


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成年人在线视频免费 | 日本免费aaa观看 | 国产午夜精品久久久久婷 | 欧美特级一级毛片 | 久久sp| 国产成人强伦免费视频网站 | 色999中文字幕 | 日本网站一区二区三区 | 国产成人强伦免费视频网站 | caoporn国产一区二区 | 欧美成a人片在线观看久 | 国产自在线 | 日本aaa一级片 | 国产羞羞视频在线观看免费应用 | 久久一区国产 | 国产91丝袜在线播放0 | 亚洲综合一区在线观看 | 法国性xxx精品hd | 九九热这里只有精品8 | 欧美成人三级视频 | 一级在线观看 | 色七七网站 | 黄色网电影| 久久久毛片视频 | 在线日韩亚洲 | 看一级毛片 | 全黄性性激高免费视频 | h视频免费看 | 国产精品成人一区二区三区电影毛片 | 圆产精品久久久久久久久久久 | 欧洲成人综合网 | 羞羞色院91精品网站 | 久久国产精品系列 | av在线免费看片 | 美女被免费网站在线软件 | 毛片在线免费观看视频 | 第四色成人网 | 黄色一级片在线观看 | 日韩视频1| 九九午夜 | 久久国产精品二国产精品中国洋人 |