JSP
생성 일시: 2023년 9월 6일 오전 8:44
- JSP
 - JSP 기본 태그
 - JSP 기본 객체
 - 페이지 이동
 
JSP Java Server Page
JSP
- Servlet 표준을 기반으로 작성된 웹 어플리케이션 개발 언어
 - HTML 내에 Java를 작성하여 동적으로 웹페이지를 생성하여 브라우저에게 돌려주는 페이지
 - 실행 시 Servlet으로 변환된 후 실행
 
![]()
![]()
![]()
JSP 구성요소
- 지시자 Directive JSP 페이지에 대한 설정 정보를 지정하기 위해서 사용
 - 스크립트 요소: 스크립트릿 Scriptlet, 표현식 Expression, 선언부 Declaration JSP에서 문서의 내용을 동적으로 생성하기 위해서 사용
 - JSP 기본 객체 요청 및 응답 관련 정보를 얻거나 응답 결과를 만들기 위해서 사용
 - 표현 언어 Expression Languague JSP를 좀 더 간결하게 작성하기 위해서 사용
 - Action Tag와 JSTL 자주 사용하는 기능을 모아 미리 정의하여 Tag 형태로 작성한다 JSP에서 자바코드를 쉽게 작성할 수 있도록 사용
 
JSP 기본태그
JSP 태그 종류
| 종류 | 사용용도 | 형식 | 
|---|---|---|
| 스크립트릿 scriptlet | 자바코드 작성 | <% %> | 
| 선언 declaration | 변수와 메소드를 선언 | <%! %> | 
| 표현식 expression | 계산식이나 함수를 호출한 결과를 문자열 형태로 출력 | <%= %> | 
| 주석 comment | JSP 페이지 설명 작성 | <%— —%> | 
| 지시자 directive | JSP 페이지 속성 지정 | <%@ %> | 
스크립트릿 Scriptlet
- 스크립팅 언어 (java) 로 작성된 코드 조각을 포함하는 데 사용된다
 
선언부 Declaration
- 멤버변수 선언이나 메서드를 선언하는 영역
 
표현식 Expression
- 변수의 값이나 계산식 혹은 함수를 호출한 결과를 문자열 형태로 웹문서에 출력
 
주석문 Comment
- 작성한 코드에 대한 설명을 기술할 경우 사용
 - HTML 주석문과 동일한 기능을 하지만 HTML 주석문은 클라이언트에게 보여지고, JSP 주석문은 보여지지 않는다
 
지시자 Directive
- 웹컨테이너 (Tomcat) 가 JSP 번역하고 실행하는 방법을 서술
 - page: 해당 JSP 페이지 전반적으로 환경을 설정할 내용 지정
 - include: 현재 페이지에 다른 파일의 내용 삽입할 때 사용
 - taglib: 태그 라이브러리에서 태그를 사용할 수 있는 기능 제공
 
지시자 - page
- JSP 페이지 실행 매개변수를 제어
 - 출력처리, 오류처리 등의 내용을 포함
 
| 속성 | 설명 | 기본값 | 
|---|---|---|
| language | 스크립트에서 사용할 언어 지정 | java | 
| contentType | JSP가 생성할 문서의 MIME 타입과 캐릭터 인코딩 | text/html | 
| import | JSP에서 사용할 Java 클래스를 지정 | |
| session | JSP가 세션을 사용할지 여부 지정 | true | 
| buffer | JSP 페이지의 출력 버퍼 크기 지정, ‘none’일 경우 출력 버퍼를 사용하지 않음 | 8kb | 
| errorPage | JSP 실행 중 에러 발생 시 출력할 페이지 지정 | |
| isErrorPage | 에러가 발생했을 때 보여줄 페이지인지 지정 | false | 
| pageEncoding | JSP 소스코드의 인코딩 지정 | ISO-8859-1 | 
| info | 현재 JSP 페이지에 대한 설명 | |
| autoflush | 버퍼의 내용을 자동으로 브라우저로 보낼지에 대한 설정 | true | 
| isThreadsafe | 현재 JSP가 멀티스레드로 동작해도 안전한지 여부를 설정, ‘false’일 경우 SingleThread로 동작 | true | 
| extends | JSP 페이지를 기본적인 클래스가 아닌 다른 클래스를 상속하도록 변경 | javax.servlet.jsp.HttpJspPage | 
지시자 include
- JSP 내에 다른 HTML 문서나 JSP 페이지의 내용을 삽입할 때 사용된다
 - 반복적으로 사용되는 부분 (header, footer 등) 별도로 작성하여 페이지 내에 삽입하면 반복되는 코드의 재작성을 줄일 수 있다
<%@ include file = "/template/header.jsp %> 
지시자 taglib
- JSTL 또는 사용자가 작성한 커스텀 태그를 사용할 때 작성한다
 - 불필요한 자바 코드를 줄일 수 있다
<% taglib uri = "http://java.sun.com/jsp.jstl/core" prefix="c" %> 
JSP 기본객체
JSP 기본 객체
- JSP에서는 서버 정보 및 요청, 응답에 대한 데이터를 조회, 조작하기 위한 객체를 제공하고 있다
 
![]()
JSP 기본 객체 영역 Scope
![]()
JSP 기본 객체 영역 메서드
- servlet과 페이지간 정보를 공유하기 위해서 메서드를 지원한다
 
아래는 각 영역에서 사용할 수 있는 공통 메서드
| 메서드 | 반환형 | 설명 | 
|---|---|---|
| setAttribute(String name, Object value) | ||
| getAttributeNames() | Enumeration | 현재 객체에서 설정된 값의 모든 속성의 이름을 반환 | 
| removeAttribute(String name) | void | 현재 객체에서 인자로 받은 이름으로 설정된 값을 삭제 | 
getParameter vs set/getAttribute
- parameter: 클라이언트 측에서 보내온 정보 (client에서 request 객체에 담겨온 정보, 그래서 문자열밖에 담지 못함)
 - attribute: 서버 측에서 담은 정보
 
페이지 이동
페이지 이동
요청 (request) 을 받아서 화면을 변경하는 방법은 두 가지가 있다
포워드 방식
요청이 들어오면 요청을 받은 JSP 또는 Servlet이 직접 응답을 작성하지 않고, 요청을 서버 내부에서 전달하여 해당 요청을 처리하게 하는 방식
RequestDispatcher dispatcher = request.getRequestDispatcher("이동할 페이지");
dispatcher.forward(request, response);
request, response 객체가 전달되어 사용되기 때문에 객체가 사라지지 않는다
브라우저에서는 최초 요청한 주소가 표시된다
![]()
리다이렉트 방식
요청이 들어오면 내부 로직 실행 후, 브라우저의 URL을 변경하도록 하여 새로운 요청을 생성함으로써 페이지를 이동하는 방식
response.sendRedirect("location");
브라우저가 새로운 요청을 만들어 내기 때문에 최초 요청 주소와 다른 요청주소가 화면에 보여진다
![]()
forward vs redirect
- forward request, response 그대로 가지고 다른 곳에 요청을 보내서 응답을 다시 보내줌 동사무소에 서류를 가지고 갔는데 자기 부서 일이 아니라서 다른 부서에 서류를 전달해 주겠다
 - redirect 다른 곳으로 다시 요청을 보내라 자기 부서 일이 아니니까 다른 부서로 가세요.
 
그래서 redirect는 다른 부서 < 를 나타내는 링크만 있고 forward는 이동할 페이지 링크와 request dispatcher가 있다.