java 板


LINE

我从以前就一直觉得很奇怪,为何要对HttpServletResponse物件, 写入给http response本身的讯息时,要从HttpServletResponse物件调用getWriter方法 然後透过PrintWriter物件写入回传讯息。 而非直接写入HttpServletResponse物件?例如HttpServletResponse物件提供了 一些setXXX方法,例如setContentType、setHeader、setCacheControl...... 来直接写入讯息到HttpServletResponse物件。既然可以有这些setXXX方法 那麽为何要将主要回传讯息写入HttpServletResponse物件,要用的是getWriter方法? 我目前的理解是: 因为HttpServletResponse物件跟http response本身,两者是关联的, 既然两者有关连,那麽若是HttpServletResponse物件提供某些类别/介面, 由於 介面与HttpServletResponse物件、HttpServletResponse物件跟http response的关联所以,外部的讯息就可藉由使用这些类别/介面,将外部讯息写入http response本身。 因此,只要HttpServletResponse物件提供某些类别/介面, 即可让外部程式将讯息写入http response本身。 所以,HttpServletResponse物件具备了某些类别/介面,可透过getXXX方法将其取出, 这个getXXX方法,就是getWriter方法、getOutputStream方法。 透过getWriter方法取出的介面,经过实例化後成为PrintWriter物件, 这时若要将外部讯息写入http response本身,就只要将该讯息写入PrintWriter物件。 即可透过上面所述的关联性,将该讯息写入http response本身。 而透过此法将外部讯息写入http response本身,原理和一开始所以提到的那些 setXXX方法不同,而是先要取得介面才行,难怪明明是要写入(set)讯息,却是要先 getWriter、getOutputStream。 希望这样理解没有错误,有错的话麻烦鞭小力一点= = --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.229.144.168 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1703256016.A.A70.html
1F:→ ssccg: 你根本没搞清楚http response是什麽吧,哪有什麽本身 12/22 22:52
2F:→ ssccg: http讯息分成三个部分,status line、headers、body 12/22 22:55
3F:→ ssccg: status line在response就是版本、status code 12/22 22:56
4F:→ ssccg: headers就是一堆header,基本上数量不会太多,内容也不长 12/22 22:57
5F:→ ssccg: 所以API设计成set String 12/22 22:57
HTTP讯息分成三部分这我知道,我之所以会强调本身,只是想将 Java的HttpServletResponse物件,跟http协定的回应,两者分开而已。
6F:→ ssccg: 而body部分可以说没有限制,甚至可能需要分段或压缩 12/22 22:58
7F:→ ssccg: 这种不定长度的当然就要用IO Stream的方式开API 12/22 22:59
喔喔,这样说明又更能补充我上面的说法了,感谢大大。
8F:→ ssccg: 否则要下载数百G的档案可没办法让你先读成byte[] 再set 12/22 23:01
9F:→ ssccg: 至於不是setOutputStream而是getOutputStream,也是因为 12/22 23:02
10F:→ ssccg: Stream的特性没有一次就要写入完成,当然Response物件内部 12/22 23:02
11F:→ ssccg: 要有自己控制的OutputStream,getOutputStream拿到的只是个 12/22 23:03
12F:→ ssccg: 接续写入的wrapper,并不能把response内的OutputStream换掉 12/22 23:04
13F:→ ssccg: 至於setXXX那些没这问题,依http response的顺序,一定是先 12/22 23:05
14F:→ ssccg: 把status、headers写入底层socket才开始写body,开始写body 12/22 23:07
15F:→ ssccg: setXXX就通通无效了 12/22 23:07
哇~~~讲的真详细,真的很谢谢大大拨冗指导。 ※ 编辑: TKB5566 (36.229.144.168 台湾), 12/22/2023 23:08:43
16F:→ sw12: 那你有直接set过吗?直接试比较快吧.... 12/25 14:29
17F:→ glo6e: 推 12/25 22:51
18F:推 ywk: 推 07/13 06:08
19F:→ y3k: 有些是getWriter(),有些是getOutputStream;这些东西其实 09/16 10:02
20F:→ y3k: 都不是给你用的XD 09/16 10:02







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP