国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】

這篇具有很好參考價值的文章主要介紹了板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在上一節(jié)中,我們系統(tǒng)的學習了請求響應在Servlet中service()方法的第一個形參HttpServletRequest(請求)對象,這一節(jié)中我們將學習它的兄弟,service()方法的第二個形參HttpServletResponse(響應)對象

一、什么是HttpServletResponse

在我們已然熟悉的瀏覽器訪問Servlet的過程中。Request和Response 對象分別代表請求和響應:通過Request對象獲取客戶端數(shù)據(jù);通過 Response 對象向客戶端輸出數(shù)據(jù):
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
service()方法中形參接收的是HttpServletResponse接口的實例化對象,它繼承自ServletResponse接口,專門用來封裝HTTP響應消息,由于HTTP響應消息分為狀態(tài)行、響應消息頭消息體三部分(詳見HTTP協(xié)議理論與服務器請求響應原理小節(jié)),因此在HttpServletResponse中定義了狀態(tài)行、響應消息頭、消息體三部分。

  • 狀態(tài)行部分
    響應消息頭包含了關于響應的附加信息,例如內(nèi)容類型、內(nèi)容長度、緩存控制等。由setStatus(int status)方法實現(xiàn),該方法用于設置HTTP響應消息的狀態(tài)碼,并生成相應代碼;默認會生成一個狀態(tài)碼為200的狀態(tài)行;
  • 響應消息頭部分
    響應消息頭包含了關于響應的附加信息,例如內(nèi)容類型、內(nèi)容長度、緩存控制等??梢允褂?code>setHeader(String name, String value)方法設置響應消息頭的字段和值,例如setHeader("Content-Type", "text/html")設置內(nèi)容類型為HTML。如果要設置相同字段的多個值,可以使用addHeader(String name, String value)方法,例如addHeader("Set-Cookie", "cookie1=value1")。此外還可以使用一些特定的方法來設置常見的響應消息頭,例如setContentType(String type)setContentLength(int len)
  • 消息體部分
    消息體包含了實際的響應數(shù)據(jù)??梢酝ㄟ^獲取ServletOutputStream或PrintWriter對象來寫入響應消息體。getOutputStream()方法返回一個可以寫入二進制數(shù)據(jù)的ServletOutputStream對象。
    getWriter()方法返回一個可以寫入字符數(shù)據(jù)的PrintWriter對象。
    可以使用這些對象的方法將數(shù)據(jù)寫入響應消息體,例如print(String s)、write(byte[] b)等。

二、響應數(shù)據(jù)的常用方法

接收到客戶端請求后,可以通過HttpServletResponse對象直接進行響應,響應時需要獲取輸出流。
有兩種形式:

  • getWriter() 獲取字符流(只能響應字符串)
  • getOutputStream() 獲取字節(jié)流(能響應一切數(shù)據(jù))

響應回的數(shù)據(jù)到客戶端被瀏覽器解析
注意:兩者不能同時使用

實例
在start.java導入PrintWriter類,并在service()中寫入測試代碼

// 獲取字符輸出流
PrintWriter writer = resp.getWriter();
//輸出數(shù)據(jù)
writer.write("Hello");

啟動服務器,在瀏覽器中訪問得
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
在start.java中導入ServletOutputStream類,并在service()中寫入測試代碼

//得到字節(jié)輸出流
ServletOutputStream out = resp.getOutputStream();
// 輸出數(shù)據(jù)
out.write("Hi".getBytes());

啟動服務器,在瀏覽器中訪問得
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
但當兩者同時使用時
start.java

package www.caijiyuan;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/start")
public class start extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 獲取字符輸出流
        PrintWriter writer = resp.getWriter();
        //輸出數(shù)據(jù)
        writer.write("Hello");
        
        //得到字節(jié)輸出流
        ServletOutputStream out = resp.getOutputStream();
        // 輸出數(shù)據(jù)
        out.write("Hi".getBytes());
    }
}

啟動服務器,在瀏覽器中訪問,只得到了第一個的打印內(nèi)容
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
這是為什么呢?查看報錯信息
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive原來是getWriter()已經(jīng)調(diào)用過response對象了,如果再響應一次response對象就已經(jīng)不存在了

三、響應亂碼問題

在上一節(jié)中我們使用request.setCharacterEncoding("UTF-8");解決了請求時中文亂碼的問題,同樣,在響應時也存在中文亂碼問題。這是因為服務器響應的數(shù)據(jù)也會經(jīng)過網(wǎng)絡傳輸,服務器端有一種編碼方式,在客戶端也存在一種編碼方式,當兩端使用的編碼方式不同時則出現(xiàn)亂碼。

字符流亂碼

對于getWriter()獲取到的字符流,響應中文必定出亂碼,由于服務器端在進行編碼時默認會使用ISO-8859-1格式的編碼,該編碼方式并不支持中文。要解決該種亂碼只能在服務器端告知服務器使用一種能夠支持中文的編碼格式,這也是我們在解決請求時中文亂碼的方法

response.setCharacterEncoding("UTF-8");

此時還只完成了一半的工作
要保證數(shù)據(jù)正確顯示,還需要指定客戶端的解碼方式

response.setHeader("content-type", "text/html; charset=UTF-8");

兩端指定編碼后,亂碼就解決了。一句話:保證發(fā)送端接收端編碼一致

實例
我們在start.java的service()中寫入測試測試代碼,試圖打印中文

// 獲取字符輸出流
PrintWriter writer = resp.getWriter();
//輸出數(shù)據(jù)
writer.write("湯米尼克");

啟動服務器,在瀏覽器中訪問,發(fā)現(xiàn)輸出中文亂碼
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
設置服務器和客戶端的編碼格式統(tǒng)一

// 設置服務端的編碼
resp.setCharacterEncoding("UTF-8");
// 設置客戶端的響應類型及編碼
resp. setHeader("content-type", "text/html; charset=UTF-8");
// 獲取字符輸出流
PrintWriter writer = resp.getWriter();
// 輸出數(shù)據(jù)
writer.write("湯米尼克");

重啟瀏覽器,再在瀏覽器中訪問就解決問題了
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
理解了原理,其實我們還可以同時設置客戶端和服務端的編碼方式

response.setContentType( "text/html; charset=UTF-8");

這一句就可以替換上面的兩句

字節(jié)流亂碼

對于getOutputStream()方式獲取到的字節(jié)流,響應中文時,由于本身就是傳輸?shù)淖止?jié),所以此時可能出現(xiàn)亂碼,也可能正確顯示。當服務器端給的字節(jié)恰好和客戶端使用的編碼方式一致時則文本正確顯示,否則出現(xiàn)亂碼。無論如何我們都應該準確掌握服務器和客戶端使用的是那種編碼格式,以確保數(shù)據(jù)正確顯示。
因此,字節(jié)流亂碼的解決方式與上面字符流亂碼的解決方式一樣,在響應發(fā)出之前同時設置服務器和客戶端的編碼格式統(tǒng)一即可

response.setContentType( "text/html; charset=UTF-8");

四、重定向:sendRedirect

重定向是一種服務器為指導的客戶端行為。
怎么理解這句話呢?客戶端發(fā)出一個請求,被服務器接收處理后進行響應,在響應的同時,服務器會給客戶端一個新的地址(下次請求的地址),當客戶端接收到響應后,會立刻、馬上自動根據(jù)服務器給的新地址發(fā)起第二個請求,服務器接收請求并作出響應,重定向完成。可以看出這個過程中有兩個請求存在,其中兩個Servlet的Request對象并不共享、不能傳值,屬于客戶端行為。

在Servlet中重定向的語句為

response.sendRedirect("url");

實例:從start.java重定向到after.java的過程
在start.java的service()中寫入重定向前的測試代碼

System.out.println("這里是start");
resp.sendRedirect("after");

在after.java的service()中寫入重定向到底測試代碼

System.out.println("這里是after");

啟動服務器,在瀏覽器中輸入start的地址
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
回車訪問后地址立即跳轉到after,說明重定向的地址欄會發(fā)生改變
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
同時控制臺輸出了
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
那么重定向在服務器中的響應頭是如何實現(xiàn)的?
如下圖,在開發(fā)者工具中打開響應頭的內(nèi)容
板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】,湯米尼克的JAVAEE+Spring 全套教程,servlet,java-ee,hive
會發(fā)現(xiàn)start文件響應行的狀態(tài)碼是302,這就是重定向的狀態(tài)碼
并且響應頭鍵值對中Location鍵的值就是要重定向到的地址:after文件
這與我們在第一節(jié) HTTP協(xié)議理論與服務器請求響應原理中學習的響應頭的知識首尾呼應起來了

請求轉發(fā)和重定向的區(qū)別

上一節(jié)中我們學習了Request對象的請求轉發(fā),這一節(jié)又學習了Response對象的重定向,兩兄弟讓人傻傻分不清,必須好好區(qū)分區(qū)分

請求轉發(fā) 重定向
request.getRequestDispatcher("url").forward(request, response); response.sendRedirect("url");
服務器端行為 客戶端行為
一次請求,Request域中數(shù)據(jù)共享 兩次請求,Request域中數(shù)據(jù)不共享
地址欄不發(fā)生變化 地址欄發(fā)生變化
跳轉只能在當前站點內(nèi) 跳轉任意地址

在這一節(jié)中我們學習了HttpServletResponse對象,學習了字符流字節(jié)流響應方法、重定向方法。不禁思考,Servlet作為“后端”,在Web交互中最重要的作用就是傳遞各種數(shù)據(jù),但目前我們學到的傳值的方法還知之甚少,在下一節(jié)中我們將學習Cookie對象、HttpSession對象、ServletContext對象,它們作為不同特點的容器在Servlet上可以實現(xiàn)不同范圍的傳值文章來源地址http://www.zghlxwxcb.cn/news/detail-833526.html

到了這里,關于板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的詳細內(nèi)容

    JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的詳細內(nèi)容

    Servlet 是 Sun 公司開發(fā)動態(tài) Web 的一門技術,在這些 API 中提供了一個接口就是:Servlet,開發(fā)一個 Servlet 程序需要 兩個步驟 : 編寫一個類,實現(xiàn) Servlet 接口; 把開發(fā)好的 java 類部署到 Web 服務器中。 把實現(xiàn)了 Servlet 接口的 Java 程序叫做 Servlet 。 創(chuàng)建一個普通的 Maven 項目,注

    2024年02月03日
    瀏覽(21)
  • 第四節(jié) LVGL部件使用

    第四節(jié) LVGL部件使用

    LVGL采用的是面向?qū)ο蟮木幊趟枷耄猿橄蟮念悂韺嵗煌膶ο螅ú考?C語言中沒有“類”的概念,LVGL以結構體的形式來實現(xiàn)“類”的思維。 基礎對象(lv_obj)可以作為父對象,來創(chuàng)建其他對象,同時它也可作為部件使用。 大?。╯ize) 位置(position) 對齊(alignme

    2024年02月06日
    瀏覽(30)
  • 【測試開發(fā)】第四節(jié).測試開發(fā)(測試分類)

    【測試開發(fā)】第四節(jié).測試開發(fā)(測試分類)

    作者簡介:大家好,我是未央; 博客首頁:未央.303 系列專欄:Java測試開發(fā) 每日一句:人的一生,可以有所作為的時機只有一次,那就是現(xiàn)在?。?! 文章目錄 前言 一、 有關測試用例的回顧 二、 測試用例的劃分 ?2.1?按照測試對象來劃分 2.1.1?可靠性測試 2.1.2?容錯性測試

    2024年02月07日
    瀏覽(28)
  • 【機器學習】第四節(jié):監(jiān)督學習算法對比評估

    【機器學習】第四節(jié):監(jiān)督學習算法對比評估

    ? 作者 ????♂?:讓機器理解語言か 專欄 ??:機器學習sklearn 描述 ??:本專欄主要分享博主學習機器學習的筆記和一些心得體會。 寄語 ??:??沒有白走的路,每一步都算數(shù)!??? ????????監(jiān)督學習(英語:Supervised learning)是機器學習中最為常見、應用最為廣泛的

    2024年02月02日
    瀏覽(26)
  • 第四節(jié) zookeeper集群與分布式鎖

    第四節(jié) zookeeper集群與分布式鎖

    目錄 1. Zookeeper集群操作 1.1 客戶端操作zk集群 1.2 模擬集群異常操作 1.3 curate客戶端連接zookeeper集群 2. Zookeeper實戰(zhàn)案例 2.1 創(chuàng)建項目引入依賴 2.2 獲取zk客戶端對象 2.3 常用API 2.4 客戶端向服務端寫入數(shù)據(jù)流程 2.5 服務器動態(tài)上下線、客戶端動態(tài)監(jiān)聽 2.6 測試 3.Zookeeper分布式鎖 3.

    2024年02月20日
    瀏覽(24)
  • 計算機網(wǎng)絡第四節(jié) 數(shù)據(jù)鏈路層

    計算機網(wǎng)絡第四節(jié) 數(shù)據(jù)鏈路層

    數(shù)據(jù)鏈路層是體系結構中的第二層; 從 發(fā)送端 來講,物理層可以將數(shù)據(jù)鏈路層交付下來的數(shù)據(jù),裝換成光,電信號發(fā)送到傳輸介質(zhì)上了 從 接收端 來講,物理層能將傳輸介質(zhì)的光,電信號接受還原成比特流;要交給數(shù)據(jù)鏈路層 數(shù)據(jù)鏈路層自己要保障所發(fā)出的數(shù)據(jù)能正確的到

    2024年02月09日
    瀏覽(18)
  • 【數(shù)據(jù)結構初階】第四節(jié).鏈表詳講

    【數(shù)據(jù)結構初階】第四節(jié).鏈表詳講

    前言 一、單鏈表的概念 二、鏈表的創(chuàng)建 2.1鏈表的初始化 2.2 打印鏈表 2.3 獲取鏈表的長度 2.4?判斷鏈表是否為空 三、新增結點 3.1頭插 3.2?指定下標插入 四、刪除結點 4.1 頭刪 4.2 指定下標的刪除 4.3?刪除鏈表中的指定元素 五、單鏈表查找 六、附錄 總代碼 測試代碼 總結 前

    2023年04月15日
    瀏覽(17)
  • java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V

    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V

    先說原因,其實都是你的jar有問題 1.jar沖突 2.少依賴了包 網(wǎng)上很多說springmvc和springwebmvc,版本高于5.3.0導致的,會有這個問題,那是因為他們沒看過源碼,高版本的因為在這里,多了一行代碼,這里設置的時候,會到實現(xiàn)類里面寫一個東西,this.servletResponse.setContentLengthLong(

    2024年02月11日
    瀏覽(18)
  • 第四節(jié) 如何使用Midjourney工具完成圖生圖

    第四節(jié) 如何使用Midjourney工具完成圖生圖

    正在上一節(jié)課中,我們學會如何使用MJ生成一張自己喜歡的圖片,我們可以稱其為文生圖,既利用文字描述來生成一張圖片。但是,文生圖有個致命的缺陷就是隨機性太強,你無法預料MJ生成的圖片將會是怎么樣的,運氣好的話第一次生圖就能得到滿意的照片,運氣不好可能要

    2024年02月16日
    瀏覽(15)
  • 【JavaEE初階】前端第四節(jié).JavaScript入門學習筆記

    【JavaEE初階】前端第四節(jié).JavaScript入門學習筆記

    作者簡介:大家好,我是未央; 博客首頁:未央.303 系列專欄:Java測試開發(fā) 每日一句:人的一生,可以有所作為的時機只有一次,那就是現(xiàn)在?。?! 前言 一、前置知識? 1、JS?和 HTML 和 CSS 之間的關系 1.2?JS 的書寫形式 1.2.1 內(nèi)嵌式 1.2.2?行內(nèi)式? 1.2.3?外部式 1.2.4?擴展 1.2

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包