更新時間:2020-10-27 來源:Java如何發(fā)送響應消息體 瀏覽量:
由于在HTTP響應消息中,大量的數(shù)據(jù)都是通過響應消息體傳遞的,因此,ServletResponse遵循以IO流傳遞大量數(shù)據(jù)的設計理念,在發(fā)送響應消息體時,定義了兩個與輸出流相關的方法,具體如下:
● getOutputStream()方法
該方法所獲取的字節(jié)輸出流對象為ServletOutputStream類型。由于ServletOutputStream是OutputStream的子類,它可以直接輸出字節(jié)數(shù)組中的二進制數(shù)據(jù)。因此,要想輸出二進制格式的響應正文,就需要使用getOutputStream()方法。
● getWriter()方法
該方法所獲取的字符輸出流對象為PrintWriter類型。由于PrintWriter類型的對象可以直接輸出字符文本內容,因此,要想輸出內容全為字符文本的網頁文檔,需要使用getOutputStream()方法。
●getWriter()方法。
了解了response對象發(fā)送響應消息體的兩個方法,接下來,通過一個案例來學習這兩個方法的使用,如例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();// 獲取輸出流對象 out.write(data.getBytes()); // 輸出字符串信息 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
在web.xml中配置完PrintServlet映射后,啟動Tomcat服務器,在瀏覽器的地址欄中輸入URL地址http://localhost:8080/chapter05/PrintServlet訪問PrintServlet,瀏覽器顯示的結果如圖1所示。
從圖1中可以看出,瀏覽器顯示出了response對象發(fā)送的數(shù)據(jù)。由此可見,response對象的getOutputStream()方法可以很方便的發(fā)送響應消息體。
接下來,對例1進行修改,使用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服務器,在瀏覽器的地址欄中輸入URL地址http:``//localhost:8080/chapter05/PrintServlet訪問PrintServlet,瀏覽器顯示的結果同樣如圖1所示。
注意:
雖然response對象的getOutputStream()和getWriter()方法都可以發(fā)送響應消息體,但是,它們之間互相排斥,不可同時使用,否則會發(fā)生IllegalStateException異常,如圖2所示。
圖2發(fā)生異常的原因就是在Servlet中,調用response.getWriter() 方法之前已經調用了response.getOutputStream() 方法。
猜你喜歡