JSP에서 클라이언트가 전송한 HTTP 헤더 정보를 확인하려면 HttpServletRequest 객체가 제공하는 getHeaderNames() 메서드를 사용하면 됩니다. 이 메서드는 현재 HTTP 요청과 연관된 모든 헤더 이름을 담고 있는 Enumeration 객체를 반환합니다.
Enumeration 객체를 확보한 후에는 일반적인 반복문 방식으로 순회할 수 있습니다. hasMoreElements() 메서드로 반복을 계속할지 여부를 판단하고, nextElement() 메서드로 각 헤더의 이름을 하나씩 꺼내옵니다. 그런 다음 request.getHeader(헤더이름)을 호출하면 해당 헤더의 값을 문자열로 얻을 수 있습니다.
전체 헤더 목록 출력 예제
다음 예제는 getHeaderNames() 메서드를 활용해 현재 요청의 모든 HTTP 헤더 이름과 값을 테이블 형태로 출력합니다.
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</h2>
<table width = "100%" border = "1" align = "center">
<tr bgcolor = "#949494">
<th>Header Name</th>
<th>Header Value(s)</th>
</tr>
<%
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</center>
</body>
</html>
참고: 자주 사용되는 헤더 관련 메서드
- getHeader(String name) — 지정한 이름의 헤더 값을 String으로 반환하며, 헤더가 없으면 null을 반환합니다.
- getIntHeader(String name) — 헤더 값을 int 타입으로 반환하며, 값이 없으면 -1을 반환합니다.
- getDateHeader(String name) — 날짜 형식의 헤더 값을 long 타입(밀리초)으로 반환합니다.
모든 헤더를 확인하는 대신 특정 헤더만 필요하다면 위 메서드들에 헤더 이름을 직접 지정하여 간편하게 값을 조회할 수 있습니다. 예를 들어 request.getHeader("User-Agent")를 호출하면 클라이언트의 브라우저 및 OS 정보를 확인할 수 있습니다.