更新時(shí)間:2020-10-27 來(lái)源:Java如何發(fā)送響應(yīng)消息體 瀏覽量:
由于在HTTP響應(yīng)消息中,大量的數(shù)據(jù)都是通過(guò)響應(yīng)消息體傳遞的,因此,ServletResponse遵循以IO流傳遞大量數(shù)據(jù)的設(shè)計(jì)理念,在發(fā)送響應(yīng)消息體時(shí),定義了兩個(gè)與輸出流相關(guān)的方法,具體如下:
● getOutputStream()方法
該方法所獲取的字節(jié)輸出流對(duì)象為ServletOutputStream類型。由于ServletOutputStream是OutputStream的子類,它可以直接輸出字節(jié)數(shù)組中的二進(jìn)制數(shù)據(jù)。因此,要想輸出二進(jìn)制格式的響應(yīng)正文,就需要使用getOutputStream()方法。
● getWriter()方法
該方法所獲取的字符輸出流對(duì)象為PrintWriter類型。由于PrintWriter類型的對(duì)象可以直接輸出字符文本內(nèi)容,因此,要想輸出內(nèi)容全為字符文本的網(wǎng)頁(yè)文檔,需要使用getOutputStream()方法。
●getWriter()方法。
了解了response對(duì)象發(fā)送響應(yīng)消息體的兩個(gè)方法,接下來(lái),通過(guò)一個(gè)案例來(lái)學(xué)習(xí)這兩個(gè)方法的使用,如例1所示。
例1 PrintServlet.java
package cn.itcast.chapter05.response; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class PrintServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data="itcast"; OutputStream out=response.getOutputStream();// 獲取輸出流對(duì)象 out.write(data.getBytes()); // 輸出字符串信息 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
在web.xml中配置完P(guān)rintServlet映射后,啟動(dòng)Tomcat服務(wù)器,在瀏覽器的地址欄中輸入U(xiǎn)RL地址http://localhost:8080/chapter05/PrintServlet訪問(wèn)PrintServlet,瀏覽器顯示的結(jié)果如圖1所示。
從圖1中可以看出,瀏覽器顯示出了response對(duì)象發(fā)送的數(shù)據(jù)。由此可見(jiàn),response對(duì)象的getOutputStream()方法可以很方便的發(fā)送響應(yīng)消息體。
接下來(lái),對(duì)例1進(jìn)行修改,使用getWriter()方法發(fā)送消息體,修改后的代碼如例2所示。
例2 PrintServlet.java
package cn.itcast.chapter05.response; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class PrintServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data="itcast"; PrintWriter print=response.getWriter(); print.write(data); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
重啟Tomcat服務(wù)器,在瀏覽器的地址欄中輸入U(xiǎn)RL地址http:``//localhost:8080/chapter05/PrintServlet訪問(wèn)PrintServlet,瀏覽器顯示的結(jié)果同樣如圖1所示。
注意:
雖然response對(duì)象的getOutputStream()和getWriter()方法都可以發(fā)送響應(yīng)消息體,但是,它們之間互相排斥,不可同時(shí)使用,否則會(huì)發(fā)生IllegalStateException異常,如圖2所示。
圖2發(fā)生異常的原因就是在Servlet中,調(diào)用response.getWriter() 方法之前已經(jīng)調(diào)用了response.getOutputStream() 方法。
猜你喜歡
Java培訓(xùn)機(jī)構(gòu)培訓(xùn)費(fèi)用多少錢?靠譜培訓(xùn)機(jī)構(gòu)怎么選?
2020-10-27Java培訓(xùn)班培訓(xùn)費(fèi)用大概要多少錢?看完不上當(dāng)
2020-10-27Java培訓(xùn)機(jī)構(gòu)培訓(xùn)費(fèi)用要多少?好口碑Java培訓(xùn)機(jī)構(gòu)推薦
2020-10-27Mybatis 執(zhí)行SQL命令的完整流程
2020-10-27Java培訓(xùn)班培訓(xùn)費(fèi)用揭秘!拒絕上當(dāng)!
2020-10-23什么是單體應(yīng)用?如何理解?
2020-10-23