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)
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

주의) pageEncoding이 맞지 않아서 뜨는 오류 창에서 save UTF-8을 누르게 되면 파일이 깨질 수 있음으로 누르면 안 된다.


2. declaration / scriptlet / expression 을 사용해서 자바 처리를 중간 중간 설정


▶ declaration ( <%! %> )

해당 파일의 전역변수 선언이나 메서드 정의의 용도로 사용된다. 때문에 메서드 호출등의 일반 작업등은 처리할 수 없다.
( 변환된 서블릿의 전역변수, 또는 메서드로 변환된다. )

  • JSP에서 init()이나 destory()를 정의할 때 또한 declaration에서 정의하게 되는데, JSP에서 정의할 때는 jspInit(), jspDestory()의 이름으로 정의하게 될 경우 알아서 init/destory로 인식된다. @Override등의 어노테이션은 쓰지 않는다.

  • declaration은 아무대나 써도 우선적으로 변환 되서 스크립트릿 안에서 전연변수 사용이 가능하지만, 기본적으로 위쪽에 써준다. (가독성을 위해 )

<%!
    int num=10;
    String str = "ABC";
    public void jspInit(){
		System.out.println("init()호출");
    }
%>


▶ 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파일을 그대로 코드 상에 복사해 넣은 것과 같은 효과를 주는 지시어이다.

<%@ include file=“~.jsp” %>


▶ 이외 taglib 지시어가 있다. 뒤에서 알아보자.