教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

Java培訓(xùn)之response響應(yīng)字節(jié)數(shù)據(jù)

更新時(shí)間:2016年07月29日18時(shí)10分 來(lái)源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):

1.response響應(yīng)流介紹

response是響應(yīng)對(duì)象,向?yàn)g覽器端輸出響應(yīng)正文可以使用response響應(yīng)流。response提供了兩個(gè)響應(yīng)流對(duì)象:
  • PrintWriter writer=response.getWriter():獲取字符流;
  • ServletOutputStream out=response.getOutputStream():獲取字節(jié)流;
如果響應(yīng)正文是字符,就使用字符流,如果是字節(jié)就使用字節(jié)流。當(dāng)然,也可以使用字節(jié)流向?yàn)g覽器響應(yīng)字符信息,前提是先將字符轉(zhuǎn)換成字節(jié)或字節(jié)數(shù)組。
response對(duì)象的類(lèi)型是HttpServletResponse,獲取響應(yīng)流的兩個(gè)方法并不是HttpServletResponse接口定義的,而是由其父類(lèi)ServletResponse接口定義的,下面通過(guò)一張圖來(lái)了解獲取相應(yīng)流的這兩個(gè)方法,如圖1-1所示:
圖1-1 獲取響應(yīng)流方法
response對(duì)象的getWriter()方法的使用在禁止瀏覽器緩存定時(shí)刷新都有介紹,它返回PrintWriter類(lèi)型的對(duì)象,該對(duì)象可以將字符響應(yīng)給瀏覽器。今天我們的主要內(nèi)容是使用response對(duì)象獲取字節(jié)流的方法getOutputStream()。該方法的返回值類(lèi)型是ServletOutputStream,該類(lèi)的父類(lèi)是OutputStream。
需要注意的是response的getWriter()方法和getOutputStream()方法不能同時(shí)使用,即字符流和字節(jié)流不能同時(shí)出現(xiàn),否則會(huì)拋出異常,如圖1-2所示:
圖1-2 getOutputStream()方法介紹
圖1-2中紅色矩形標(biāo)注的部分的意思是說(shuō):如果getWriter()方法在response調(diào)用getOutputStream()方法之前被調(diào)用了,那么response在調(diào)用getOutputStream()方法時(shí)會(huì)拋出IllegalStateException。該異常是非法的狀態(tài)異常,詳細(xì)信息可參考JDK API。在getWriter()方法介紹中也有這句話存在,表示的是同一個(gè)response對(duì)象不能同時(shí)調(diào)用getWriter()和getOutputStream()方法。

2.response響應(yīng)字節(jié)數(shù)據(jù)案例練習(xí)

通過(guò)以上對(duì)response響應(yīng)字節(jié)流的了解,下面通過(guò)案例更進(jìn)一步的去了解response對(duì)象的getOutputStream()方法的使用,具體如下所示:
(1)創(chuàng)建一個(gè)web應(yīng)用,Example05,在該應(yīng)用下創(chuàng)建一個(gè)Servlet類(lèi),StreamServlet,主要代碼如例1-1所示:
例1-1 StreamServlet.java
public class StreamServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
           //使用字節(jié)流向?yàn)g覽器端響應(yīng)字符信息
       String value="hello outputStream";
       //將字符轉(zhuǎn)換成字節(jié)數(shù)組
       byte bytes[]=value.getBytes();
       response.getOutputStream().write(bytes);
    }
}
(2)StreamServlet在web.xml文件中其訪問(wèn)路徑的配置為:“/StreamServlet“。
(3)將Example05發(fā)布到Tomcat服務(wù)器,然后啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example05/StreamServlet,瀏覽器顯示結(jié)果如圖1-3所示:
圖1-3 瀏覽器顯示結(jié)果
(4)在Example05應(yīng)用下新建一個(gè)Servlet類(lèi),ImgServlet,該Servlet的功能是將磁盤(pán)上的圖片轉(zhuǎn)換成字節(jié)輸出在瀏覽器端,主要代碼如例1-2所示:
例1-3 ImgServlet.java
public class ImgServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
            //首先給出圖片的路徑
       String path="D:/風(fēng)景.jpg";
       //將圖片寫(xiě)入到文件輸入流中
       FileInputStream input=new FileInputStream(path);
       //使用幫助類(lèi)將輸入流轉(zhuǎn)換成字節(jié)數(shù)組
       byte btyes[]=IOUtils.toByteArray(input);
       //使用response的getOutputStream()方法將該字節(jié)數(shù)組響應(yīng)給瀏覽器
       response.getOutputStream().write(btyes);
    }
}
例1-2中,首先獲得圖片的路徑,然后將圖片寫(xiě)入到文件輸入流中,再通過(guò)IOUtils類(lèi)的toByteArray(InputStream input)方法將文件輸入流轉(zhuǎn)換成字節(jié)數(shù)組,最后由response調(diào)用getOutputStream()方法將字節(jié)數(shù)組響應(yīng)給瀏覽器。其中,IOUtils類(lèi)是commons-io-1.4.jar包中的類(lèi),所以我們要將這個(gè)jar包導(dǎo)入到WEB-INF目錄下的lib目錄中。點(diǎn)擊此處 下載commons-io-1.4.jar。
(5)ImgServlet在web.xml文件中其訪問(wèn)路徑配置為:“/ImgServlet“。
(6)重新啟動(dòng)Tomcat服務(wù)器,在瀏覽器端地址欄上輸入:http://localhost:8080/Example05/ImgServlet,瀏覽器顯示結(jié)果如圖1-4所示:
圖1-4 瀏覽器顯示結(jié)果

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/javaee
0 分享到:
和我們?cè)诰€交談!