程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP九大內置對象

JSP九大內置對象

編輯:關於JSP

JSP九大內置對象


雖然現在基本上使用SpringMVC+AJAX進行開發了Java Web了,但是還是很有必要了解一下JSP的九大內置對象的。像request、response、session這些對象,即便使用其他框架也是會經常用到的。因此十分有了解的必要。

這些對象可以在JSP頁面中調用,而不需要事先定義,這使得JSP編程更加的方便和快捷。其實這些內置對象都對應著某個Servlet類,在JSP被翻譯成Servlet之後,這些內置對象會相應轉換成對應的類實例。

JSP中使用到的內置對象主要有如下九個:

request內置對象
response內置對象
page內置對象
session內置對象
application內置對象
out內置對象
exception內置對象
config內置對象
pageContext內置對象

在jsp開發當中使用比較多的就request、response、session和out對象。

下面是各個對象的介紹和使用實例。

一、request內置對象

request內置對象是最常用的對象之一,它代表的是java.servlet.HttpServletRequest類的對象。request內置對象中包含了有關浏覽器請求的信息,並提供了多個用於獲取cookie、header以及session內數據的方法。

request對象常用方法

request對象主要用於客戶端請求處理,其中,該對象中所包含的方法有:

request對象主要用於客戶端請求處理,其中,該對象中所包含的方法有:
getMethod():返回HTTP請求信息中所使用到的方法名稱;
getServletPath():返回請求信息中調用Servlet的URL部分;
getQueryString():返回HTTP GET請求信息中URL之後的查詢字符串;
getContentType():返回請求實體的MIME類型;
getProtocol():返回請求信息中的協議名名字與版本號;
getPathInfo():返回有關任何路徑信息;
getServletName():返回接受請求的服務器主機;
getServletPort():返回服務器的端口號;
getRemoteHost():返回提交請求的客戶機的規范名字;
getRemoteAddr():返回提交請求的客戶機的IP地址;
getScheme():返回請求使用的模式(協議)名字;
getParameter():返回客戶端通過表單提交過來的參數值。例如request.getParameter(“myname”),通過該語句來獲取客戶端傳遞過來的myname 參數。
getContextPath():返回HTTP 請求中指示請求上下文的部分。
getHeaderNames():返回一個枚舉類型,此枚舉集合中包含了請求所含有的所有請求名。
getAuthType():返回用於保護Servlet 的認證模式的名字。例如,BASIC,SSL 或者NULL(沒有保護)。
gtRequestURL():返回HTTP 請求信息中的第一行從協議名開始直至查詢字符串之間的URL 部分。例如,對HTTP GET 請求http://www.zzbsite.com/helloworld?name=johnson&age=20,這個方法將返回http://www.zzbsite.com/helloworld 字符串。
gtCountLength():返回整數,表示請求實體的長度(以字節為單位)。
gtUestPrincipal():返回java.security 類的Principal 對象,其中包含有目前授權用戶的名字。
iUserInRole(String role):返回一個布爾值,指示某個授權用戶是否包含在某個具體的邏輯角色role 中。
gtRemoteHost():如果用戶已經被授權,則返回提交請求的用戶的注冊名字,否則返回一個NULL。

request常用方法的實例

下面通過一個實例講解來讓讀者了解有關request內置對象中的常見調用方法。創建一個request.jsp文件,該文件的詳細源代碼如下:

<%@ page contentType="text/html;charset=GBK" %>
返回HTTP 請求信息中使用的方法名稱:<%=request.getMethod()%>
返回請求信息中調用Servlet 的URL 部分:<%=request.getServletPath()%>
返回HTTP GET 請求信息中URL 之後的查詢字符串:<%=request.getQueryString()%>
返回請求實體的MIME 類型:<%=request.getContentType()%>
返回請求信息中的協議名名字和版本號:<%=request.getProtocol()%>
有關任何路徑信息:<%=request.getPathInfo()%>
返回接受請求的服務器主機:<%=request.getServerName()%>
返回服務器的端口號:<%=request.getServerPort()%>
返回提交請求的客戶機的規范名字:<%=request.getRemoteHost()%>
返回提交請求的客戶機的IP地址:<%=request.getRemoteAddr()%>
返回請求中使用的模式(協議)名字:<%=request.getScheme()%>
返回這個request值,提交過來的值:<%=request.getParameter("myname")%>

程序說明:request中的getParameter()方法是最為常用的,使用此方法獲取到上一頁面所提交的參數值。此處,頁面通過提交了一個myname參數給本頁面,並調用request.getParameter(“myname”)獲取到這個參數值。頁面中的其他request方法是用來獲取各種請求信息。

二、response內置對象

response對象與request對象相對應,它是用於響應客戶請求,向客戶端輸出信息。response是javax.servlet.HttpServletResponse類的對象。

response對象的常用方法

response對象提供了多個方法用來處理HTTP響應,可以調用response中的方法修改ContentType中的MIME類型以及實現頁面的跳轉等等,
比較常用的方法如下:

setContentLength(int len):此方法用於設置響應頭的長度。
setContentType(String type):用於設置HTTP響應的contentType中的MIME類型,其中可以包含字符編碼的規則。例如可以把contentType設置為“text/html;charset=GBK”。在Servelet編寫過程中,需要調用此方法進行設置,但是在JSP中一般都是使用page指令直接指定contentType的屬性。
getOutputStream():此方法返回一個Servlet的輸出流。用於在響應中寫入二進制數據。Servlet容器不對二進制數據進行編碼。
getWriter():此方法返回一個PrintWriter對象,在Servlet編寫過程使用的比較頻繁,而在JSP文件中,由於out是用getWriter()創建的PrintWriter對象的隱含對象,所以可以直接調用out對象作輸出響應。
getCharacterEncoding():該方法獲得此時響應所采用的字符編碼類型。
sendError(int status):使用指定錯誤狀態碼向客戶機發送相應的錯誤信息。
sendError(int status, String message):使用自定義的錯誤狀態碼以及描述信息向客戶機發送錯誤的提示信息。
sendRedirect(String location):將請求重新定位到一個不同的URL(頁面)上。此方法在實際開發過程中會經常使用到。
setDateHeader(String headername, long date):把指定的頭名稱以及日期設置為響應頭信息。其中日期是用long值表示的,這是按照從新紀元開始算起的毫秒數。
ContainsHeader(String name):檢測指定的頭信息是否存在。返回一個布爾類型。
setHeader(String headername, String value):此方法使用指定的頭名字以及相應的值來設置頭信息。如果此頭信息已經設置,則新的值會覆蓋掉舊的值。如果頭信息已經被發送出去,則此方法的設置將被忽略。
addheader(String headername, String value):把指定的頭名字以及相應值添加到頭信息當中去。
addIntHeader(String headername, int value):把指定的頭名字以及整數值設置為頭信息。如果頭信息已經設置了,則新的設置值將覆蓋掉以前的值。
setStatus(int sc):給響應設置狀態的代碼。
setStatus(int sc, String sm):為響應設置狀態代碼以及信息。這是在沒有錯誤的時候使用的。

這些方法中,getWriter()和sendRedirect(String location)在實際開發中使用的最為頻繁。getWriter()常出現在Servlet編寫中。

response對象的getWriter()方法實例

在服務器端的Servlet類文件中,會經常使用getWriter()方法來獲取一個PrintWriter對象,從而調用其中的println()方法來向客戶端輸出內容。下面一段Servlet的代碼實例:

package com.helloworld;
import java.io.PrintWriter; //引入PrintWriter類
import javax.servlet.http.HttpServletResponse; //引入HttpServletResponse類
public class PrintHTML { //打印出HTML代碼的方法
    public static void printHTML(HttpServletResponse response) throws Exception{
    PrintWriter out = response.getWriter(); //調用HttpServletResponse類中的getWriter()方法。
    out.println("");
    out.println("");
    out.println("
這是HttpServletResponse類中的getWriter()方法的例子 "); } }

程序說明:該Java代碼動態地向客戶端返回一個簡單的HTML頁面。
注意:在JSP頁面中,response就是HttpServletResponse類的一個對象,可以直接使用response在JSP頁面中調用HttpServletResponse類中所有方法。

頁面重定向實例

下面再通過一個例子來加深對用於頁面重定向的sendRedirect(String location)方法的理解。在helloworld模塊下創建一個index4.jsp文件:

<%@ page language="java" contentType="text/html;charSet=GBK" %>

response.sendRedirect()使用例子

<% String pg = request.getParameter("pg"); //獲取傳遞參數pg if("1".equals(pg)) //如果pg等於1 response.sendRedirect("hello.jsp"); //則頁面重定向為hello.jsp else if("2".equals(pg)) //如果pg等於2 response.sendRedirect("goodbye.jsp"); //則頁面重定向為goodbye.jsp else //否則不進行頁面重定向,即還顯示本頁 out.println("沒有進行頁面重定向"); %>

程序說明:頁面中有個下拉菜單,選擇需要跳轉的頁面。request內置對象通過getParameter()方法獲取到傳遞過來的參數值,response對象再根據參數值不同調用sendRedirect()方法進行頁面跳轉。

重定向的hello.jsp頁面代碼如下:


<%out.print("

Hello!

");%>

Goodbye.jsp頁面代碼為:


<%out.println("

Goodbye!

");%>

三、page內置對象

page對象有點類似於Java編程中的this指針,就是指當前JSP頁面本身。page是java.lang.Object類的對象。

page對象的常用方法

比較常用的page內置對象的方法有:

getClass():返回當時Object的類。
hashCode():返回此Object的哈希代碼。
toString():把此時的Object類轉換成字符串。
equals(Object o):比較此對象是否和指定的對象是否相等。
copy(Object o):把此對象復制到指定的對象當中去。
clone():對此對象進行克隆。

由於page內置對象在實際開發過程並不經常使用,所以page對象的其他方法在這裡就不一一列舉出來了。

page的常用方法實例

下面舉一個實例來加深對page內置對象使用的理解。創建一個page.jsp文件,其詳細源代碼如下:

<%@ page language="java" contentType="text/html;charSet=GBK" %>
<%@ page import="java.lang.Object" %>

Page內置對象的實例

<%!Object obj; %> <!-- 對象申明 --> getClass:<%=page.getClass() %>
hashCode:<%=page.hashCode()%>
toString:<%=page.toString()%>
equals:<%=page.equals(obj) %>
equlas2:<%=page.equals(this) %>

四、session內置對象

session是與請求有關的會話期,它是java.servlet.http.HttpSession類的對象,用來表示和存儲當前頁面的請求信息。

在實際的Web應用開發過程會經常遇到這樣的一個問題:會話狀態的維持。當然有很多種方法可以用來解決這個問題,例如:Cookies、隱藏的表單輸入域或者將狀態信息直接附加到URL當中去,但是這些方法使用非常不便。

Java Servlet提供了一個可以在多個請求之間持續有效的會話對象HttpSession,此對象允許用戶存儲和提取會話狀態的信息。JSP同樣也支持了Servlet中的這個概念。JSP中的session內置對象就是對應於Servlet中的HttpSession對象。當Web應用系統希望通過多個頁面完成一個事務的時候,session的使用是非常有用和方便的。

session對象的常用方法

session內置對象中的常用方法如下:

getId():此方法返回唯一的標識,這些標識為每個session而產生。當只有一個單一的值與一個session聯合時,或當日志信息與先前的sessions有關時,它被當作鍵名用。
getCreationTime():返回session被創建的時間。最小單位為千分之一秒。為得到一個對打印輸出很有用的值,可將此值傳給Date constructor 或者GregorianCalendar的方法setTimeInMillis。
getLastAccessedTime():返回session最後被客戶發送的時間。最小單位為千分之一秒。
getMaxInactiveInterval():返回總時間(秒),負值表示session永遠不會超時。
getAttribute(String key):通過給定的關鍵字獲取一個存儲在session中相對應的信息。例如,Integer item = (Integer) session.getAttrobute("item")。
setAttribute(String key, Object obj):提供一個關鍵詞和一個對象值,然後存在session當中。例如,session.setAttribute("ItemValue", itemName)。

session一般在服務器上設置了一個30分鐘的過期時間,當客戶端停止操作後30分鐘,session中存儲的信息會自動失效。

另外讀者要非常注意的,session中保存和查找的信息不能是基本的類型,如int、double等,而必須是Java相對應的對象,例如Integer、Double等。

問題回答操作實例

接下來本書將創建三個頁面來模擬一個多頁面的Web應用,使得讀者能夠對session的使用有深入的了解。第一個頁面(session1.jsp)僅僅包含了一個要求輸入用戶名的HTML表單,代碼如下:

<%@ page contentType="text/html;charSet=GBK" %>

用戶名輸入頁面

程序說明:通過

第二個頁面(session2.jsp)需要通過request對象獲取session1.jsp頁面中的username參數值,並把它保存在session中。session對象是以哈希表存儲信息的。session2.jsp的另外一個操作是詢問第二個問題,具體的代碼如下:

<%@ page contentType="text/html;charSet=GBK" %>

回答問題頁面

<% String username = request.getParameter("username"); //獲得傳遞參數username session.setAttribute("theusername",username); //把用戶名保存在session中,String可以當著對象 %>

您的用戶名為:<%=username%>

您喜歡吃什麼:
程序說明:使用request內置對象中的getParameter()方法獲取到session1.jsp頁面傳遞過來的參數值,並使用session對象中的setAttribute()方法把用戶名當著對象存儲在session的哈希表中,這裡需要指定一個關鍵字theusername。另外頁面使用

第三個頁面(session3.jsp)主要任務是顯示回答結果。具體代碼如下:

<%@ page contentType="text/html;charSet=GBK" %>

顯示答案

<%! String food="";%> <% food = request.getParameter("food"); //取得food參數值 String name = (String)session.getValue("theusername"); //從session取出關鍵字為theusername的對象 %> 您的用戶名:<%=name%>
您喜歡吃:<%=food%>

程序說明:通過關鍵字theusername使用session對象中的getAttribute(String key)方法獲取到用戶名,並把用戶名和第二個問題的答案顯示出來。

session內置對象的使用非常頻繁,例如,使用session來存儲用戶的信息,並可以根據session中的用戶對象是否為空來判斷用戶是否已經登陸。所以讀者對此對象的使用要熟練掌握。

五、application內置對象

application是javax.servlet.ServletContext類對象的一個實例,用於實現用戶之間的數據共享(多使用於網絡聊天系統)。

application對象與session對象的區別

它的作用有點類似於前一節介紹的session內置對象。但是它們之間還是有區別的,一般來說,一個用戶對應著一個session,並且隨著用戶的離開session中的信息也會消失,所以不同客戶之間的會話必須要確保某一時刻至少有一個客戶沒有終止會話;而applicat則不同,它會一直存在,類似於系統的“全局變量”,而且只有一個實例。

application對象的常用方法

application內置對象的常用方法如下:

getAttribute(String key):通過一個關鍵字返回用戶所需要的信息,返回類型為對象(Object),類似於session中的getAttribute(String key)方法。
getAttributeNames():返回所有可用的屬性名,返回類型為枚舉(Enumeration)。
setAttribute(String key, Object obj):保存一個對象信息,並指定給一個關鍵字。
removeAttribute(String key):通過關鍵字來刪除一個對象信息。
getServletInfo():返回JSP引擎的相關信息。
getRealPath(String path):返回虛擬路徑的真實路徑。
getContext(String URLPath):返回執行Web應用的application對象。
getMajorVersion()和getMinorVersion():返回服務器所支持的Servlet API最大和最小版本號。
getMineType(String file):返回指定文件的MIME類型。
getResource(String path):返回指定資源的URL路徑。
getResourceAsStream(String path):返回指定資源的輸入流。
getRequestDispatcher(String URLPath):返回指定資源的RequestDispatcher對象。
getServlet(String name):返回指定名稱的Servlet。
getServlets():返回所有的Servlet,返回類型為枚舉型。
getServletNames():返回所有的Servlet名稱,返回類型為枚舉型。
log(String msg):把指定信息寫入到Servlet的日志文件中。
log(String msg, Throwable throwable):把棧軌跡以及給出的Throwable異常的說明信息寫入Servlet的日志文件。

網站計數器實例

同樣,下面將通過一個實例來講解Application內置對象中常用方法的使用。

在模塊helloworld中創建一個setappattr.jsp頁面,用於獲取application內置對象中的信息以及設置計數初始值,詳細代碼如下:

<%@ page contentType="text/html;charSet=GBK" %>

獲得application信息


ServletInfo:<%=application.getServerInfo()%>
application.jsp real path: <%=application.getRealPath("/application.jsp")%>
HelloServlet Real Path: <%=application.getRealPath("/servletsample/HelloServlet")%>
Major Version: <%=application.getMajorVersion()%>
get MIME: <%=application.getMimeType("/servletsample/demo.htm")%>
getResource: <%=application.getResource("/HelloJSP.jsp")%> <% out.println("

設置數值

"); application.setAttribute("name","zzb"); //把字符串“zzb”對象保存在application中 application.setAttribute("counter","1"); //把字符串值“1”保存在application中 out.println("set name=zzb"); out.println("
set counter=1"); %>

程序說明:此處調用了application內置對象中的setAttribute()方法來存儲用戶名信息以及計數初始值。

另外在相同目錄下創建另外一個getappattr.jsp文件,用於獲取計數值。具體的代碼如下:

<%@ page contentType="text/html;charSet=GBK"%>

獲得用戶名:<%=application.getAttribute("name")%>
計數值: <% //將保存在application中的關鍵字為counter的字符串對象取出,然後強制轉化成整數型 int mycounter = Integer.valueOf(application.getAttribute("counter").toString()).intValue(); out.println(mycounter); //將數值加一,然後用新的值來更新保存再application中的counter對象 application.setAttribute("counter",Integer.toString(mycounter+1)); %>

程序說明:和session對象一樣,application存儲的是對象類型而不是普通的數值類型。此處調用了application對象中的getAttribute()方法來獲取前一個頁面所存儲的信息,並把讀取出的計數值加一,然後重新存儲在application當中去。

當關閉以上運行的兩個浏覽器窗口,再多次交替地打開和關閉getappattr.jsp窗口,會看到計數值一直在遞增,只用tomcat服務不關閉。而session對象存儲的信息會隨著窗口的關閉而釋放。

六、out內置對象

out對象是在JSP開發過程中使用得最為頻繁的對象,但使用也是最為簡單的。

out對象的常用方法

out對象的常用方法如下:

print():在頁面中打印出字符串信息,不換行;
println():在頁面中打印出字符串信息,並且換行;
clear():清除掉緩沖區中尚存在的內容。
clearBuffer():此方法清除掉當前緩沖區中尚存在的內容。
flush():清除掉數據流。
getBufferSize():返回緩沖區的內存大小,單位為字節流。如果不進行緩沖區的設置,大小為0。
getRemaining():此方法返回緩沖區還剩下多少字節數可以使用。
isAutoFlush():檢查當前緩沖區是設置為自動清空,還是滿了就拋出異常。
close():關閉輸出流。

其中print()與println()兩個方法是使用最為頻繁的。

數據輸出實例

下面,同樣將舉一個例子來講解out內置對象的使用方法。創建一個out.jsp文件,詳細代碼如下:

<%@ page buffer=”1kb” autoFlush=”true” contentType=”text/html;charSet=GBK” %>
<% for(int i=0;i<135;i++) //迭代輸出 Out.println(“Hello world, “+i+” “); %>
BufferSize: <%=out.getBufferSize() %>
BufferRemain: <%=out.getRemaining() %>
AutoFlush: <%=out.isAutoFlush() %> <% out.clearBuffer(); %>

程序說明:page指令中的buffer屬性用來設置緩沖區的大小。autoFlush屬性為true表示緩沖區是自動清空的。在浏覽器中運行這個JSP頁面將會發現,程序只能輸出到i=106,後面的數字以及內容將全部被清空了,顯示不出來。這是因為out對象調用的clearBuffer()方法把緩沖區當前內容全部清除掉了。

把程序中的clearBuffer()方法換成clear()方法,再運行會報錯。這是因為在調用clear()方法之前,緩沖區已經自動清除過了(autoFlush=true)。如果把程序中的循環次數改小一點,則不管程序調用的是clear()還是clearBuffer()方法,浏覽器上將什麼也不顯示。因為內容已經被clear()或者clearBuffer()方法清空掉了。但這時使用clear()方法卻不會出錯,因為緩沖區這時還沒有滿,autoFlush沒有起到作用。

七、exception內置對象

exception內置對象是用來處理頁面出現的異常錯誤,它是java.lang.Throwable類的一個對象。前面已經講過,在實際JSP網站開發過程中,通常是在其頁面中加入page指令的errorPage屬性來將其指向一個專門處理異常錯誤的頁面。如果這個錯誤處理頁面已經封裝了這個頁面收到的錯誤信息,並且錯誤處理頁面頁面含有的isErrorpage屬性設置為true,則這個錯誤處理頁面可以使用以下方法來訪問錯誤的信息:

getMessage()和getLocalizedMessage():這兩種方法分別返回exception對象的異常消息字符串和本地化語言的異常錯誤。
printStackTrace():顯示異常的棧跟蹤軌跡。
toString():返回關於異常錯誤的簡單消息描述。
fillInStackTrace():重寫異常錯誤的棧執行軌跡。

異常錯誤一般都是開發人員無法避免的,所以對各種可能的異常進行後期的處理和提示是非常必要的。讀者要養成及時處理各種異常錯誤的習慣。

八、config內置對象

config內置對象是ServletConfig類的一個實例。在Servlet初始化的時候,JSP引擎通過config向它傳遞信息。這種信息可以是屬性名/值匹配的參數,也可以是通過ServletContext對象傳遞的服務器的有關信息。

config內置對象中常用的方法如下。
getServletContext():此方法將返回一個含有服務器相關信息的ServletContext對象。
getInitParameter(String name):返回初始化參數的值。
getInitParameterNames():返回包含了Servlet初始化所需要的所有參數,返回類型是枚舉型。

一般在JSP開發過程很少使用到config內置對象。只有在編寫Servlet時,需要重載Servlet的init()方式時才用到。

九、pageContext內置對象

pageContext對象是一個比較特殊的對象。它相當於頁面中所有其他對象功能的最大集成者,即使用它可以訪問到本頁面中所有其他對象,例如前面已經描述的request、response以及application對象等。

pageContext對象的常用方法

這個對象中常使用的方法如下:

getRequest():返回當前頁面中的request對象。
getResponse():使用此方法將返回當前頁面中的response對象。
getPage():此方法返回當前頁面中的page對象。
getSession():返回當前頁面中的session對象。
getOut():返回當前頁面中的out對象。
getException():返回當前頁面中的exception對象。
getServletConfig():返回當前頁的config對象。
getServletContext():返回當前頁中的application對象。
setAttribute(String name):給指定的屬性名設置屬性值。
getAttribute(String name):根據屬性名稱找到相應的屬性值。
setAttribute(String name, Object obj, int scope):在給定的范圍內設置相應的屬性值。
getAttribute(String name, int scope):在指定的范圍內獲取到相應的屬性值。
findAttribute(String name):尋找一個屬性並返回,如果沒有找到則返回一個null。
removeAttribute(String name):通過屬性名刪除掉某個屬性。
removeAttribute(String name, int scope):在指定的某個范圍內刪除某個屬性。
getAttributeScope(String scope):返回某屬性的作用域。
getAttributeNamesInScope(int scope):返回指定范圍內的所有屬性名的枚舉。
release():釋放掉pageContext()所占的所有資源。
forward(String relativeURLpath):使用當前頁面重導到另一個頁面。
include(String relativeURLpath):使用當前位置包含的另一個頁面。

之上提到的scope范圍的取值含義:

1:Page scope
2:Request scope
3:Session scope
4:Application scope

pageContext對象的簡單實例

下面為應用pageContext對象的示范例子:


<% request.setAttribute(“MyName”,”zzb1”); //把MyName保存在request范圍中 session.setAttribute(“MyName”,”zzb2”); //將MyName再保存再session范圍中 application.setAttribute(“MyName”,”zzb3”); //將MyName保存在application范圍中 %> request: <%=pageContext.getRequest().getAttribute(“MyName”)%>
session: <%=pageContext.getSession().getValue(“MyName”)%>
application: <%=pageContext.getServletContext().getAttribute(“MyName”)%>

pageContext對象在實際JSP開發過程中很少使用,因為像request和response等對象本來就可以直接調用方法進行使用,如果通過pageContext來調用其他對象就有點捨近求遠。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved