JSP는 WAS에 의해 서블릿으로 변환되는 언어로, 서블릿으로 직접 작성하는 것 보다 간편하게 웹 페이지를 구성할 수 있다.
◆ JSP ( Java Server Page )
직접 서블릿을 구현해서 요청 처리 응답을 보내는 것이 번거롭기 때문에 만들어진 변환 언어로, WAS에 의해 서블릿(_jsp.java파일)로 변환되고 class파일로 다시 변환되어 HTML로 응답되는 언어이다
▶ JSP특징
- JSP 파일은 Web-Content 아래에 만들면 된다. ( 서블릿은 java resources - src )
- JSP파일은 실제 실행시에 Servlet파일로 자동 변환되어 저장이 된다.
서버의 work에 가보면 실제 작동되는 파일들을 볼 수 있다.
(workspace).metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\chap01\org\apache\jsp -
서블릿은 web.xml에 등록/매핑 작업이 필요하지만 JSP는 매핑 작업이 필요 없다.
( 주소창에 ip / 프로젝트명 / jsp파일명.jsp )으로 접속
/WebContent 아래에 두면 알아서 연동이 됨. ( 단, 다른 곳에 생성하면 안 된다. )
-
기본이 출력이기 때문에 out.println 등의 형식이 필요 없다.
( 서블릿에서 웹으로 출력하기 위해 out.println() 했던 작업을 그냥 출력 내용만 적게 되면 알아서 출력이 된다. ) -
- 디폴트경로지정
- web.xml파일을 열어보면 최상단에 <welcome-file> ~ </welcome-file>태그가 있는데, 해당 태그안에 있는 파일명들이 프로젝트의 디폴트 경로이다.
즉, 경로를 지정하지 않아도 해당 서버에 접근하게 되면 자동적으로 접근하게 되는 파일이다.
ex) <welcome-file>index.jsp</welcome-file>
을 등록 하게되면, 웹 브라우저에 ip/프로젝트경로 까지만 쓰게 되도 index.jsp로 접근 하게 된다.
◆ JSP 작성 요령(JSP태그)
1. page 지시어를 이용해서 변환 시 참고해야 될 내용을 설정
‘<%@ ~ %>‘의 형식으로 된 JSP태그를 지시어라고 하고 <%@page ~ %>를 페이지 지시어라고 한다.
▶ page지시어 기본 속성
-
- language
- 사용할 언어( 현재까지는 java가유일 )
-
- contentType
- 웹 브라우저로 표시 할 때 사용 될 언어, 또는 문서 (ex: text/html; charset=EUC-KR)
-
- pageEncoding
- jsp파일이 servlet으로 변환될 때 사용될 언어 (ex: EUC-KR)
주의) pageEncoding이 맞지 않아서 뜨는 오류 창에서 save UTF-8을 누르게 되면 파일이 깨질 수 있음으로 누르면 안 된다.
2. declaration / scriptlet / expression 을 사용해서 자바 처리를 중간 중간 설정
▶ declaration ( <%! %> )
해당 파일의 전역변수 선언이나 메서드 정의의 용도로 사용된다. 때문에 메서드 호출등의 일반 작업등은 처리할 수 없다.
( 변환된 서블릿의 전역변수, 또는 메서드로 변환된다. )
-
JSP에서 init()이나 destory()를 정의할 때 또한 declaration에서 정의하게 되는데, JSP에서 정의할 때는 jspInit(), jspDestory()의 이름으로 정의하게 될 경우 알아서 init/destory로 인식된다. @Override등의 어노테이션은 쓰지 않는다.
-
declaration은 아무대나 써도 우선적으로 변환 되서 스크립트릿 안에서 전연변수 사용이 가능하지만, 기본적으로 위쪽에 써준다. (가독성을 위해 )
▶ scriptlet ( <% %> )
JSP내에서 가장 자주 사용되는 태그이며, 사용자 요청 처리 중에 필요한 모든 자바 코드를 작성하는 곳이다. ( 변환된 서블릿의 service 메서드 안에 작성될 내용 )
▶ expression ( <%= %> )
자바 코드의 내용을 웹 브라우저에 출력할 때 사용한다.
( 서블릿으로 변환 시 out.print(“내용”)으로 변환되기 때문에 <%out.print("내용");%>을 쓰는 것과 같은 기능이다. )
주의 ) expression에서는 끝에 세미콜론(;) 을 붙이지 않는다.
◆ JSP에서 사용하는 주석
▶ 자바주석 ( //, /* */ .. )
스크립트릿 안에서 사용되는 주석으로 서블릿 변환 시 서블릿에 주석 내용이 그대로 변환된다.
▶ html주석 ( )
응답 받는 HTML에서 보이지 않지만, 서블릿 변환 시 out.print( )의 형식으로 변환되기 때문에 브라우저의 소스보기 기능으로 볼 수 있다.
▶ jsp주석 ( <%– –%>
서블릿 변환시 아예 서블릿에서 내용자체가 사라짐( 제거 됨 )
페이지 소스보기를 통해 볼 수 없음.
▶ 특수문자
웹 코딩 시 꺽쇠등의 문자를 출력 하고자 할 경우, 브라우저가 이를 태그로 인식 할 수 있기 때문에 여러 특수문자로 표현될 수 있는 문자들이 있다.
- & lt; = <
- & gt; = >
- & nbsp; = (공백)
◆ 지시어 ( Directive )
지시어는 <%@ ~ %> 의 형태로 되어있는 태그이고 종류는 총 3가지가 있다
( page, include, taglib )
- 옵션의 구분은 화이트스페이스(공백) 으로 구분 짓는다.
- 옵션 값들은 쌍 따옴표(“) 안에 적는다.
▶ page 지시어 속성
-
- import
- 자바의 import와 같은 기능, 자바의 Util등을 불러올 수 있다.
-
- errorPage
- 요청 처리 중 에러(익셉션) 발생 시 이동 될 페이지 설정
-
- isErrorPage
- isErrorPage가 true인 페이지를 errorPage설정 값에 넣을 수 있다.
exception.toString() 사용이 가능해짐
-
- isELIgnored
- EL을 무시할 것인지 설정, 디폴트(WAS마다다름) : false(무시안함)
=> ${param.cnt} 이런 형태의 코드가 EL
-
- info
- jsp의 목적을 설정
-
- trimDirectiveWhitespaces
- 지시어를 쓴 흔적을 출력 하냐, 안하냐를 결정
-
- autoFlush
- 기본true, 버퍼크기만큼 채워졌을 시 자동 출력 => 건들일은 거의 없다.
-
- buffer
- autoFlush가 true일 시 설정할 버퍼 용량 ( 최대 모을 문서 크기 )
▶ include 지시어
jsp코드 안에 include지시어를 통해 한 줄만으로 다른 jsp파일을 그대로 코드 상에 복사해 넣은 것과 같은 효과를 주는 지시어이다.