JAVAWEB網(wǎng)頁設(shè)計(jì)課件之_第1頁
JAVAWEB網(wǎng)頁設(shè)計(jì)課件之_第2頁
JAVAWEB網(wǎng)頁設(shè)計(jì)課件之_第3頁
JAVAWEB網(wǎng)頁設(shè)計(jì)課件之_第4頁
JAVAWEB網(wǎng)頁設(shè)計(jì)課件之_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Date:2022年2月9日星期三1Web系統(tǒng)開發(fā)技術(shù)Date:2022年2月9日星期三2第第4章回顧章回顧使使JSP文件中的中文正常顯示,需要使用什么語句文件中的中文正常顯示,需要使用什么語句(兩種)(兩種)一個(gè)一個(gè)JSP文件中包含其他資源(文件中包含其他資源(JSP文件、文件、HTML文件、文件、文本文件等),有哪兩種方式?文本文件等),有哪兩種方式?頁內(nèi)跳轉(zhuǎn)使用的動(dòng)作元素是頁內(nèi)跳轉(zhuǎn)使用的動(dòng)作元素是?如果想在如果想在JSP文件中使用文件中使用exception對(duì)象,需要如何設(shè)對(duì)象,需要如何設(shè)置置page指令?指令?Date:2022年2月9日星期三3第第5章章 JSP內(nèi)置對(duì)象內(nèi)置對(duì)象5.1

2、 內(nèi)置對(duì)象內(nèi)置對(duì)象5.2 對(duì)象有效范圍對(duì)象有效范圍5.3 Cookie對(duì)象對(duì)象Date:2022年2月9日星期三45.1 內(nèi)置對(duì)象內(nèi)置對(duì)象Date:2022年2月9日星期三5內(nèi)置對(duì)象概述內(nèi)置對(duì)象概述JSP提供了一些由容器實(shí)現(xiàn)和管理的內(nèi)建對(duì)象,在提供了一些由容器實(shí)現(xiàn)和管理的內(nèi)建對(duì)象,在JSP頁面中可以頁面中可以直接使用直接使用,不需要實(shí)例化,通過存取這些,不需要實(shí)例化,通過存取這些內(nèi)置對(duì)象實(shí)現(xiàn)與內(nèi)置對(duì)象實(shí)現(xiàn)與JSP頁面的頁面的Servlet環(huán)境的相互訪問。環(huán)境的相互訪問。在在JSP中一共提供了九個(gè)內(nèi)置對(duì)象:中一共提供了九個(gè)內(nèi)置對(duì)象: out、request、response、session、ap

3、plication、pageContext、exception。由于由于JSP是構(gòu)建在是構(gòu)建在Servlet基礎(chǔ)之上的,從本質(zhì)上將,基礎(chǔ)之上的,從本質(zhì)上將,JSP的每個(gè)內(nèi)置對(duì)象都和的每個(gè)內(nèi)置對(duì)象都和Java Servlet API 包中的類包中的類相對(duì)應(yīng),在服務(wù)器運(yùn)行時(shí)自動(dòng)生成。相對(duì)應(yīng),在服務(wù)器運(yùn)行時(shí)自動(dòng)生成。Date:2022年2月9日星期三6內(nèi)置對(duì)象概述內(nèi)置對(duì)象概述內(nèi)置對(duì)象與所屬類的對(duì)應(yīng)關(guān)系內(nèi)置對(duì)象與所屬類的對(duì)應(yīng)關(guān)系對(duì)象名對(duì)象名類型類型作用域作用域requestjavax.servlet.http.HttpServletRequestrequestresponsejavax.servlet

4、. http.HttpServletResponsepagepageContext javax.servlet.jsp.PageContextpagesessionjavax.servlet.http.HttpSessionsessionapplicationjavax.servlet.ServletContextapplicationoutjavax.servlet.jsp.JspWriterpageconfigjavax.servlet.SercletConfigpagepagejava.lang.Objectpageexceptionjava.lang.throwablepageDate

5、:2022年2月9日星期三7內(nèi)置對(duì)象概述內(nèi)置對(duì)象概述與輸入輸出有關(guān)的內(nèi)置對(duì)象與輸入輸出有關(guān)的內(nèi)置對(duì)象out對(duì)象對(duì)象request對(duì)象對(duì)象response對(duì)象對(duì)象與與context有關(guān)的內(nèi)置對(duì)象有關(guān)的內(nèi)置對(duì)象session對(duì)象對(duì)象application對(duì)象對(duì)象pageConext對(duì)象對(duì)象與與Servlet和和error有關(guān)的內(nèi)置對(duì)象有關(guān)的內(nèi)置對(duì)象config對(duì)象對(duì)象page對(duì)象對(duì)象exception對(duì)象對(duì)象Date:2022年2月9日星期三8與輸入輸出有關(guān)的內(nèi)置對(duì)象與輸入輸出有關(guān)的內(nèi)置對(duì)象out對(duì)象:主要作用時(shí)在客戶端的瀏覽器內(nèi)輸出數(shù)據(jù)結(jié)果信息,對(duì)象:主要作用時(shí)在客戶端的瀏覽器內(nèi)輸出數(shù)據(jù)結(jié)果信息

6、,對(duì)應(yīng)的接口為對(duì)應(yīng)的接口為javax.servlet.jsp.JspWriter??梢酝ㄟ^??梢酝ㄟ^out對(duì)象對(duì)象對(duì)緩沖區(qū)進(jìn)行操作。對(duì)緩沖區(qū)進(jìn)行操作。除了直接使用內(nèi)置對(duì)象以外,我們還可以使用除了直接使用內(nèi)置對(duì)象以外,我們還可以使用pageContext.getOut()方法獲取方法獲取out對(duì)象。對(duì)象。out對(duì)象的常用方法如下:對(duì)象的常用方法如下:public abstract void print()顯示各種類型的數(shù)據(jù)顯示各種類型的數(shù)據(jù)public abstract void println()分行顯示各種類型的數(shù)據(jù)分行顯示各種類型的數(shù)據(jù)public abstract void newLin

7、e()輸出一個(gè)換換行符輸出一個(gè)換換行符public abstract void close()關(guān)閉輸出流關(guān)閉輸出流Date:2022年2月9日星期三9與輸入輸出有關(guān)的內(nèi)置對(duì)象與輸入輸出有關(guān)的內(nèi)置對(duì)象out對(duì)象的常用方法(續(xù)前頁):對(duì)象的常用方法(續(xù)前頁):public abstract void clear()清空緩沖區(qū)中的內(nèi)容,不將數(shù)據(jù)發(fā)送至客戶端。清空緩沖區(qū)中的內(nèi)容,不將數(shù)據(jù)發(fā)送至客戶端。public abstract void clearBuffer()清空緩沖區(qū)中的內(nèi)容,并將緩沖區(qū)中的數(shù)據(jù)發(fā)送到客戶端。清空緩沖區(qū)中的內(nèi)容,并將緩沖區(qū)中的數(shù)據(jù)發(fā)送到客戶端。public abstract

8、void getBuffersize()獲得緩沖區(qū)的大小,對(duì)比回顧獲得緩沖區(qū)的大小,對(duì)比回顧page指令指令public abstract void getRemaing()返回緩沖區(qū)剩余空間的大小返回緩沖區(qū)剩余空間的大小public abstract void flush()輸出緩沖區(qū)中的數(shù)據(jù)。輸出緩沖區(qū)中的數(shù)據(jù)。public abstract void isAutoFlush()獲取獲取AutoFlush的取值的取值Date:2022年2月9日星期三10與輸入輸出有關(guān)的內(nèi)置對(duì)象與輸入輸出有關(guān)的內(nèi)置對(duì)象實(shí)例:實(shí)例:table.jspJSP程序利用程序利用out對(duì)象將網(wǎng)頁內(nèi)容輸出時(shí),都要和客戶

9、對(duì)象將網(wǎng)頁內(nèi)容輸出時(shí),都要和客戶端做一次連接,并且會(huì)為此消耗不少的資源;端做一次連接,并且會(huì)為此消耗不少的資源;因此可以將要輸出的內(nèi)容放在一個(gè)固定大小的緩沖區(qū)因此可以將要輸出的內(nèi)容放在一個(gè)固定大小的緩沖區(qū)中,等到緩沖區(qū)滿時(shí)再一次將內(nèi)容送往客戶端,這就中,等到緩沖區(qū)滿時(shí)再一次將內(nèi)容送往客戶端,這就要將要將autoFlush設(shè)為設(shè)為true,否則緩沖區(qū)滿時(shí)將產(chǎn)生,否則緩沖區(qū)滿時(shí)將產(chǎn)生IOException錯(cuò)誤。錯(cuò)誤。實(shí)例:實(shí)例:out.jspDate:2022年2月9日星期三11request對(duì)象對(duì)象Request對(duì)象:作用式獲取通過對(duì)象:作用式獲取通過HTTP協(xié)議連接到服務(wù)器的客戶協(xié)議連接到服務(wù)

10、器的客戶端傳遞的數(shù)據(jù),封裝了用戶提交的信息,通過調(diào)用該對(duì)象的方端傳遞的數(shù)據(jù),封裝了用戶提交的信息,通過調(diào)用該對(duì)象的方法可以獲得封裝的信息,該對(duì)象對(duì)應(yīng)的接口為法可以獲得封裝的信息,該對(duì)象對(duì)應(yīng)的接口為java.servlet.servlet.http.HttpServletRequest接口接口請(qǐng)求信息的內(nèi)容包括請(qǐng)求的頭信息(請(qǐng)求信息的內(nèi)容包括請(qǐng)求的頭信息(Header)、系統(tǒng)信息(比)、系統(tǒng)信息(比如:編碼方式)、請(qǐng)求的方式(比如:如:編碼方式)、請(qǐng)求的方式(比如:GET或或POST)、請(qǐng)求的)、請(qǐng)求的參數(shù)名稱和參數(shù)值等信息參數(shù)名稱和參數(shù)值等信息Request對(duì)象提供的方法可以分為四類:對(duì)象提供

11、的方法可以分為四類:管理管理request屬性的方法:屬性的方法:public java.lang.Object getAttribute()返回返回name指定的屬性值,若指定的屬性值,若name不存在則返回不存在則返回nullpublic java.util.Enumeration getAttributeNames()返回返回request對(duì)象所有屬性的名稱,并將其封裝在對(duì)象所有屬性的名稱,并將其封裝在Enumeration對(duì)象中。對(duì)象中。public void setAttribute(java.lang.String name,java.lang.Object o)設(shè)置請(qǐng)求對(duì)象中的一

12、個(gè)屬性。設(shè)置請(qǐng)求對(duì)象中的一個(gè)屬性。Date:2022年2月9日星期三12request對(duì)象對(duì)象獲取請(qǐng)求參數(shù)的方法獲取請(qǐng)求參數(shù)的方法StringgetParameter(String name) 獲取獲取name的參數(shù)值的參數(shù)值Enumeration getParameterNames() 獲取所有參數(shù)的名稱獲取所有參數(shù)的名稱String getParameterValues(String name) 獲取獲取name的所有參的所有參數(shù)值數(shù)值Map getParameterMap() 取得一個(gè)要求參數(shù)的取得一個(gè)要求參數(shù)的Map獲取請(qǐng)求獲取請(qǐng)求HTTP標(biāo)頭的方法標(biāo)頭的方法String getHea

13、der(String) 獲取獲取name的標(biāo)頭的標(biāo)頭Enumeration getHeaderNames() 獲取所有表頭的名稱獲取所有表頭的名稱Enumeration getHeaders(String name) 取得取得name所有的標(biāo)頭所有的標(biāo)頭Int getIntHeader(String name) 取得整數(shù)類型的標(biāo)頭取得整數(shù)類型的標(biāo)頭long getDateHeader(String name) 獲取日期類型的獲取日期類型的name的標(biāo)頭的標(biāo)頭Cookie getCookies() 獲取與請(qǐng)求相關(guān)的獲取與請(qǐng)求相關(guān)的CookiesDate:2022年2月9日星期三13request

14、對(duì)象對(duì)象其他方法,如獲取請(qǐng)求的其他方法,如獲取請(qǐng)求的URL、IP和和sessionString getContextPath() 獲取獲取Context路徑路徑String getMethod() 獲取獲取HTTP請(qǐng)求提交的方法請(qǐng)求提交的方法String getProtocol()獲取請(qǐng)求使用的協(xié)議獲取請(qǐng)求使用的協(xié)議String getQueryString()獲取請(qǐng)求的參數(shù)字符串,注意此時(shí)()獲取請(qǐng)求的參數(shù)字符串,注意此時(shí)HTTP請(qǐng)求的方法必須為請(qǐng)求的方法必須為get方法。方法。String getRequestedSessionId()獲取客戶端的獲取客戶端的SessionIDString

15、 getRequstURI()獲取請(qǐng)求的獲取請(qǐng)求的URL,但但不包括請(qǐng)求參數(shù)字,但但不包括請(qǐng)求參數(shù)字符串符串String getRemoteAddr()獲取請(qǐng)求用戶的獲取請(qǐng)求用戶的IP地址地址String getRemotePort()獲取請(qǐng)求用戶的端口號(hào)獲取請(qǐng)求用戶的端口號(hào)String getRemoteUser(),獲取請(qǐng)求用戶的名稱,獲取請(qǐng)求用戶的名稱Void setCharacterEncoding(String encoding) 設(shè)置字符編碼方設(shè)置字符編碼方式,用來解決傳遞非英文字符所出現(xiàn)的亂碼問題式,用來解決傳遞非英文字符所出現(xiàn)的亂碼問題Date:2022年2月9日星期三14常用

16、方法(一)常用方法(一)request.getParameter(“parameterName”)返回給定參數(shù)的值,如果參數(shù)不存在則返回空值。返回給定參數(shù)的值,如果參數(shù)不存在則返回空值。String name=request.getParameter(name); Date:2022年2月9日星期三15示例:包括兩個(gè)文件示例:包括兩個(gè)文件user.htm和和getuser.jsp表單文件:表單文件:user.htm獲取表單信息:獲取表單信息:getuser.jspDate:2022年2月9日星期三16復(fù)習(xí)表單標(biāo)記復(fù)習(xí)表單標(biāo)記Form表單標(biāo)記表單標(biāo)記 各種表單控件(文本框、密碼框、復(fù)選框等)各種

17、表單控件(文本框、密碼框、復(fù)選框等) 至少一個(gè)提交按鈕至少一個(gè)提交按鈕注意比較:注意比較:get和和post兩種提交方式的區(qū)別兩種提交方式的區(qū)別內(nèi)容傳輸形式、安全性內(nèi)容傳輸形式、安全性取值方式和中文亂碼處理方式取值方式和中文亂碼處理方式Date:2022年2月9日星期三17綜合實(shí)例綜合實(shí)例1登錄判斷登錄判斷 包括兩個(gè)文件:包括兩個(gè)文件:denglu.htm和和denglu.jspdenglu.htm:顯示如下界面:顯示如下界面denglu.jsp:判斷用戶名和密碼,如果是:判斷用戶名和密碼,如果是neusoft和和123,則輸出,則輸出“登錄成功登錄成功”,否則輸出,否則輸出“用戶名密碼用戶名

18、密碼錯(cuò)誤錯(cuò)誤”Date:2022年2月9日星期三18denglu.htm用戶名:用戶名:密碼:密碼:Date:2022年2月9日星期三19denglu.jspDate:2022年2月9日星期三20常用方法(二)常用方法(二)setCharacterEncoding(String charSet)設(shè)置請(qǐng)求的編碼方式設(shè)置請(qǐng)求的編碼方式支持中文的支持中文的charSet有:有:GBK,GB2312,UTF-8Date:2022年2月9日星期三21常用方法(三)常用方法(三)getParameterValues()返回值類型:返回值類型: 字符串?dāng)?shù)組字符串?dāng)?shù)組 String能夠取出變量的多個(gè)值,主要用

19、于復(fù)選框值的獲取。能夠取出變量的多個(gè)值,主要用于復(fù)選框值的獲取。String mybox; mybox=request.getParameterValues(mybox); if(mybox!=null) for(int i=0;imybox.length;i+) out.println(myboxi); Date:2022年2月9日星期三22綜合實(shí)例綜合實(shí)例2:注冊(cè):注冊(cè)包括兩個(gè)文件:包括兩個(gè)文件:zhuce.html和和zhuce.jspDate:2022年2月9日星期三23常用方法(四)常用方法(四)public Enumeration getParameterNames()得到所有參數(shù)

20、的名稱,返回值是一個(gè)得到所有參數(shù)的名稱,返回值是一個(gè)Enumeration類型的對(duì)象。類型的對(duì)象。實(shí)例:實(shí)例:params.htm和和params.jspDate:2022年2月9日星期三24常用方法(五)常用方法(五)public Cookie getCookies()得到客戶端所有的有效得到客戶端所有的有效Cookie對(duì)象,返回一個(gè)對(duì)象,返回一個(gè)Cookie對(duì)象數(shù)組,然后可以通過數(shù)組下標(biāo)訪問到對(duì)象數(shù)組,然后可以通過數(shù)組下標(biāo)訪問到每一個(gè)每一個(gè)Cookie。若沒有有效。若沒有有效Cookie,則返回,則返回null。Date:2022年2月9日星期三25其他方法其他方法getContextPa

21、th()getServeltPath()getRequestURI()getHeaderNames和和getHeader(String name)實(shí)例:實(shí)例:requestHeader.jspDate:2022年2月9日星期三26response對(duì)象對(duì)象Response對(duì)象:作用封裝對(duì)象:作用封裝JSP處理數(shù)據(jù)后產(chǎn)生的結(jié)果,處理數(shù)據(jù)后產(chǎn)生的結(jié)果,并將其傳回到客戶端相應(yīng)客戶端的請(qǐng)求,其對(duì)應(yīng)的接并將其傳回到客戶端相應(yīng)客戶端的請(qǐng)求,其對(duì)應(yīng)的接口為口為javax.servlet.http.HttpServletResponse接口。接口。Response對(duì)象用來提供給客戶端瀏覽器的參考信息,對(duì)象用來提

22、供給客戶端瀏覽器的參考信息,比如響應(yīng)的標(biāo)頭,響應(yīng)的本體比如響應(yīng)的標(biāo)頭,響應(yīng)的本體(HTML文本內(nèi)容文本內(nèi)容)以及服以及服務(wù)端的狀態(tài)碼信息。務(wù)端的狀態(tài)碼信息。注意任何標(biāo)頭的設(shè)定都應(yīng)在本體回傳前設(shè)定好,否則注意任何標(biāo)頭的設(shè)定都應(yīng)在本體回傳前設(shè)定好,否則設(shè)定的值講不起任何作用。設(shè)定的值講不起任何作用。Date:2022年2月9日星期三27response對(duì)象對(duì)象response對(duì)象的方法主要可以分為三類:對(duì)象的方法主要可以分為三類: 設(shè)定設(shè)定HTTP標(biāo)頭的方法標(biāo)頭的方法void addCookie(Cookie cookie) 增加增加cookieVoid addDateHeader(String

23、name,long date) 新增新增long類型、類型、名稱名稱name標(biāo)頭。標(biāo)頭。void addHeader(String name,String value)新增新增String類型、類型、名稱為名稱為name的標(biāo)頭的標(biāo)頭Void addIntHeader(String name,int value) 新增新增int類型、名稱類型、名稱為為name的標(biāo)頭的標(biāo)頭setDateHeader(String name,long date)指定指定long類型類型name標(biāo)標(biāo)頭的值頭的值setHeader(String name,String value)指定指定String類型類型name標(biāo)

24、標(biāo)頭的值頭的值setIntHeader(String name,int value)指定指定int類型類型name標(biāo)頭的標(biāo)頭的值值Date:2022年2月9日星期三28response對(duì)象對(duì)象 設(shè)定狀態(tài)顯示碼的方法:設(shè)定狀態(tài)顯示碼的方法:void sendError(int sc) 傳送狀態(tài)碼傳送狀態(tài)碼(status code)void sendError(int sc,String msg) 傳送狀態(tài)碼和錯(cuò)誤信息傳送狀態(tài)碼和錯(cuò)誤信息void setStatus(int sc) 設(shè)置狀態(tài)碼設(shè)置狀態(tài)碼 用來重定向的方法用來重定向的方法void sendRedirect(String url) 將

25、頁面重定向到指定的地址將頁面重定向到指定的地址String encodeRedirectURL(String url),對(duì)指定的地址進(jìn)行編,對(duì)指定的地址進(jìn)行編碼碼Date:2022年2月9日星期三29常用方法(一)常用方法(一)設(shè)置瀏覽器無緩沖:設(shè)置瀏覽器無緩沖:setHeader(“Pragma”,“no-cache”);setHeader(“Cache-Control”,”no-cache”);設(shè)置自動(dòng)刷新設(shè)置自動(dòng)刷新response.setHeader(“Refresh”,”30”);/每隔每隔30秒自秒自動(dòng)刷新當(dāng)前頁面動(dòng)刷新當(dāng)前頁面response.setHeader(“Refresh

26、”, “ 10;URL=http:/localhost/new.jsp”);/10秒后加載新秒后加載新的頁面的頁面實(shí)例:實(shí)例:setHeader.jsp和和setHeader2.jspDate:2022年2月9日星期三30常用方法(二)常用方法(二)public abstract void sendRedirect(String url)將對(duì)用戶端的響應(yīng)重新定向到指定的將對(duì)用戶端的響應(yīng)重新定向到指定的url上。上。實(shí)例:實(shí)例:sendRedirect.jsp和和sendRedirect2.jspDate:2022年2月9日星期三31常用方法(三)常用方法(三)void setContentTy

27、pe(String contentType)設(shè)置響應(yīng)的設(shè)置響應(yīng)的MIME類型類型實(shí)例:實(shí)例:setContentType.jspDate:2022年2月9日星期三32常用方法(四)常用方法(四)void setStatus(int sc)設(shè)置狀態(tài)碼設(shè)置狀態(tài)碼實(shí)例:實(shí)例:status/Date:2022年2月9日星期三33常用方法(五)常用方法(五)public abstract void addCookie(Cookie cookie)將指定的將指定的Cookie加入響應(yīng)。加入響應(yīng)。Date:2022年2月9日星期三34綜合實(shí)例綜合實(shí)例利用利用response對(duì)象實(shí)現(xiàn)登錄跳轉(zhuǎn)對(duì)象實(shí)現(xiàn)登錄跳轉(zhuǎn)文

28、件:文件:login/Date:2022年2月9日星期三35session對(duì)象對(duì)象session對(duì)象的作用對(duì)象的作用P111Date:2022年2月9日星期三36session對(duì)象對(duì)象session對(duì)象:記錄每個(gè)客戶端的訪問狀態(tài),以便于跟對(duì)象:記錄每個(gè)客戶端的訪問狀態(tài),以便于跟蹤每個(gè)客戶端的操作狀態(tài),它所實(shí)現(xiàn)的接口為:蹤每個(gè)客戶端的操作狀態(tài),它所實(shí)現(xiàn)的接口為:javax.servlet.http.HttpSession。我們可以在。我們可以在jsp頁面頁面中直接使用中直接使用session對(duì)象也可以通過對(duì)象也可以通過pageContext.getSession()或或request.getSe

29、ssion()()方法重新獲取。方法重新獲取。Date:2022年2月9日星期三37session對(duì)象對(duì)象session的工作原理:的工作原理:客戶首次訪問服務(wù)器時(shí),服務(wù)器就會(huì)為該客戶分配一個(gè)客戶首次訪問服務(wù)器時(shí),服務(wù)器就會(huì)為該客戶分配一個(gè)session對(duì)象,同時(shí)為該對(duì)象,同時(shí)為該session對(duì)象指定一個(gè)唯一的對(duì)象指定一個(gè)唯一的ID,并,并將該將該ID號(hào)發(fā)送到客戶端并寫入到號(hào)發(fā)送到客戶端并寫入到Cookie中,使得客戶端能夠中,使得客戶端能夠和服務(wù)器的和服務(wù)器的session建立意義對(duì)象關(guān)系。建立意義對(duì)象關(guān)系。當(dāng)客戶繼續(xù)訪問服務(wù)上的其他資源時(shí),服務(wù)器繼續(xù)使用該當(dāng)客戶繼續(xù)訪問服務(wù)上的其他資源時(shí)

30、,服務(wù)器繼續(xù)使用該session再為該客戶分配新的再為該客戶分配新的session,直到客戶端瀏覽器關(guān),直到客戶端瀏覽器關(guān)閉、超時(shí)或調(diào)用閉、超時(shí)或調(diào)用session的的invalidate()方法時(shí)期失效,客戶方法時(shí)期失效,客戶端與服務(wù)器的會(huì)話結(jié)束。端與服務(wù)器的會(huì)話結(jié)束。當(dāng)客戶端重新打開瀏覽器訪問網(wǎng)站時(shí),服務(wù)器會(huì)重新為客戶當(dāng)客戶端重新打開瀏覽器訪問網(wǎng)站時(shí),服務(wù)器會(huì)重新為客戶分配一個(gè)分配一個(gè)session對(duì)象。對(duì)象。常見功能常見功能: 保存用戶的登錄信息保存用戶的登錄信息,購物車等購物車等Date:2022年2月9日星期三38常用方法常用方法(一一)session的方法主要用于的方法主要用于屬性

31、操作屬性操作和和會(huì)話管理會(huì)話管理:public void setAttribute(String name,Java.lang.Object value)設(shè)定指定名字的屬性的值,并且將它添加到設(shè)定指定名字的屬性的值,并且將它添加到session對(duì)象中,如果這個(gè)屬性存在,則更改該屬性的值。對(duì)象中,如果這個(gè)屬性存在,則更改該屬性的值。Date:2022年2月9日星期三39常用方法(二)常用方法(二)public Object getAttribute(String name)獲取指定名字的屬性的值,如果該屬性不存在,則返獲取指定名字的屬性的值,如果該屬性不存在,則返回回null。Date:2022

32、年2月9日星期三40常用方法(三)常用方法(三)public void removeAttribute(String name)刪除指定的刪除指定的session屬性屬性若該屬性不存在則出現(xiàn)異常若該屬性不存在則出現(xiàn)異常Date:2022年2月9日星期三41常用方法(四)常用方法(四)public void invalidate()使使session無效無效Date:2022年2月9日星期三42常用方法(五)常用方法(五)public String getId():獲取當(dāng)前的會(huì)話:獲取當(dāng)前的會(huì)話ID每個(gè)會(huì)話在服務(wù)器端存在一個(gè)唯一的標(biāo)識(shí):會(huì)話每個(gè)會(huì)話在服務(wù)器端存在一個(gè)唯一的標(biāo)識(shí):會(huì)話ID,sess

33、ion對(duì)象發(fā)送到瀏覽器的唯一數(shù)據(jù)就是會(huì)話對(duì)象發(fā)送到瀏覽器的唯一數(shù)據(jù)就是會(huì)話ID,它,它一般存儲(chǔ)在一般存儲(chǔ)在Cookie中。中。Date:2022年2月9日星期三43常用方法(六)常用方法(六)public void setMaxInactiveInterval(int interval)設(shè)設(shè)置會(huì)話的最大持續(xù)時(shí)間,單位是秒,負(fù)數(shù)表明會(huì)話永置會(huì)話的最大持續(xù)時(shí)間,單位是秒,負(fù)數(shù)表明會(huì)話永不失效。不失效。public int getMaxInactiveInterval()獲取會(huì)話的最大持續(xù)時(shí)間獲取會(huì)話的最大持續(xù)時(shí)間注意:時(shí)間的計(jì)數(shù)是以毫秒為單位。注意:時(shí)間的計(jì)數(shù)是以毫秒為單位。Date:2022年2

34、月9日星期三44實(shí)例實(shí)例1:各種方法練習(xí):各種方法練習(xí)session.jsp實(shí)例實(shí)例2:注冊(cè)功能:注冊(cè)功能register/實(shí)例實(shí)例3:購物車:購物車shopcart/Date:2022年2月9日星期三45application對(duì)象對(duì)象application對(duì)象:負(fù)責(zé)提供應(yīng)用程序在服務(wù)器運(yùn)行時(shí)對(duì)象:負(fù)責(zé)提供應(yīng)用程序在服務(wù)器運(yùn)行時(shí)的一些全局信息,它在服務(wù)器啟動(dòng)時(shí)創(chuàng)建,直到服務(wù)的一些全局信息,它在服務(wù)器啟動(dòng)時(shí)創(chuàng)建,直到服務(wù)器關(guān)閉時(shí)消失,它是實(shí)現(xiàn)的是器關(guān)閉時(shí)消失,它是實(shí)現(xiàn)的是javax.servlet.ServletContext。該接口主要提供了四類類方法:該接口主要提供了四類類方法: 接口容器相

35、關(guān)信息的方法:接口容器相關(guān)信息的方法:int getMajorVersion() 獲取獲取Container的主版本號(hào),如的主版本號(hào),如2int getminorVersion() 獲取獲取Container的次版本號(hào),如的次版本號(hào),如4String getServerInfo() 獲取獲取Container的名稱和版本的名稱和版本Date:2022年2月9日星期三46application對(duì)象對(duì)象 有關(guān)服務(wù)器的路徑和文件的方法有關(guān)服務(wù)器的路徑和文件的方法String getMimeType(String file) 獲取指定文件的獲取指定文件的MIME類型類型ServletContext g

36、etContext(String uripath)獲取指定獲取指定URL的的application contextString getRealPath(String path)獲取本地獲取本地path的絕對(duì)路徑。的絕對(duì)路徑。 有關(guān)信息記錄的方法:有關(guān)信息記錄的方法:void log(String msg) 將信息寫入將信息寫入log文件中文件中void log(String msg,Throwable throwable)將異常信息寫入將異常信息寫入log文件中文件中 有關(guān)屬性操作的方法有關(guān)屬性操作的方法public java.lang.Object getAttribute()返回返回nam

37、e指定的屬性值,若指定的屬性值,若name不存在則返回不存在則返回nullpublic java.util.Enumeration getAttributeNames()返回返回request對(duì)象所有屬性的名稱,并將其封裝在對(duì)象所有屬性的名稱,并將其封裝在Enumeration對(duì)象中。對(duì)象中。public void setAttribute(java.lang.String name,java.lang.Object o)設(shè)置請(qǐng)求對(duì)象中的一個(gè)屬性。設(shè)置請(qǐng)求對(duì)象中的一個(gè)屬性。Date:2022年2月9日星期三47主要要求掌握方法主要要求掌握方法getAttribute(String name)取

38、出取出application對(duì)象中對(duì)象中name屬性的值屬性的值setAttribute(String name,Java.lang.object o)用對(duì)象用對(duì)象o來初始化來初始化name指定的屬性指定的屬性 實(shí)例實(shí)例1:application.jsp實(shí)例實(shí)例2:chat/Date:2022年2月9日星期三48pageContext對(duì)象對(duì)象pageContext對(duì)象:一般用戶設(shè)置對(duì)象:一般用戶設(shè)置/獲取當(dāng)前獲取當(dāng)前JSP頁面的一些屬頁面的一些屬性,也能夠獲取頁面的其他隱含對(duì)象性,也能夠獲取頁面的其他隱含對(duì)象(out、request、response、session、application等)

39、及其所支持的屬性,等)及其所支持的屬性,它實(shí)現(xiàn)的接口為它實(shí)現(xiàn)的接口為javax.servlet.jsp.PageContext。該接口主要提供了兩類方法:該接口主要提供了兩類方法: 用戶獲得屬性得方法:用戶獲得屬性得方法:Object getAttribute(String name,int scope),返回指定范圍、指定名,返回指定范圍、指定名稱的屬性值稱的屬性值Enumeration getAttributeNameInScope(int scope)返回指定范圍所返回指定范圍所有屬性的名稱。有屬性的名稱。void setAttribute(String name,Object o)將指

40、定的屬性放置到頁面范圍將指定的屬性放置到頁面范圍void setAttribute(String name,Object o,int scope)將指定的屬性放將指定的屬性放置到指定的范圍置到指定的范圍getAttributesScope(String name)返回指定屬性的作用范圍返回指定屬性的作用范圍void removeAttrbute(String name)刪除頁面范圍內(nèi)指定的屬性)刪除頁面范圍內(nèi)指定的屬性void removeAttribute(String name,int scope) 刪除指定范圍內(nèi)、指定刪除指定范圍內(nèi)、指定的屬性。的屬性。Date:2022年2月9日星期三

41、49pageContext對(duì)象對(duì)象不過在使用下列參數(shù)時(shí)需要指定范圍參數(shù):不過在使用下列參數(shù)時(shí)需要指定范圍參數(shù):Object getAttribute(String name,int scope)Enumeration getAttributeNameInScope(int scope)void setAttribute(String name,Object o,int scope)void removeAttribute(String name,int scope)其中其中scope的取值為的取值為javax.servlet.jsp.PageContext類所提供的四個(gè)靜態(tài)常量:類所提供的四個(gè)

42、靜態(tài)常量:常量名稱常量名稱說明說明PAGE_SCOPEpageContext對(duì)象的屬性范圍對(duì)象的屬性范圍REQUEST_SCOPErequest對(duì)象的屬性范圍對(duì)象的屬性范圍SESSION_SCOPEsession對(duì)象的屬性范圍對(duì)象的屬性范圍APPLICATION_SCOPEapplication對(duì)象的屬性范圍對(duì)象的屬性范圍Date:2022年2月9日星期三50pageContext對(duì)象對(duì)象用于獲取其他隱含對(duì)象的方法用于獲取其他隱含對(duì)象的方法Exception getException()獲取當(dāng)前頁面出現(xiàn)的異常(即獲取當(dāng)前頁面出現(xiàn)的異常(即exception對(duì)對(duì)象),不過此時(shí)頁面應(yīng)為錯(cuò)誤處理頁象

43、),不過此時(shí)頁面應(yīng)為錯(cuò)誤處理頁.JspWriter getOut()獲取當(dāng)前頁面的輸出流獲取當(dāng)前頁面的輸出流,即即out對(duì)象對(duì)象Object getPage()獲取當(dāng)前頁面的獲取當(dāng)前頁面的Servlet對(duì)象,即對(duì)象,即page對(duì)象對(duì)象ServletRequest getRequest()獲取當(dāng)前頁面的請(qǐng)求對(duì)象,即獲取當(dāng)前頁面的請(qǐng)求對(duì)象,即request對(duì)象對(duì)象ServletResponse getResponse()獲取當(dāng)前頁面的響應(yīng)對(duì)象,即獲取當(dāng)前頁面的響應(yīng)對(duì)象,即Response對(duì)象對(duì)象ServletConfig getServletConfig()獲取當(dāng)前頁面的獲取當(dāng)前頁面的Servle

44、tConfig對(duì)象,即對(duì)象,即config對(duì)象對(duì)象ServletContext getServletContext()獲取當(dāng)前的獲取當(dāng)前的ServletContext對(duì)象,即對(duì)象,即application對(duì)象對(duì)象HttpSession getSession()獲取當(dāng)前頁面的會(huì)話對(duì)象,即獲取當(dāng)前頁面的會(huì)話對(duì)象,即session對(duì)象對(duì)象Date:2022年2月9日星期三51config對(duì)象對(duì)象config對(duì)象:主要用來獲取服務(wù)器的配置信息,它實(shí)對(duì)象:主要用來獲取服務(wù)器的配置信息,它實(shí)現(xiàn)的是現(xiàn)的是javax.servlet.ServletConfig接口。接口。config對(duì)象的常用方法:對(duì)象的常用

45、方法:public String getInitParameter(String name) 獲取服務(wù)器獲取服務(wù)器指定指定name參數(shù)的初始值參數(shù)的初始值public java.util.Enumeration getInitParameterNames()獲獲取服務(wù)器所有初始參數(shù)的名字。取服務(wù)器所有初始參數(shù)的名字。public ServletContext getServletContext()獲取獲取Servlet的的上下文上下文public String getServletName() 獲取獲取Servlet的服務(wù)器名。的服務(wù)器名。Date:2022年2月9日星期三52page對(duì)象對(duì)象

46、page對(duì)象,代表對(duì)象,代表JSP文件編譯后的文件編譯后的Servlet類對(duì)象,實(shí)類對(duì)象,實(shí)際指的就是際指的就是JSP頁面本身。頁面本身。實(shí)際很少使用,因此在此略過。實(shí)際很少使用,因此在此略過。Date:2022年2月9日星期三53exception對(duì)象對(duì)象exception對(duì)象,作用是顯示異常信息,代表了對(duì)象,作用是顯示異常信息,代表了JSP文件運(yùn)行時(shí)文件運(yùn)行時(shí)所產(chǎn)生的例外對(duì)象,時(shí)所產(chǎn)生的例外對(duì)象,時(shí)java.lang.Throwable的一個(gè)實(shí)例,只有的一個(gè)實(shí)例,只有在包含在包含的頁面中才可以使用,的頁面中才可以使用,在一般的在一般的JSP文件中使用該對(duì)象會(huì)導(dǎo)致無法編譯文件中使用該對(duì)象會(huì)導(dǎo)

47、致無法編譯JSP文件。文件。常用的方法常用的方法返回錯(cuò)誤信息返回錯(cuò)誤信息public String getMessage()public String toString()輸出詳細(xì)錯(cuò)誤信息:輸出詳細(xì)錯(cuò)誤信息:public void printStackTrace()public void printStackTrace(PrintStream ps)public void printStackTrace(PrintWriter pw)實(shí)例:實(shí)例:math.jsp和和exception.jspDate:2022年2月9日星期三54內(nèi)置對(duì)象總結(jié)內(nèi)置對(duì)象總結(jié)需要注意的問題是對(duì)象名的寫法,包括這些對(duì)象

48、方法的調(diào)用也需要注意的問題是對(duì)象名的寫法,包括這些對(duì)象方法的調(diào)用也要書寫正確,因?yàn)橐獣鴮懻_,因?yàn)镴ava語言本身是大小寫敏感的。語言本身是大小寫敏感的。JSP技術(shù)提供給開發(fā)人員一項(xiàng)傳遞數(shù)據(jù)的機(jī)制,那就是使用技術(shù)提供給開發(fā)人員一項(xiàng)傳遞數(shù)據(jù)的機(jī)制,那就是使用setAttribute()和和getAttribute()方法。方法。有時(shí)候會(huì)將有時(shí)候會(huì)將request、session、application和和pageContext歸歸為一類,原因是他們都能夠借助為一類,原因是他們都能夠借助setAttribute()和和getAttribute()方法來設(shè)定和獲取相應(yīng)的屬性方法來設(shè)定和獲取相應(yīng)的屬性

49、(Attribute)。四個(gè)內(nèi)置對(duì)象之間最大的不同在于作用范圍四個(gè)內(nèi)置對(duì)象之間最大的不同在于作用范圍(scope)不一樣。不一樣。 pageContext、request、session和和application內(nèi)置對(duì)應(yīng)的作內(nèi)置對(duì)應(yīng)的作用范圍分別為用范圍分別為page、request、session和和application。Date:2022年2月9日星期三555.2 對(duì)象有效范圍對(duì)象有效范圍Date:2022年2月9日星期三56對(duì)象有效范圍對(duì)象有效范圍page范圍,指的是單一范圍,指的是單一JSP頁面的單位。頁面的單位。若要將數(shù)據(jù)存入若要將數(shù)據(jù)存入page范圍時(shí),可以用范圍時(shí),可以用pag

50、eContext對(duì)對(duì)象的象的setAttribute()方法;若要獲取方法;若要獲取page范圍的數(shù)據(jù)時(shí),范圍的數(shù)據(jù)時(shí),可以使用可以使用pageContext對(duì)象的對(duì)象的getAttribute()方法。方法。實(shí)例:實(shí)例:pageScopeSet.jsp、pageScopeGet.jspDate:2022年2月9日星期三57對(duì)象有效范圍對(duì)象有效范圍request范圍范圍request對(duì)象范圍是指在一個(gè)對(duì)象范圍是指在一個(gè)JSP頁面發(fā)出請(qǐng)求到另一頁面發(fā)出請(qǐng)求到另一個(gè)頁面之間,隨后這個(gè)屬性就失效。個(gè)頁面之間,隨后這個(gè)屬性就失效。設(shè)定設(shè)定request范圍時(shí)可以利用范圍時(shí)可以利用request對(duì)象的對(duì)

51、象的setAttribute()和和getAttribute()方法。方法。實(shí)例:實(shí)例:requestScopeSet.jsp、requestScopeGet.jsp除了利用轉(zhuǎn)向除了利用轉(zhuǎn)向(forward)的方法可以存取的方法可以存取request對(duì)象對(duì)象的數(shù)據(jù)以外,使用包含的數(shù)據(jù)以外,使用包含(include)動(dòng)作也可以使用動(dòng)作也可以使用request對(duì)象進(jìn)行傳值。對(duì)象進(jìn)行傳值。Date:2022年2月9日星期三58對(duì)象有效范圍對(duì)象有效范圍session范圍范圍首先理解會(huì)話的含義:首先理解會(huì)話的含義:會(huì)話失效的條件:會(huì)話失效的條件:用戶關(guān)閉瀏覽器用戶關(guān)閉瀏覽器用戶不活動(dòng)時(shí)間超過服務(wù)器的限制

52、用戶不活動(dòng)時(shí)間超過服務(wù)器的限制調(diào)用相應(yīng)的語句使會(huì)話失效調(diào)用相應(yīng)的語句使會(huì)話失效實(shí)例:實(shí)例:sessionScopeSet.jsp和和sessionScopeGet.jspDate:2022年2月9日星期三59對(duì)象有效范圍對(duì)象有效范圍application范圍范圍application的范圍為服務(wù)器從啟動(dòng)到關(guān)閉為止。的范圍為服務(wù)器從啟動(dòng)到關(guān)閉為止。application的作用范圍最大、存在事件也最久,所以的作用范圍最大、存在事件也最久,所以使用時(shí)需要特別注意,否則會(huì)造成服務(wù)器負(fù)載過重的使用時(shí)需要特別注意,否則會(huì)造成服務(wù)器負(fù)載過重的情況出現(xiàn)。情況出現(xiàn)。實(shí)例:實(shí)例:applicationScopeS

53、et.jsp和和applicationScopeGet.jspDate:2022年2月9日星期三605.3 CookieDate:2022年2月9日星期三61CookieHTTP協(xié)議是一種無連接的協(xié)議(主要說明為什么需要協(xié)議是一種無連接的協(xié)議(主要說明為什么需要Cookie和和session)。)。Cookie是是Web服務(wù)器保存在用戶硬盤上的一段文本。服務(wù)器保存在用戶硬盤上的一段文本。Cookie允允許一個(gè)許一個(gè)Web站點(diǎn)在用戶的電腦上保存信息并且隨后再取回它。站點(diǎn)在用戶的電腦上保存信息并且隨后再取回它。信息的片斷以信息的片斷以名名/值值對(duì)對(duì)(name-value pairs)的形式儲(chǔ)存。的

54、形式儲(chǔ)存。” Cookie存在與客戶端,存在與客戶端,session存在與服務(wù)器存在與服務(wù)器Cookie主要用戶保存脫機(jī)數(shù)據(jù),而主要用戶保存脫機(jī)數(shù)據(jù),而session內(nèi)置對(duì)象主要用于跟蹤內(nèi)置對(duì)象主要用于跟蹤用戶會(huì)話用戶會(huì)話但他們也存在一些共同點(diǎn),那就是不論是但他們也存在一些共同點(diǎn),那就是不論是cookie還是還是session內(nèi)置內(nèi)置對(duì)象都需要瀏覽器支持對(duì)象都需要瀏覽器支持cookie并且沒有禁用并且沒有禁用cookie。Date:2022年2月9日星期三62Cookie作用:作用:Cookie對(duì)象通常用于在瀏覽器端保存會(huì)話過程對(duì)象通常用于在瀏覽器端保存會(huì)話過程中的一些參數(shù)。中的一些參數(shù)。當(dāng)瀏

55、覽器請(qǐng)求服務(wù)器的頁面時(shí)自動(dòng)發(fā)送到服務(wù)器上。當(dāng)瀏覽器請(qǐng)求服務(wù)器的頁面時(shí)自動(dòng)發(fā)送到服務(wù)器上。Cookie是文本文件,保存路徑是文本文件,保存路徑C:Documents and Settings登錄用戶名登錄用戶名CookiesCookie的常用用途:的常用用途:Cookie是站點(diǎn)跟蹤特定訪問者訪問的次數(shù),最后訪問的時(shí)是站點(diǎn)跟蹤特定訪問者訪問的次數(shù),最后訪問的時(shí)間以及訪問者進(jìn)入站點(diǎn)的路徑;間以及訪問者進(jìn)入站點(diǎn)的路徑;Cookie能夠幫助站點(diǎn)統(tǒng)計(jì)用戶個(gè)人資料以實(shí)現(xiàn)各種各樣的能夠幫助站點(diǎn)統(tǒng)計(jì)用戶個(gè)人資料以實(shí)現(xiàn)各種各樣的個(gè)性化服務(wù)。個(gè)性化服務(wù)。cookie實(shí)現(xiàn)自動(dòng)登錄功能,使得用戶不需要輸入用戶名和實(shí)現(xiàn)自

56、動(dòng)登錄功能,使得用戶不需要輸入用戶名和密碼就可以進(jìn)入曾經(jīng)瀏覽的站點(diǎn)。密碼就可以進(jìn)入曾經(jīng)瀏覽的站點(diǎn)。Date:2022年2月9日星期三63寫入寫入Cookie方法方法對(duì)于cookie的寫入,要結(jié)合response對(duì)象來實(shí)現(xiàn)寫入Cookie的主要步驟:1.創(chuàng)建創(chuàng)建Cookie對(duì)象對(duì)象2.設(shè)定設(shè)定Cookie的屬性(一般設(shè)置的屬性(一般設(shè)置Cookie的有效期)的有效期)3.調(diào)用調(diào)用response.addCookie(Cookie c)方法將其寫入到客戶端方法將其寫入到客戶端示例:示例:Date:2022年2月9日星期三64設(shè)置設(shè)置Cookie屬性屬性返回返回類型類型方法名方法名完成功能完成功能S

57、tringgetValue()返回返回Cookie的值的值intgetVersion()返回返回Cookie所遵從的協(xié)議版本所遵從的協(xié)議版本voidsetComment(String msg)設(shè)置設(shè)置cookie的注釋的注釋voidsetDomain(String domain) 設(shè)置設(shè)置cookie中適用的域名中適用的域名voidsetMaxAge(int second)設(shè)置設(shè)置cookie的存活周期的存活周期voidsetPath(String path);設(shè)置能夠讀取設(shè)置能夠讀取Cookie的路徑的路徑voidsetSecure(boolean flag)設(shè)置瀏覽器是否需要使用安全協(xié)議設(shè)

58、置瀏覽器是否需要使用安全協(xié)議才能讀取該才能讀取該cookievoidsetValue()設(shè)置設(shè)置Cookie的值的值voidsetVersion()設(shè)置設(shè)置Cookie的版本號(hào)的版本號(hào)Date:2022年2月9日星期三65CookieCookie的有效期的有效期1)1)過期屬性是按秒為單位記錄的,使用正整數(shù)過期屬性是按秒為單位記錄的,使用正整數(shù)2)2)負(fù)值表示該負(fù)值表示該cookiecookie的生存期是當(dāng)前瀏覽器會(huì)話的生存期是當(dāng)前瀏覽器會(huì)話3)3)零值表示立即刪除該零值表示立即刪除該cookiecookie如果不設(shè)置如果不設(shè)置cookiecookie的有效期,就不能在硬盤上保存的有效期,就不能在硬盤上保存cookiecookie的的信息,一旦瀏覽器關(guān)閉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論