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> 엘리먼트에 경로를 명시할 땐 컨텍스트 루트를 제외한 나머지를 기술하면 된다.
→ 경로는 슬래시(/)로 시작해야 한다.
- 에러 페이지 지정은 개발이 완료된 후 하는 것이 좋다.
'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 |
댓글