首頁(yè)技術(shù)文章正文

Java如何發(fā)送響應(yīng)消息體?

更新時(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類(lèi)型。由于ServletOutputStream是OutputStream的子類(lèi),它可以直接輸出字節(jié)數(shù)組中的二進(jìn)制數(shù)據(jù)。因此,要想輸出二進(jìn)制格式的響應(yīng)正文,就需要使用getOutputStream()方法。

● getWriter()方法

該方法所獲取的字符輸出流對(duì)象為PrintWriter類(lèi)型。由于PrintWriter類(lèi)型的對(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所示。

1603790208669_0.jpg

從圖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所示。

1603790198031_001.jpg


圖2發(fā)生異常的原因就是在Servlet中,調(diào)用response.getWriter() 方法之前已經(jīng)調(diào)用了response.getOutputStream() 方法。


猜你喜歡

Java中發(fā)送狀態(tài)碼有哪些方法?

Java中如何創(chuàng)建線程?

Java異常處理機(jī)制的原理和應(yīng)用


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!