Servlet 표준을 기반으로 작성된 웹 어플리케이션 개발 언어
HTML 내에 Java를 작성(Servlet과 반대)하여 동적으로 웹페이지를 생성하여 브라우저에게 돌려주는 페이지
실행 시 Servlet으로 변환된 후 실행

지시자(Directive)
스크립트 요소 : 스크립트릿(Scriptlet), 표현식(Expression), 선언부(Declaration)
JSP 기본 객체
표현 언어 (Expression Language)
Action Tag와 JSTL
| 종류 | 사용용도 | 형식 |
|---|---|---|
| 스크립트릿(scriptlet) | 자바코드 작성 | <% %> |
| 선언(declaration) | 변수, 메소드 선언 | <%! %> |
| 표현식(expression) | 계산식이나 함수를 호출한 결과를 문자열 형태로 출력 | <%= %> |
| 주석(comment) | JSP 페이지 설명 작성 | <%-- --%> |
| 지시자(directive) | JSP 페이지 속성 지정 | <%@ %> |



작성한 코드에 대한 설명을 기술할 경우 사용
HTML 주석문과 동일한 기능을 하지만 HTML 주석문은 클라이언트에게 보여지고, JSP 주석문은 보여지지 않는다.

JSP 주석문 vs 스크립트릿 주석문 차이는 강의
웹 컨테이너(Tomcat)가 JSP 번역하고 실행하는 방법을 서술
page : 해당 JSP 페이지 전반적으로 환경을 설정할 내용 지정
include : 현재 페이지에 다른 파일의 내용 삽입할 때 사용
taglib : 태그 라이브러리에서 태그를 사용할 수 있게 기능 제공

JSP 페이지 실행 매개변수를 제어
출력처리, 오류처리 등의 내용을 포함


JSP 내에 다른 HTML 문서나 JSP 페이지의 내용을 삽입할 때 사용한다.
반복적으로 사용되는 부분(header, footer 등) 별도로 작성하여 페이지 내에 삽입하면 반복되는 코드의 재작성을 줄일 수 있다.

JSTL 또는 사용자가 작성한 커스텀 태그를 사용할 때 작성한다.
불필요한 자바 코드를 줄일 수 있다.

| 내장 객체 | 타입 | 설명 |
|---|---|---|
| request | javax.servlet.http.HttpServletRequest | 요청 정보를 저장하는 객체 |
| response | javax.servlet.http.HttpServletResponse | 응답 정보를 저장하는 객체 |
| pageContext | javax.servlet.jsp.PageContext | JSP 페이지 정보를 저장하는 객체 |
| session | javax.servlet.http.HttpSession | HTTP 세션 정보를 저장하는 객체 |
| application | javax.servlet.ServletContext | 웹 어플리케이션 context 정보를 저장하는 객체 |
| out | javax.servlet.jsp.jsp.jspWriter | 결과를 출력하기 위해서 사용하는 스트림 |
| config | javax.servlet.ServletConfig | JSP 페이지 설정 정보를 포함하는 객체 |
| page | java.lang.Object | JSP 페이지를 구현한 자바 클래스 인스턴스 |
| exception | java.lang.Throwable | 에러페이지에서 사용하는 객체, 오류 정보를 담고 있음 |

| 메서드 | 반환형 | 설명 |
|---|---|---|
| setAttribute(String name, Object value) | void | key-value 형태로 각 영역에 데이터를 저장. name이 value를 얻어오기 위한 key가 됨. |
| getAttribute(String name) | Object | 현재 객체에서 인자로 받은 이름으로 설정된 값을 반환 |
| getAttributeNames() | Enumeration | 현재 객체에서 설정된 값의 모든 속성의 이름을 반환 |
| removeAttribute(String name) | void | 현재 객체에서 인자로 받은 이름으로 설정된 값을 삭제 |
요청(request)을 받아서 화면을 변경하는 두 가지 방법
포워드 방식
리다이렉트 방식
RequestDispatcher dispatcher = request.getRequestDispatcher("이동할 페이지");
dispatcher.forward(request, response);
request, response 객체가 전달되어 사용되기 때문에 객체가 사라지지 않는다.
브라우저에는 최초 요청한 주소가 표시된다.

response.sendRrdirect("location");
