
▣ 내장객체
- JSP의 내장 객체(Implicit Object)는 기본적인 요청과 응답, 화면출력 등을 담당

- Tomcat 컨테이너가 미리 선언하여 별도의 생성없이 사용할 수 있음
- <% 스크립틀릿 %>과 <%= 표현식 %>에서는 즉시 사용 가능
- <%! 선언부 %>에서는 매개변수로 전달받아 사용할 수 있음
- 내장객체는 JSP가 서블릿으로 변환될때 생성되는 _jspService( ) 메서드 내부에 선언되기 때문

- 스크립틀릿과 표현식의 코드는 _jspService( ) 내부에 기술됨 ⇒ 즉시 사용 가능
- 선언부의 코드는 _jspService( ) 외부에 기술됨 ⇒ 매개변수로 전달 받은 후 사용 가능
▣ 내장객체의 종류

▣ request 객체
- JSP에서 가장 많이 사용되는 객체로, 클라이언트의 요청 정보를 담고 있음
- 주요기능
- 클라이언트와 서버에 대한 정보 읽기
- 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기
- 요청 헤더 및 쿠키 정보 읽기
▣ 클라이언트와 서버의 환경정보 읽기
- 클라이언트의 요청에 따른 전송방식(GET / POST)
- 요청 URL(HOST포함) 및 URI(HOST 미포함)
- 포트번호, IP주소 등의 정보를 얻어올 수 있음

▣ 클라이언트의 요청 매개변수 읽기
<form> 태그 하위 요소를 통해 전송(submit)한 폼값을 받을 수 있음
- 전송된 값이 하나인 경우 getParameter() 사용
<input> 태그의 type속성이 text, password, radio 일때 입력값
<textarea> 태그의 입력값
<select> 태그의 선택값(multiple 속성 없음)
- 전송된 값이 둘 이상인 경우 getParameterValues() 사용
- <input> 태그의 type속성이 checkbox 일때 선택값
- <select> 태그의 여러 선택값(multiple 속성 추가)
✔️ 예제 2-3] 02ImplicitObject/RequestParameter.jsp

▣ HTTP 요청 헤더 정보 읽기
- HTTP 프로토콜은 헤더에 부가적인 정보를 저장할 수 있음
- user-agent : 웹 브라우저의 종류
- referer : 웹을 서핑하면서 링크를 통해 다른 사이트로 방문 시 남는 흔적
- cookie : 쿠키 정보
- 그 외 여러가지 정보

▣ response 객체
- 클라이언트의 요청에 대한 응답을 웹 브라우저로 보내주는 역할
- 주요 기능
- 페이지 이동을 위한 리다이렉트(redirect)
- HTTP 헤더에 응답 헤더 추가
- 그 외에는 거의 사용되지 않음
▣ sendRedirect()로 페이지 이동하기
- HTML의
<a> 태그, 자바스크립트의 location 객체와 동일
- 단순 문자열 비교를 통한 로그인 기능 구현

✔️ 예제 2-5] 02ImplicitObject/ResponseMain.jsp

✔️ 예제 2-6] 02ImplicitObject/ResponseLogin.jsp

❶ 아이디/비번을 파라미터로 받음
❷ 단순 문자열 비교로 검증
❸ 인증성공인 경우 페이지 이동
❹ 인증실패인 경우 포워드
✔️ 예제 2-7] 02ImplicitObject/ResponseWelcome.jsp

인증에 실패한 경우에는 ResponseMain.jsp로 포워드

- 주소줄에는 ResponseLogin.jsp로 표시
- 하지만 화면에는 ResponseMain.jsp의 내용이 출력
- ‘포워드’는 이와같이 실행의 흐름만 특정 페이지로 넘겨주는 역할을 함!
▣ HTTP 헤더에 응답 헤더 추가하기
- response 내장 객체는 응답 헤더에 정보를 추가하는 기능을 제공
- add 계열은 헤더값을 새로 추가할 때 사용
- set 계열은 기존의 헤더를 수정할 때 사용

❶ 날짜포맷은 시간까지 설정하고, 시간이 09:00 이후여야 오늘날짜로 설정됨.
❸ addXX() 로 헤더값 추가
❹ setXX() 로 기존 헤더값 수정
▣ HTTP 헤더에 응답 헤더 추가하기
- getHeader() 메서드로 출력하면 값이 여러개라도 첫 번째 값만 가져옴

- getHeaders() 메서드로 출력하면 같은 헤더명이라도 다른 값을 출력함

▣ out 객체
- 웹 브라우저에 변수 등의 값을 출력할 때 주로 사용
- 출력되는 모든 정보는 버퍼에 먼저 저장된 후 웹 브라우저에 출력
✔️ 예제 2-9] 02ImplicitObject/OutMain.jsp

▣ application 객체
- 웹 애플리케이션당 하나만 생성되며, 모든 JSP 페이지에서 접근할 수 있음
- 주요기능
- web.xml에 설정한 컨텍스트 초기화 매개변수 읽기
- 폴더의 물리적 경로 얻어오기
✔️ 예제 2-10] WEB-INF/web.xml

✔️ 예제 2-10] 02ImplicitObject/ApplicationMain.jsp

❷ /02ImplicitObject 폴더의 물리적 경로를 얻어옴. 이클립스에서는 .metadata 하위로 설정됨
✔️ 예제 2-10] 02ImplicitObject/ApplicationMain.jsp

❸ getServletContext() 를 통해 application 내장객체를 얻음
❹ 매개변수를 통해 application 내장객체를 얻음
▣ exception 객체
- 오류명과 오류 메시지를 출력하는 부분에서 사용
- JSP에서 그 이상으로 사용되는 경우가 거의 없으므로 오류페이지 처리를 위한 또 다른 방식을 학습
- 웹 프로그래밍에서 주로 발생되는 에러

✔️ 예제 2-12] WEB-INF/web.xml

404에러가 발생하면 Exception.jsp 에서 에러를 처리하는 형식으로 텍스트, 이미지를 적절히 출력함
✔️ 예제 2-13] 02ImplicitObject/Exception.jsp

- JSP의 내장 객체는 별도의 선언 없이 사용할 수 있음
- 클라이언트의 요청을 받거나 요청에 대한 응답을 할 수 있음
- 자바 코드에 대한 예외 처리를 할 수 있음
▣ 핵심요약
- request 객체 : 클라이언트의 요청을 받거나 웹 브라우저에 대한 정보 혹은 요청 헤더에 대한 정보를 읽을 때 사용
- response 객체 : 요청에 대한 응답을 웹 브라우저로 보낼 때 사용. 페이지 이동이나 응답 헤더를 추가할 때도 사용.
- out 객체 : 변수 등의 값을 웹 브라우저에 출력할 때 주로 사용.
- application 객체 : 웹 애플리케이션을 구성하는 모든 JSP에서 접근 가능한 객체로, 웹 애플리케이션에 대한 설정값을 저장할 때 주로 사용.
- exception 객체 : 예외 처리를 위해 사용.