JSP
JSP(Jakarta Server Pages)
자카르타 서버 페이지(Jakarta Server Pages, JSP, 이전 명칭: 자바서버 페이지(JavaServer Page)는 HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하여 웹브라우저에 돌려주는 서버 사이드 스크립트 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다.
자카르타 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 1999년 썬 마이크로시스템즈에 의해 배포되었으며 이와 비슷한 구조로 PHP, ASP, ASP.NET 등이 있다.
아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.
JSP 동작 흐름

JSP 스크립팅 요소(Scrpting Element)
선언문 (Declaration)
- 멤버변수 선언이나 메소드를 선언 하는 영역.
- 형식 <%! 멤버변수와 method작성 %>
<%!
String name;
public void init(){
name = "아아아";
}
%>
스크립트릿 (Scriptlet)
- Client 요청 시 매번 호출 영역으로, Servlet으로 변환 시 service() method에 해당되는 영역.
- request, response에 관련된 코드 구현.
- 형식 <% java code %>
<%
for(int dan=2;dan<10;dan++){
out.println("<tr>");
String classname = dan % 2 == 0 ? "color1" : "color2";
for(int i = 1; i < 10; ++i){
out.println("<td class=\"" + classname + "\">" + dan +
" * " + i + " = " + dan * i + "</td>");
}
out.println("</tr>");
}
%>
표현식 (Expression)
- 데이터를 브라우저에 출력할 때 사용.
- 형식 <%= 문자열 %>
안녕 <%= name %>!!!
- 주의) <%= 문자열; %> : 문자열 뒤 세미콜론(;)은 작성X
- <%= 문자열 %> == <% out.print(문자열); %> : 같은 표현
- 코드 상에서 부가 설명을 작성.
- 형식 <%— 주석 할 code —%>
<!-- HTML 주석 -->
<%-- JSP 주석 --%>
<%
%>
Directive
JSP 지시어 (Directive)
- page Directive
- 컨테이너에게 현재 JSP페이지를 어떻게 처리할 것인가에 대한 정보를 제공한다.
- 형식 <%@ page attr1=”val1” attr2=”val2” … %>
- include Directive
- 특정 jsp file을 페이지에 포함.
- 여러 jsp페이지에서 반복적으로 사용되는 부분을 jsp file로 만든 후 부분 영역에 include 시켜 반복되는 코드를 줄일 수 있다.
- 형식 <%@ include file=”/template/header.jsp” %>
- tag library Directive
JSP 지시자 (Directive) - page
속성 | 기본값 | 설명 |
---|
language | java | 스크립트에서 사용 할 언어 지정 |
info | | 현재 JSP 페이지에 대한 설명 |
contentType | text/html;charset=ISO-8859-1 | 브라우저로 내보내는 내용의 MIME 형식 지정 및 문자 집합 지정 |
pageEncoding | ISO-8859-1 | 현재 JSP 페이지 문자집합 지정 |
import | | 현재 JSP 페이지에서 사용할 Java 패키지나 클래스를 지정 |
session | true | 세션의 사용 유무 설정 |
errorPage | | 에러가 발생할 때에 대신 처리될 JSP 페이지 지정 |
isErrorPage | false | 현재 JSP 페이지가 에러 핸들링 하는 페이지인지 지정하는 요소 |
buffer | 8KB | 버퍼의 크기 |
autoflush | true | 버퍼의 내용을 자동으로 브라우저로 보낼 지에 대한 설정 |
isThreadsafe | true | 현재 JSP 페이지가 멀티 쓰레드로 동작해도 안전한지 여부를 설정하는 것으로 false인 경우 JSP 페이지는 SingleThread로 서비스 된다. |
extends | javax.servlet.jsp.HttpJspPage | 현재 JSP 페이지를 기본적인 클래스가 아닌 다른 클래스로부터 상속하도록 변경 |
기본 객체
기본 객체명 | Type | 설명 |
---|
request | jakarta.servlet.http.HttpServletRequest | HTML 폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용 |
response | jakarta.servlet.http.HttpServletResponse | 사용자 요청에 대한 응답을 처리하기 위해 사용 |
pageContext | jakarta.servlet.jsp.PageContext | 각종 기본 객체를 얻거나 forward 및 include 기능을 활용할 때 사용 |
session | jakarta.servlet.http.HttpSession | 클라이언트에 대한 세션 정보를 처리하기 위해 사용 page directive의 session 속성을 false로 하면 내장 객체는 생성이 안된다. |
application | jakarta.servlet.ServletContext | 웹 서버의 애플리케이션 처리와 관련된 정보를 레퍼런스하기 위해 사용 |
out | jakarta.servlet.jsp.JspWriter | 사용자에게 전달하기 위한 output 스트림을 처리할 때 사용 |
config | jakarta.servlet.ServletConfig | 현재 JSP에 대한 설정 정볼르 포함하는 객체 |
page | java.lang.Object | 현재 JSP 페이지에 대한 참조 변수에 해당됨 |
exception | java.lang.Exception | Error를 처리하는 JSP에서 isErrorPage속성을 true로 설정하면 exception 내장 객체를 사용할 수 있고 기본은 false로 설정되어 있다. 전달된 오류 정보를 담고 있는 내장 객체 |
기본 객체 Scope
기본 객체명 | 설명 |
---|
page | 하나의 JSP 페이지를 처리할 때 사용되는 영역. 한번의 클라이언트 요청에 대하여 하나의 JSP 페이지가 호출되며, 이때 단 한 개의 page객체만 대응이 된다. 페이지 영역에 저장한 값은 페이지를 벗어나면 사라진다. !!! 커스텀 태그에서 새로운 변수를 추가할 때 사용한다. |
request | 하나의 HTTP 요청을 처리할 때 사용되는 영역. 웹 브라우저가 요청을 할 때마다 새로운 request 객체가 생성됨. request 영역에 저장한 속성은 그 요청에 대한 응답이 완료되면 사라진다. |
session | 하나의 웹 브라우저와 관련된 영역. 같은 웹브라우저 내에서 요청되는 페이지들은 같은 session들을 공유하게 됨. !!! 로그인 정보 등을 저장한다. |
application | 하나의 웹 어플리케이션과 관련된 영역. 웹 어플리케이션당 1개의 application 객체가 생성됨. 같은 웹 어플리케이션에서 요청되는 페이지들은 같은 application 객체를 공유함. |
공통 method
- servlet과 jsp페이지 간에 특정 정보를 주고 받거나 공유 하기 위한 메소드를 지원.
method | 설명 |
---|
void setAttribute (String name, Object value) | 문자열 name 이름으로 Object형 데이터를 저장한다. Object형이므로 어떠한 Java 객체도 저장이 가능하다. |
Object getAttribute (String name) | 문자열 name에 해당하는 속성 값이 있다면 Object 형태로 가져오고 없으면 null을 리턴 한다. 따라서 리턴 값에 대한 적절한 형 변환이 필요하다. |
Enumeration getAttributeNames() | 현재 객체에 저장된 속성들의 이름들을 Enumeration 형태로 가져온다. |
void removeAttribute (String name) | 문자열 name에 해당하는 속성을 삭제한다. |
WEB Page 이동
| forward(request, response) | sendRedirect(location) |
---|
사용 방법 | RequestDispatcher dispatcher = request.getRequestDispatcher(path); dispatcher.forward(request, response); | response.sendRedirect(location); |
이동 범위 | 동일 서버 (project)내 경로 | 동일 서버 포함 타 URL 가능 |
location bar | 기존 URL 유지 (실제 이동되는 주소 확인 불가) | 이동하는 page로 변경 |
객체 | 기존의 request와 response가 그대로 전달 | 기존의 request와 response는 소멸되고, 새로운 request와 response가 생성 |
속도 | 비교적 빠름 | forward()에 비해 느림 |
데이터 유지 | request의 setAttribute(name, value)를 통해 전달 | request로는 data 저장 불가능 session이나 cookie를 이용 |