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

全國咨詢/投訴熱線:400-618-4000

Java培訓之response響應字節(jié)數(shù)據(jù)

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

1.response響應流介紹

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

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

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

本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://oisangadgets.com/javaee
0 分享到:
和我們在線交談!