国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

Servlet&jsp基礎(chǔ):第二部分

2019-11-14 23:00:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Servlet&jsp基礎(chǔ):第二部分聲明:原創(chuàng)作品,轉(zhuǎn)載時(shí)請(qǐng)注明文章來(lái)自SAP師太技術(shù)博客( 博/客/園www.cnblogs.com):www.survivalescaperooms.com/jiangzhengjun,并以超鏈接形式標(biāo)明文章原始出處,否則將追究法律責(zé)任!原文鏈接:http://www.survivalescaperooms.com/jiangzhengjun/p/4289271.html

HttpServletResponse. 20

產(chǎn)生響應(yīng)狀態(tài)行... 20

HTTP狀態(tài)常量... 20

setStatus(int sc)20

sendError21

構(gòu)建響應(yīng)消息頭... 21

addHeader與setHeader21

addIntHeader與setIntHeader21

addDateHeader與setDateHeader22

setContentLength. 22

setContentType. 22

setCharacterEncoding. 22

setLocale. 23

containsHeader23

響應(yīng)頭的應(yīng)用... 23

讓瀏覽器定時(shí)刷新網(wǎng)頁(yè)或跳轉(zhuǎn)到其他頁(yè)面... 23

禁止瀏覽器緩存當(dāng)前文檔內(nèi)容... 24

使用<meta>標(biāo)簽?zāi)M響應(yīng)消息頭... 24

創(chuàng)建響應(yīng)正文... 24

getOutputStream與getWriter方法... 24

輸出緩沖區(qū)... 25

文件下載... 27

<img>動(dòng)態(tài)圖像... 28

請(qǐng)求轉(zhuǎn)發(fā)與請(qǐng)求重定向... 30

RequestDispatcher接口... 30

用include方法實(shí)現(xiàn)資源包含... 32

輸出靜態(tài)內(nèi)容時(shí)默認(rèn)Servlet所采用的流分析... 33

用forward方法實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)... 34

RequestDispatcher.forward方式應(yīng)用細(xì)節(jié)... 35

用sendRedirect方法實(shí)現(xiàn)請(qǐng)求重定向... 38

請(qǐng)求重定向(sendRedirect)與請(qǐng)求轉(zhuǎn)發(fā)(forward)的區(qū)別... 39

HttpServletResponse

image007

產(chǎn)生響應(yīng)狀態(tài)行

HTTP響應(yīng)消息分為三們部分:狀態(tài)行、響應(yīng)消息頭、消息實(shí)體。

HTTP狀態(tài)常量

HttpServletResponse定義了若干與HTTP響應(yīng)狀態(tài)碼對(duì)應(yīng)的常量,以SC(Status Code)開頭。

setStatus(int sc)

響應(yīng)狀態(tài)行:HTTP版本+狀態(tài)代碼+提示信息

HTTP/1.1 200 OK

用于設(shè)置HTTP響應(yīng)消息的狀態(tài)碼,并生成響應(yīng)狀態(tài)行。正常情況下的響應(yīng)碼為200,Web服務(wù)器默認(rèn)自動(dòng)

產(chǎn)生這種正常情況下的響應(yīng)狀態(tài)行,所以,通常情況下的Servlet不需要調(diào)用該方法來(lái)指定狀態(tài)代碼和產(chǎn)生響應(yīng)狀態(tài)行。只有在HTTP響應(yīng)消息中使用特殊的狀態(tài)碼時(shí),才需要調(diào)用這個(gè)方法

sendError

sendError(int sc)

sendError(int sc, java.lang.String msg)

用于發(fā)送表示錯(cuò)誤信息的狀態(tài)碼(如404,找不到資源)。msg用于提示說(shuō)有出錯(cuò)的原因,該文本信息將出現(xiàn)在發(fā)送給客戶端的正文本內(nèi)容中,注,該消息不是用來(lái)替換HTTP響應(yīng)狀態(tài)行中提示信息的,它只是出現(xiàn)在實(shí)體部分。

response.sendError(405,"xxxxx"); 返回的響應(yīng)狀態(tài)行如下:

HTTP/1.1 405Method Not Allowed

構(gòu)建響應(yīng)消息頭addHeader與setHeader

http://www.ietf.org/rfc/rfc2047.txt

addHeader(java.lang.String name, java.lang.String value)

setHeader(java.lang.String name, java.lang.String value)

如果已經(jīng)設(shè)置過(guò)同名的響應(yīng)并沒(méi)有,setHeader方法將用新的設(shè)置值取代原來(lái)的設(shè)置值,而addHeader方法則是增加一個(gè)同名的響應(yīng)頭。HTTP響應(yīng)消息中允許同一名稱的頭字段出現(xiàn)多次。

addIntHeader與setIntHeader

addIntHeader(java.lang.String name, int value)

setIntHeader(java.lang.String name, int value)

與addHeader與setHeader不同的是它們傳進(jìn)的值可以直接是一個(gè)整數(shù)值。一般很少用這兩個(gè)方法,使用前面兩個(gè)完全一樣。

response.setHeader("Refresh", "2"); 響應(yīng)頭加上了Refresh頭如下:

Refresh: 2

注,頭的值一般不會(huì)使用雙引號(hào)引起來(lái)的。

addDateHeader與setDateHeader

addDateHeader(java.lang.String name, long date)

setDateHeader(java.lang.String name, long date)

這兩個(gè)方法專門用于設(shè)置包含日期值的響應(yīng)頭的方法。HTTP響應(yīng)頭中的日期通常都是GMT格式。它們避免了將毫秒數(shù)轉(zhuǎn)換成GMT格式時(shí)間的麻煩。

setContentLength

setContentLength(int len)

setContentLength方法用于設(shè)置響應(yīng)消息的實(shí)體內(nèi)容的大小,單位為字節(jié)。對(duì)于HTTP協(xié)議來(lái)說(shuō),這個(gè)方法就是設(shè)置Content-Length響應(yīng)頭字段的值。因?yàn)闉g覽器與Web服務(wù)器之間使用持久(Keep-alive的HTTP連接,如果Web服務(wù)器沒(méi)有采用chunked傳輸編碼方式,那么它必須在每個(gè)應(yīng)答中發(fā)送一個(gè)Content-Length的響應(yīng)頭來(lái)表示各個(gè)實(shí)體內(nèi)容的長(zhǎng)度,以便客戶端能夠分辨出上一個(gè)響應(yīng)內(nèi)容的結(jié)束位置。一般來(lái)說(shuō),Setvlet程序不必調(diào)用setContentLength方法來(lái)設(shè)置Content-Length頭字段,因?yàn)镾ervlet引擎在向客戶端實(shí)際輸出響應(yīng)內(nèi)容時(shí),它可以自動(dòng)設(shè)置Content-Length頭字段或采用chunked傳輸編碼方式。

setContentType

設(shè)置響應(yīng)實(shí)體的MIME類型,即對(duì)Content-Type頭的設(shè)置。如響應(yīng)的實(shí)體為jpeg圖片,則需要將響應(yīng)內(nèi)容的類型設(shè)置為“image/jpeg”;如果是xml,則要設(shè)置為“text/xml”。

頁(yè)網(wǎng)的類型通常是“text/html”,所以如果以是Servlet程序的方式輸出網(wǎng)頁(yè)內(nèi)容,則需要顯試地調(diào)用setContentType方法來(lái)指定,否則響應(yīng)頭中不存在Content-Type并沒(méi)有,那么瀏覽器會(huì)將內(nèi)容以“text/plain”內(nèi)型來(lái)解釋,即以原文本的形式展示。當(dāng)然如果請(qǐng)求的資源不是Servlet,比如是xx.html,則Web容器會(huì)根據(jù)你請(qǐng)求的資源的文件的擴(kuò)展外來(lái)在conf/web.xml找相應(yīng)的已配置的MIME類型,然后自動(dòng)加上這個(gè)頭信息,并設(shè)置成相應(yīng)的MIME類型。

在MIME類型后面還可以指定響應(yīng)內(nèi)容所使用的字符集類型,如,“text/html; charset=GB2312”,如果沒(méi)有指定,在Tomcat5.x產(chǎn)生的響應(yīng)頭的MIME類型后默認(rèn)為ISO8859-1的字符集編碼,而Tocmat4.x將不會(huì)自動(dòng)加上。

注,一般charset全小寫,但有的廠商是charSet

setCharacterEncoding

setCharacterEncoding是在2.4規(guī)范中新增的方法。用于設(shè)置輸出內(nèi)容的MIME聲明中的字符集編碼,對(duì)于HTTP來(lái)說(shuō),即設(shè)置Content-Type頭字段中的字符集編碼部分。

注,如果沒(méi)有設(shè)置Content-Type頭字段,該方法的設(shè)置的編碼不會(huì)出現(xiàn)在響應(yīng)頭中(因?yàn)閷?shí)體內(nèi)容的編碼方式只能存放在在Content-Type的后部分),但是它的設(shè)置結(jié)果仍然決定了輸出內(nèi)容的編碼方式(即直接使用out內(nèi)置對(duì)象輸出字符串時(shí)會(huì)采用該方法設(shè)置的編碼方式,當(dāng)然如果使用的是response.getOutputStream時(shí),就談不上編碼方式了,因?yàn)镺utputStream輸出不涉及到流)。另外,該方法的比setContentType和setLocale方法的優(yōu)先權(quán)高,它的設(shè)置會(huì)覆蓋這兩個(gè)方法所設(shè)置的字符集編碼。

setLocale

setLocale(java.util.Locale loc)

用于設(shè)置響應(yīng)消息的本地化信息,對(duì)HTTP來(lái)說(shuō),它將設(shè)置Content-Language響應(yīng)頭和Content-Type頭中的字符集編碼部分。如果沒(méi)有設(shè)置Content-Type頭,該方法設(shè)置的字符集不會(huì)出現(xiàn)在響應(yīng)頭中(因?yàn)閷?shí)體內(nèi)容的編碼方式只能存放在在Content-Type的后部分),但是它的設(shè)置仍然決定了輸出內(nèi)容的編碼方式(即直接使用out內(nèi)置對(duì)象輸出字符串時(shí)會(huì)采用該方法設(shè)置的編碼方式,當(dāng)然如果使用的是response.getOutputStream時(shí),就談不上編碼方式了,因?yàn)镺utputStream輸出不涉及到流)。

注,如果調(diào)用了setCharacterEncoding或setContentType方法已指定了響應(yīng)內(nèi)容的字符集,則該方法將不再起效。

由于Local對(duì)象中只包含了語(yǔ)言和國(guó)家的地區(qū)信息,并沒(méi)有包含字符集編碼的信息,所以需要在web.xml中來(lái)配置:

<locale-encoding-mapping-list>

<locale-encoding-mapping>

<locale>zh_CN</locale>

<encoding>GB2312</encoding>

</locale-encoding-mapping>

</locale-encoding-mapping-list>

containsHeader

boolean containsHeader(java.lang.String name)

containsHeader用于檢查某個(gè)名稱的頭是否已經(jīng)被設(shè)置

響應(yīng)頭的應(yīng)用讓瀏覽器定時(shí)刷新網(wǎng)頁(yè)或跳轉(zhuǎn)到其他頁(yè)面

// response.setHeader("Refresh", "2");

response.setHeader("Refresh", "2;URL=ServletContextTest");

// response.setHeader("Refresh","2;URL=http://localhost:8080/myapp/ServletContextTest");

禁止瀏覽器緩存當(dāng)前文檔內(nèi)容

有三個(gè)HTTP響應(yīng)頭可以禁止瀏覽器緩存當(dāng)前頁(yè)面:

response.setDateHeader("Expires", 0);

response.setHeader("

response.setHeader("Cache-Control","no-cache");

不是所有的瀏覽器都能完全支持上面的三個(gè)響應(yīng)頭,因此最好是同時(shí)使用上面的三個(gè)響應(yīng)頭,只要瀏覽器能支持其中任何一種形式,就能禁止緩存頁(yè)面。

使用<meta>標(biāo)簽?zāi)M響應(yīng)消息頭

上面我們是通過(guò)response內(nèi)置對(duì)象來(lái)設(shè)置響應(yīng)頭的,這只能在Servlet與jsp里使用,如果編寫的是靜態(tài)的html時(shí),我們?nèi)绻O(shè)置響應(yīng)消息頭,則只能借助于html標(biāo)簽<meta>的http-equiv屬性來(lái)實(shí)現(xiàn)。

<meta http-equiv="Expires"content="0">

<meta http-equiv="Pragma"content="no-cache">

<meta http-equiv="Cache-Control"content="no-cache">

在靜態(tài)的HTML里我們一般顯示地設(shè)置頁(yè)面的編碼方式:

<meta http-equiv="Content-Type"content="text/html; charset=GB2312">

注,如果在Servlet或Jsp頁(yè)面里使用了<meta>來(lái)設(shè)置編碼方式,而又使用也服務(wù)器端的設(shè)置方式,則以服務(wù)器方式的為準(zhǔn),也就是以響應(yīng)頭里的Content-Type信息為準(zhǔn)。

創(chuàng)建響應(yīng)正文getOutputStream與getWriter方法

ServletOutputStreamgetOutputStream() throws java.io.IOException

java.io.PrintWritergetWriter() throws java.io.IOException

ServletOutputStream為OutputStream的子類。

getOutputStream返回的是字節(jié)流,不涉及到編碼

getWriter返回的是字符流,涉及編碼方式

這兩個(gè)方法互相排斥,調(diào)用了其中任何一個(gè)方法后,就不能再調(diào)用另一方法。在Servlet里寫以下兩行:

Word-spacing: 0px; text-transform: none; word-break: normal; margin: 0cm 0cm 0pt; letter-spacing: normal; line-heig

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎左旗| 安达市| 巢湖市| 咸丰县| 乃东县| 富锦市| 太康县| 始兴县| 莱阳市| 长寿区| 蓬溪县| 南投县| 武城县| 洛宁县| 宁国市| 印江| 蕉岭县| 桂东县| 化德县| 韶山市| 泽普县| 望奎县| 新昌县| 定安县| 柳林县| 蒙阴县| 资溪县| 丹东市| 德兴市| 定州市| 平泉县| 贵南县| 永仁县| 雅安市| 辉南县| 富民县| 博客| 常熟市| 泰兴市| 四川省| 拉孜县|