✅ 내장 객체(Built-in Objects)란?
내장 객체란 JSP(JavaServer Pages)에서 자동으로 제공되는 객체로,
개발자가 별도로 생성하지 않아도 사용할 수 있는 서버 측 객체입니다.
이들은 웹 애플리케이션 개발에서 요청, 응답, 세션 관리, 페이지 정보 접근 등에 사용됩니다.
📌 1. JSP의 주요 내장 객체 9가지
JSP에는 총 9개의 내장 객체가 있으며, 이를 활용하여 클라이언트 요청 처리, 데이터 유지, 페이지 이동 등을 쉽게 구현할 수 있습니다.
내장 객체 | 설명 |
---|---|
request |
클라이언트의 요청 정보를 담고 있는 객체 (HttpServletRequest ) |
response |
클라이언트에게 응답을 보내는 객체 (HttpServletResponse ) |
session |
사용자의 세션 정보를 저장하는 객체 (HttpSession ) |
application |
웹 애플리케이션 전역에서 공유되는 객체 (ServletContext ) |
out |
JSP에서 데이터를 출력하는 객체 (JspWriter ) |
pageContext |
JSP 페이지 정보를 제공하는 객체 (PageContext ) |
config |
웹 애플리케이션 설정 정보를 담은 객체 (ServletConfig ) |
exception |
예외 발생 시 오류 정보를 담는 객체 (Throwable ) |
page |
현재 JSP 페이지 자체를 나타내는 객체 (this 와 동일) |
📌 2. 주요 내장 객체 상세 설명
1️⃣ request
객체 → 클라이언트의 요청 정보를 가져옴
- 폼 데이터, URL 파라미터, 쿠키 등을 읽을 수 있음.
✔ 예제: 클라이언트가 보낸 파라미터 값 가져오기
String id = request.getParameter("id"); // URL 또는 폼에서 "id" 값을 가져옴
String name = request.getParameter("name");
✔ 예제: 클라이언트 IP 가져오기
String clientIP = request.getRemoteAddr();
2️⃣ response
객체 → 클라이언트에게 응답을 보냄
- 브라우저로 출력하거나 페이지 이동 등을 처리할 때 사용.
✔ 예제: 페이지 리디렉션 (이동)
response.sendRedirect("home.jsp"); // home.jsp로 이동
✔ 예제: HTTP 헤더 설정
response.setHeader("Content-Type", "text/html; charset=UTF-8");
3️⃣ session
객체 → 사용자의 세션 정보를 저장
- 특정 사용자의 데이터를 브라우저 종료 전까지 유지.
✔ 예제: 세션 값 저장
session.setAttribute("user", "John Doe");
✔ 예제: 세션 값 가져오기
String user = (String) session.getAttribute("user");
✔ 예제: 세션 만료시키기
session.invalidate(); // 세션 종료
4️⃣ application
객체 → 웹 애플리케이션 전체에서 공유되는 정보 저장
- 모든 사용자에게 공통적으로 유지되는 데이터를 저장할 때 사용.
✔ 예제: 애플리케이션 변수 설정
application.setAttribute("siteName", "MyWebsite");
✔ 예제: 애플리케이션 변수 가져오기
String siteName = (String) application.getAttribute("siteName");
5️⃣ out
객체 → JSP 페이지에서 클라이언트에게 출력
- HTML을 출력할 때 사용.
✔ 예제: 화면에 출력
out.println("Hello, JSP!");
✔ 예제: HTML 태그 출력
out.println("<h1>Welcome to JSP</h1>");
6️⃣ pageContext
객체 → JSP 페이지의 정보 제공
- 각종 설정 정보, 속성(Attribute) 관리 등을 수행.
✔ 예제: 속성 저장
pageContext.setAttribute("message", "Hello, Page Context!");
✔ 예제: 속성 가져오기
String msg = (String) pageContext.getAttribute("message");
7️⃣ config
객체 → 서블릿 설정 정보를 가져옴
- 서블릿 초기화 정보(
web.xml
)를 읽을 때 사용.
✔ 예제: 초기화 매개변수 가져오기
String driver = config.getInitParameter("JDBC_DRIVER");
8️⃣ exception
객체 → 예외(오류) 정보를 가져옴
- JSP에서 에러 페이지(
errorPage="error.jsp"
) 설정 시 사용.
✔ 예제: 예외 메시지 출력
<%= exception.getMessage() %>
9️⃣ page
객체 → 현재 JSP 페이지를 나타냄
this
와 동일하며, 일반적으로 잘 사용되지 않음.
✔ 예제: 현재 JSP의 클래스 확인
out.println(page.getClass().getName());
📌 3. 내장 객체는 언제 사용할까?
내장 객체 | 사용 목적 |
---|---|
request |
사용자가 보낸 데이터 가져오기 (폼, URL 파라미터) |
response |
페이지 이동, 응답 헤더 설정 |
session |
로그인 정보 등 사용자별 데이터 유지 |
application |
전체 웹 애플리케이션에서 공유할 데이터 저장 |
out |
JSP에서 HTML 출력 |
pageContext |
페이지 내에서 속성 관리 |
config |
서블릿 초기화 정보 가져오기 |
exception |
예외 발생 시 오류 정보 가져오기 |
page |
현재 JSP 객체 자체를 나타냄 |
✅ 결론
✔ JSP의 내장 객체는 개발자가 별도로 선언하지 않아도 자동으로 제공됨.
✔ 클라이언트 요청(request
), 응답(response
), 세션(session
), 애플리케이션 정보(application
) 관리 등이 가능.
✔ 각 객체의 역할을 이해하면 JSP 웹 애플리케이션 개발이 훨씬 쉬워짐! 🚀
JSP 내장 객체를 더 잘 활용하기 위한 실전 팁과 추가 개념을 정리해줄게.
1. 내장 객체를 효율적으로 활용하는 방법
🔹 request
객체 활용 팁
✔ URL에서 여러 개의 파라미터 처리
- 사용자가 여러 개의 값을 전송할 경우
getParameterValues()
를 사용하면 배열로 받을 수 있어.String[] items = request.getParameterValues("item"); for (String item : items) { out.println(item); }
✔ request.setAttribute()
와 getAttribute()
활용
setAttribute()
는 현재 요청 범위 내에서 데이터를 저장할 때 사용됨.request.setAttribute("msg", "Welcome, User!"); RequestDispatcher dispatcher = request.getRequestDispatcher("welcome.jsp"); dispatcher.forward(request, response);
welcome.jsp
에서 데이터 사용:
📌 차이점:<%= request.getAttribute("msg") %>
getParameter()
는 클라이언트가 보낸 데이터를 읽을 때,getAttribute()
는 서버에서 설정한 데이터를 가져올 때 사용.
🔹 response
객체 활용 팁
✔ 클라이언트에게 JSON 응답 보내기 (AJAX와 연동)
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("{\"status\":\"success\"}");
📌 JSON 데이터를 응답하면 AJAX 요청과 통신할 때 유용.
✔ 파일 다운로드 기능 구현
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"example.txt\"");
🔹 session
객체 활용 팁
✔ 세션 유지 시간 설정
session.setMaxInactiveInterval(30 * 60); // 30분 유지
📌 기본 세션 유지 시간은 30분이지만, 이렇게 설정하면 직접 변경 가능.
✔ 로그아웃 처리 (세션 삭제)
session.invalidate();
response.sendRedirect("login.jsp");
📌 invalidate()
를 호출하면 사용자의 모든 세션 데이터가 삭제됨.
✔ 세션을 활용한 로그인 유지
session.setAttribute("userID", "admin");
String userID = (String) session.getAttribute("userID");
📌 session.setAttribute()
를 사용하면 브라우저가 닫힐 때까지 데이터가 유지됨.
🔹 application
객체 활용 팁
✔ 서버 시작 시 데이터를 로드해서 모든 사용자와 공유
- 웹 애플리케이션이 시작될 때
ServletContextListener
를 사용하면 데이터를application
객체에 저장할 수 있어.
✔ 전체 방문자 수 카운트application.setAttribute("siteVisits", 0);
📌 애플리케이션이 재시작되면 데이터가 초기화되므로, DB에 저장하는 것이 더 안정적.int visits = (Integer) application.getAttribute("siteVisits"); application.setAttribute("siteVisits", visits + 1);
🔹 out
객체 활용 팁
✔ 버퍼 크기 조정
- 기본적으로 JSP는 8KB의 버퍼 크기를 사용하지만, 이를 조절할 수 있어.
📌<%@ page buffer="32kb" autoFlush="true" %>
autoFlush="false"
로 설정하면 버퍼가 다 차기 전에 강제로 플러시되지 않음.
✔ 페이지 출력 조작
flush()
를 사용하면 강제로 현재까지 출력된 내용을 클라이언트에게 전송 가능.out.println("데이터를 전송합니다..."); out.flush();
2. 내장 객체의 범위 (Scope)
각 객체의 유효 범위(Scope)를 이해하면 더 효과적으로 사용할 수 있어.
내장 객체 | 범위(Scope) | 유지 시간 |
---|---|---|
request | 요청(Request) 범위 | 하나의 요청-응답 주기 동안 유지 |
session | 세션(Session) 범위 | 사용자가 브라우저를 닫거나 invalidate() 호출 시까지 유지 |
application | 애플리케이션(Application) 범위 | 서버가 종료될 때까지 유지 |
pageContext | 페이지(Page) 범위 | 하나의 JSP 페이지 내에서만 유효 |
✔ 예제: request vs session
request.setAttribute("msg", "Request 범위 데이터");
session.setAttribute("msg", "Session 범위 데이터");
request
데이터는 페이지 이동 시 사라짐.session
데이터는 다른 페이지에서도 유지됨.
3. 내장 객체 사용 시 주의할 점
❌ session
을 과도하게 사용하면 서버 부담 증가
- 세션은 서버 메모리를 차지하므로 필요한 경우에만 사용하는 것이 좋음.
- 세션 유지 시간이 너무 길면 메모리 누수(memory leak)가 발생할 수 있음.
✔ 해결책
- 불필요한 세션 데이터는 제거 (
removeAttribute()
)session.removeAttribute("userID");
- 세션 대신 쿠키를 사용할 수도 있음.
❌ response.sendRedirect()
vs RequestDispatcher.forward()
차이점
기능 | sendRedirect() |
forward() |
---|---|---|
동작 방식 | 클라이언트에게 새로운 요청을 보냄 (브라우저 URL 변경됨) | 서버 내부에서 요청을 전달 (URL 변경 없음) |
속도 | 상대적으로 느림 (새 요청 발생) | 빠름 (서버 내부 이동) |
데이터 전달 | 불가능 (새 요청이기 때문) | 가능 (request 데이터 유지됨) |
✔ 예제: sendRedirect()
response.sendRedirect("home.jsp");
📌 브라우저 주소가 변경됨 → "로그인 후 메인 페이지로 이동" 같은 경우 유용.
✔ 예제: forward()
RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp");
dispatcher.forward(request, response);
📌 브라우저 주소 변경 없이 내부에서 페이지 이동.
4. JSP 내장 객체 활용 시 꼭 기억해야 할 점
1️⃣ request
와 session
의 차이를 이해하고 적절하게 사용하라.
2️⃣ response.sendRedirect()
와 forward()
의 차이를 알고 쓰자.
3️⃣ 세션(session
)을 과하게 사용하면 서버 부하가 커진다.
4️⃣ 애플리케이션 전역 데이터는 application
객체에 저장할 수 있다.
5️⃣ 내장 객체를 활용하면 JSP
만으로도 동적인 웹 애플리케이션을 쉽게 만들 수 있다! 🚀
이제 JSP 내장 객체를 더 잘 이해할 수 있을 거야! 필요한 부분 더 궁금하면 알려줘. 😊
'웹 개발 > 프론트엔드 개발' 카테고리의 다른 글
초급 개발자가 알아야 할 React 관련 개념 (0) | 2025.02.11 |
---|---|
자바스크립트 함수의 생명주기 (0) | 2025.02.11 |
jQuery UI에서 자주 쓰는 옵션 및 API (0) | 2025.02.03 |
form 태그와 GET vs POST 방식 (0) | 2025.02.03 |
HTML 태그 종류 (0) | 2025.01.31 |