JSP에서 요청 객체(request object)란 javax.servlet.http.HttpServletRequest 클래스의 인스턴스를 의미합니다. 클라이언트가 페이지를 요청할 때마다 JSP 엔진은 해당 요청을 나타내는 새로운 객체를 자동으로 생성하며, 이 객체를 통해 서버는 클라이언트가 보낸 다양한 정보에 접근할 수 있습니다.
요청 객체는 폼 데이터(form data), 쿠키(cookie), HTTP 메서드 등 HTTP 헤더 정보를 읽어올 수 있는 여러 메서드를 제공합니다. 이를 활용하면 브라우저 정보, 요청 방식, 전달된 파라미터 등을 손쉽게 확인할 수 있습니다.
HTTP 헤더 정보 읽기 예제
다음 예제는 HttpServletRequest의 getHeaderNames() 메서드를 사용하여 HTTP 헤더 정보를 읽어오는 방법을 보여줍니다. 이 메서드는 현재 HTTP 요청과 관련된 모든 헤더 이름을 담고 있는 Enumeration 객체를 반환합니다.
Enumeration 객체를 얻은 후에는 일반적인 방식으로 반복문을 순회할 수 있습니다. hasMoreElements() 메서드로 반복을 계속할지 여부를 판단하고, nextElement() 메서드로 각 헤더의 이름을 하나씩 가져옵니다.
<%@ 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>
위 코드를 실행하면 현재 요청에 포함된 모든 헤더 이름과 값이 테이블 형태로 출력됩니다. 예를 들어 User-Agent, Accept-Language, Host 같은 헤더 정보를 확인할 수 있습니다.
자주 사용되는 요청 객체의 주요 메서드
실무에서 유용하게 쓰이는 대표적인 메서드들은 다음과 같습니다.
- getHeader(String name) : 지정한 이름의 헤더 값을 문자열로 반환합니다.
- getParameter(String name) : 폼 또는 쿼리 스트링으로 전달된 파라미터 값을 반환합니다.
- getMethod() : GET, POST 등 요청에 사용된 HTTP 메서드를 반환합니다.
- getCookies() : 클라이언트가 함께 전송한 쿠키 배열을 반환합니다.
- getRequestURI() : 클라이언트가 요청한 리소스의 URI를 반환합니다.
이처럼 요청 객체는 클라이언트와 서버 사이에서 전달되는 모든 요청 정보의 관문 역할을 하므로, JSP 웹 애플리케이션을 개발할 때 반드시 이해하고 있어야 하는 핵심 내장 객체입니다.