Servlet 設定與取得 Header
Servlet 設定與取得 Header
設定 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
這樣就沒問題囉!