HttpServletResponse 類

目錄

1.HttpServletResponse 類的作用

2.兩個輸出流的說明。

3.如何往客戶端回傳數據

4.響應的亂碼解決

5.請求重定向


1.HttpServletResponse 類的作用

HttpServletResponse 類和 HttpServletRequest 類一樣。每次請求進來,Tomcat 服務器都會創建一個 Response 對象傳遞給 Servlet 程序去使用。HttpServletRequest 表示請求過來的信息,HttpServletResponse 表示所有響應的信息,我們如果需要設置返回給客戶端的信息,都可以通過 HttpServletResponse 對象來進行設置

 

2.兩個輸出流的說明。

字節流 getOutputStream(); 常用於下載(傳遞二進制數據)

字符流 getWriter(); 常用於回傳字符串(常用)

兩個流同時只能使用一個,使用了字節流,就不能再使用字符流,反之亦然,否則就會報錯。

錯誤代碼示例:

public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter();
        resp.getOutputStream();
    }
}

結果截圖:

 

3.如何往客戶端回傳數據

代碼示例:

往客戶端回傳字符串數據

public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.write("response's content!!!");
    }
}

結果截圖:

 

4.響應的亂碼解決

服務器默認字符集爲 ISO-8859-1 ,所以回傳中文會出亂碼,解決方法如下:

解決響應中文亂碼方案一(不推薦使用)

// 設置服務器字符集爲 UTF-8
resp.setCharacterEncoding("UTF-8");
// 通過響應頭,設置瀏覽器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");

解決響應中文亂碼方案二(推薦)

// 它會同時設置服務器和客戶端都使用 UTF-8 字符集,還設置了響應頭
// 此方法一定要在獲取流對象之前調用纔有效
resp.setContentType("text/html; charset=UTF-8");

 

5.請求重定向

請求重定向,是指客戶端給服務器發請求,然後服務器告訴客戶端說。我給你一些地址。你去新地址訪問。叫請求重定向(因爲之前的地址可能已經被廢棄)。

代碼示例:

web.xml

    <servlet>
        <servlet-name>Response1</servlet-name>
        <servlet-class>com.study.servlet.Response1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Response1</servlet-name>
        <url-pattern>/response1</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Response2</servlet-name>
        <servlet-class>com.study.servlet.Response2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Response2</servlet-name>
        <url-pattern>/response2</url-pattern>
    </servlet-mapping>

Response1.java

第一種方案:

public class Response1 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------Response1------");
        //設置響應狀態碼 302 表示重定向
        resp.setStatus(302);

        //設置響應頭,說明新地址
        resp.setHeader("Location","http://localhost:8080/07_Servlet/response2");
    }
}

 第二種方案(推薦使用

public class Response1 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------Response1------");
        resp.sendRedirect("http://localhost:8080/07_Servlet/response2");
    }
}

Response2.java

public class Response2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.getWriter().write("response2's result!");
    }
}

結果截圖:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章