본문 바로가기
JSP/성낙현의 JSP 자바 웹 프로그래밍

내장 객체(Implicit Object)

by k-mozzi 2023. 5. 29.
반응형
Preface

 

이번 장에선 JSP 내장 객체의 종류와 사용법을 공부했다.

 

각각의 내장 객체마다 메소드 종류도 다양하고 사용법도 다른데, 이렇게 한 번 훑어보는 것만으로 충분할지, 자주 사용되는 메소드들을 따로 정리해가며 공부해야할지 아직 잘 모르겠다.

 

초보자를 위한 책이라고 하니 일단은 책의 구성 순서대로 차근차근 공부할 생각이다.


 

1. 내장 객체란?

 

 

- 내장 객체(Implicit Object): 기본적인 요청과 응답, 화면 출력 등의 기능을 내장해 둔 객체

1) JSP 페이지가 실행될 때 컨테이너가 자동으로 생성해준다.

2) 컨테이너가 미리 선언해 둔 참조 변수를 이용해 사용한다.

3) 별도의 객체 생성 없이 각 내장 객체의 메서드를 사용할 수 있다.

4) JSP 문서 안의 스크립틀릿과 표현식에서만 사용할 수 있다.

→ 선언부에서 즉시 사용하는 것은 불가능하지만, 매개변수로 전달받아 사용하는 것은 가능하다.

 

 

- 내장 객체의 종류

내장 객체 타입 설명
request javax.servlet.http.HttpServletRequest 클라이언트의 요청 정보를 저장한다.
response javax.servlet.http.HttpServletResponse 클라이언트의 요청에 대한 응답 정보를 저장한다.
out javax.servlet.jsp.JspWriter JSP 페이지에 출력할 내용을 담는 출력 스트림이다.
session javax.servlet.http.HttpSession 웹 브라우저 정보를 유지하기 위한 세션 정보를 저장한다.
application javax.servlet.ServletContext 웹 애플리케이션 관련 컨텍스트 정보를 저장한다.
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장한다.
page javax.servlet.Object JSP 페이지를 구현한 자바 클래스의 인스턴스이다.
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 저장한다.
exception javax.lnag.Throwable 예외가 발생한 경우 사용한다.

 


 

2. request 객체

 

 

- request 내장 객체: 클라이언트가 전송한 요청 정보를 담고 있는 객체

1) 클라이언트와 서버에 대한 정보 읽기

2) 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기

3) 요청 헤더 및 쿠키 정보 읽기

 

 

- 클라이언트는 웹 브라우저를 통해 서버 측으로 요청을 한다.

1) GET 방식과 POST 방식으로 구분된다.

→ 요청 URL, 포트 번호, 쿼리스트링 등을 명시할 수 있다.

 

 

- 쿼리스트링: URL 뒤에 "?키=값&키=값" 형태로 덧붙여진 부분

 

 

- URL: 호스트를 포함한 전체 주소

 

 

- URI: 호스트를 제외한 컨텍스트 루트부터의 주서

→컨텍스트 루트: 호스트명 다음에 나오는 프로젝트명

 

 

- 한글로 전송된 값이 깨져서 출력되는 경우엔 다국어를 지원하는 UTF-8로 인코딩하면 된다.

<% request.setCharacterEncoding("UTF-8"); %>

 

 

- 전송되는 값이 하나일 땐 getParameter( ) 메서드를, 여러개일 땐 String 배열을 반환하는 getParameterValues( ) 메서드를 사용해야 한다.

<%
String id = request.getParameter("id");  
String sex = request.getParameter("sex");
String[] favo = request.getParameterValues("favo");  
String favoStr = "";
if (favo != null) {  
    for (int i = 0; i < favo.length; i++) {
        favoStr += favo[i] + " ";
    }
}
%>

 

 

- textarea 태그는 텍스트를 여러 줄 입력할 수 있으므로 출력 시에는 enter(\r\n) 키를 <br> 태그로 변환해야 줄바꿈이 반영된다.

<%
String intro = request.getParameter("intro").replace("\r\n", "<br/>");  
%>

 

 

- HTTP 프로토콜은 헤더에 부가적인 정보를 담도록 한다.

→ 일반적인 HTML 문서 데이터 외의 추가 정보를 서버와 클라이언트가 교환할 수 있도록 문서의 선두에 삽입할 수 있다.

1) user-agent: 웹 브라우저의 종류를 알 수 있다.

2) referer: 웹을 서핑하며 링크를 통해 다른 사이트로 방문했을 때 남는 흔적으로, 웹 사이트 방문객이 어떤 경로로 접속했는지 알아볼 때 사용한다.

3) cookie

 


 

3. response 객체

 

 

- response 내장 객체: 요청에 대한 응답을 웹 브라우저로 보내주는 역할

1) 리다이렉트(redirect): 페이지 이동

2) HTTP 헤더에 응답 헤더 추가

 

 

- JSP에서 페이지를 이동하기 위해선 response 내장 객체의 sendREdirect( ) 메서드를 사용한다.

 

 

※ HTML에서 name은 "key", value는 "값"이라는 것을 기억하자.

 

 

- 포워드(forward): 페이지 이동과는 다르게 제어 흐름을 넘겨주고자 할 때 사용한다.

→ 실행 흐름만 특정한 페이지로 넘겨주는 것이지, 페이지 자체가 이동되는 것은 아니다.

 

 

- 응답 헤더에 정보를 추가하는 메서드

1) add 계열: 헤더값을 새로 추가할 때 사용

→ 동일한 헤더명이 있으면 동일한 이름으로 값을 추가한다.

2) set 계열: 기존의 헤더를 수정할 때 사용

→ 동일한 헤더명이 존재하지 않는다면 새롭게 추가한다.

 

 

- getHeader( ) 메서드는 값이 여러 개더라도 첫 번째 값만 가져오지만, getHeaders( ) 메서드는 모든 값을 가져온다.

 


 

4. out 객체

 

 

- out 내장 객체: 웹 브라우저에 변수 등의 값을 출력할 때 주로 사용

 

 

- 스크립틀릿 내에서 변수를 웹 브라우저에 출력할 땐 표현식보단 out 내장 객체를 사용하는 것이 좋다.

 

 

- out 내장 객체는 버퍼를 사용한다.

1) getBufferSize( ): 현재 페이지에 설정된 버퍼의 크기를 리턴한다.

2) getRemaining( ): 사용하고 남은 버퍼의 크기를 리턴한다.

3) flush( ): 버퍼에 담긴 내용을 강제로 플러시한다.

 

 

- JSP 페이지에서 println( )을 사용해도 줄바꿈이 되지 않는다.

→ HTML 문서에서의 줄바꿈은 <br>태그를 사용해야 하므로 println( )을 사용해도 띄어쓰기 한 칸 정도만 적용된다.

 


 

5. application 객체

 

 

- application 내장 객체: 웹 애플리케이션당 하나만 생성되며, 모든 JSP 페이지에서 접근할 수 있다.

1) 웹 애플리케이션 전반에서 사용하는 정보를 저장한다.

2) 서버의 정보, 서버의 물리적 경로 등을 얻어온다.

 

 

- web.xml(배포 서술자): 웹 애플리케이션에 대한 여러 가지 설정을 저장하는 곳

 

 

- 물리적 경로: 특정 파일이나 폴더의 전체 경로(절대 경로)를 말하며, 파일 업로드나 입출력 작업 시에 사용한다.

 

 

- 스크립틀릿이나 표현식에선 application 내장 객체를 그대로 사용할 수 있지만, 선언부에선 바로 사용할 수 없다.

→ this를 통해 application 내장 객체를 얻어오거나, 인수로 전달해야 한다.

 


 

6. exception 객체

 

 

- HTTP 에러 코드

HTTP 에러 코드 에러 의미 조치 방법
404 Not Found: 클라이언트가 요청한 경로에서 문서를 찾을 수 없다. URL 상의 경로명이나 파일명을 점검한다.
405 Method Not Allowed: GET / POST 방식으로 요청했지만 이를 처리할 컨트롤러가 없다. 주로 서블릿으로 개발할 때 발생하는데, doGet( ), doPost( ) 메서드가 적절히 오버라이딩 되었는지 확인한다.
500 Internal Server Error: 서버 내부 오류로 코드에 오타가 있거나 로직에 문제가 있어 웹 서버가 요청 사항을 수행할 수 없다. 개발 중인 코드를 전반적으로 점검한다.

 

 

- web.xml에 에러 설정을 추가하는 경우 <location> 엘리먼트에 경로를 명시할 땐 컨텍스트 루트를 제외한 나머지를 기술하면 된다.

→ 경로는 슬래시(/)로 시작해야 한다.

 

 

- 에러 페이지 지정은 개발이 완료된 후 하는 것이 좋다.

 

728x90
반응형

'JSP > 성낙현의 JSP 자바 웹 프로그래밍' 카테고리의 다른 글

쿠키(Cookie)  (0) 2023.06.04
내장 객체의 영역(Scope)  (0) 2023.05.30
JSP 기본  (0) 2023.05.27
이클립스 JSP 404 에러 해결 방법  (0) 2023.05.26
성낙현의 JSP 자바 웹 프로그래밍 출처  (0) 2023.05.25

댓글