Servlet 設定與取得 Header

Servlet 設定與取得 Header

HTTP request & response

設定 Header 都是 HttpServletResponse 物件的方法 首先是最基本的 setHeader(),第一個參數是 Header 名稱,第二個是 Header 值。

@WebServlet(
    urlPatterns = "/set-header"
)
public class SetHeader extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-Type", "text/plain");
        resp.setHeader("Content-Type", "text/html");
    }
}

這時候在 Response Headers 內可以看到

Content-Type: text/html

可以看到我們重複設定的話,只有最後的才會被設定進去。


另外還有一個 addHeader() 方法,一樣第一個參數是 Header 名稱,第二個是 Header 值。

@WebServlet(
        urlPatterns = "/add-header"
)
public class AddHeader extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.addHeader("Test-Header", "aaa");
        resp.addHeader("Test-Header", "bbb");
        resp.addHeader("Test-Header", "ccc");
    }
}

這時候在 Response Headers 內可以看到

Test-Header: aaa
Test-Header: bbb
Test-Header: ccc

這時候會看到同個 header 有帶三個值。 接下來,我們來看看怎麽取用這兩種值吧~


如果是 Header 只有一個值,我們可以簡單的使用 HttpServletRequest 的 getHeader() 方法,他就是單純的回傳一個字串值。

@WebServlet(
        urlPatterns = "/get-header"
)
public class GetHeader extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String contentHeader = req.getHeader("Content-Type");
        String testHeader = req.getHeader("Test-Header");

        resp.getWriter().println("Content-Type -> " + contentHeader);
        resp.getWriter().println("Test-Header -> " + testHeader);
    }
}

// output:
// 
// Content-Type -> text/html
// Test-Header -> aaa

可以看到我們的 Content-Type 值如預期的取得了,可是 Test-Header 就不如預期了。 要取的多個值的話可以使用 getHeaders() 方法,它會回傳一個 Enumeration <String>

@WebServlet(
        urlPatterns = "/get-header"
)
public class GetHeader extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Enumeration<String> testHeaders = req.getHeaders("Test-Header");
        PrintWriter out = resp.getWriter();

        while (testHeaders.hasMoreElements()) {
            String testHeader = testHeaders.nextElement();
            out.println("Test-Header -> " + testHeader);
        }
    }
}

// output
// 
// Test-Header -> aaa
// Test-Header -> bbb
// Test-Header -> ccc

這樣就沒問題囉!