Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP에서 HTTP 헤더 읽는 방법 – getHeaderNames() 메서드 활용 예제

JSP로 웹 애플리케이션을 개발하다 보면 클라이언트가 보낸 HTTP 요청 헤더 정보를 확인해야 하는 경우가 자주 있습니다. 이럴 때 HttpServletRequest 객체가 제공하는 getHeaderNames() 메서드를 활용하면 모든 헤더 정보를 간편하게 읽어올 수 있습니다.

getHeaderNames() 메서드는 현재 HTTP 요청에 포함된 헤더 정보를 Enumeration 객체 형태로 반환합니다. Enumeration을 확보한 후에는 표준적인 방식으로 반복문을 순회하면 되는데, hasMoreElements() 메서드로 반복 종료 시점을 판단하고 nextElement() 메서드로 각 헤더의 이름을 차례대로 가져오면 됩니다.

전체 예제 코드

<%@ page import = "java.io.*,java.util.*" %>

<html>
   <head>
      <title>HTTP 헤더 요청 예제</title>
   </head>
   <body>
      <center>
         <h2>HTTP 헤더 요청 예제</h2>
         <table width = "100%" border = "1" align = "center">
            <tr bgcolor = "#949494">
               <th>헤더 이름</th>
               <th>헤더 값</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>

코드 동작 방식

스크립틀릿(scriptlet) 부분에서는 먼저 request.getHeaderNames()를 호출해 모든 헤더 이름이 담긴 Enumeration을 얻습니다. 그다음 while 반복문 안에서 hasMoreElements()로 아직 읽을 요소가 남아 있는지 확인하고, nextElement()로 헤더 이름을 하나씩 꺼낸 뒤 request.getHeader(paramName)을 호출해 해당 헤더의 값을 조회합니다. 마지막으로 out.print()out.println()을 사용해 테이블의 행(<tr>)과 셀(<td>)을 동적으로 생성하여 화면에 출력합니다.

위 코드를 main.jsp 파일로 저장한 뒤 서버에 배포하고 브라우저에서 접속하면 다음과 같이 요청 헤더 목록이 테이블 형태로 출력됩니다.

HTTP 헤더 요청 예제 실행 결과

헤더 이름헤더 값
accept*/*
accept-languageen-us
user-agentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encodinggzip, deflate
hostlocalhost:8080
connectionKeep-Alive
cache-controlno-cache

주요 HTTP 헤더의 의미

  • accept: 클라이언트가 수신 가능한 콘텐츠 타입(MIME 타입)을 나타냅니다.
  • accept-language: 클라이언트가 선호하는 언어를 지정합니다.
  • user-agent: 요청을 보낸 브라우저와 운영체제 정보를 포함합니다.
  • accept-encoding: 클라이언트가 지원하는 압축 방식(gzip, deflate 등)을 나타냅니다.
  • host: 요청 대상 서버의 호스트명과 포트 번호입니다.
  • connection: 연결 유지 여부(Keep-Alive 등)를 지정합니다.
  • cache-control: 캐시 동작 방식을 제어합니다.

이처럼 getHeaderNames()getHeader() 메서드를 조합하면 별도의 설정 없이도 들어오는 모든 HTTP 요청 헤더를 동적으로 조회하고 화면에 출력할 수 있습니다. 디버깅이나 클라이언트 요청 분석 작업에서 매우 유용하게 활용되는 기법이므로 꼭 익혀두시기 바랍니다.