JSP ( Java Server Page )
1. 실행과정
1) 클라이언트로부터 JSP 파일로 처음 요청이 들어오거나 JSP파일이 수정이 되었을 경우 JSP 파일을 자바 소스 파일(.java)로 변환한다.
이때 자바 소스 파일은 servlet이 된다.
2) 자바 소스 파일을 컴파일하여 .class 파일을 생성한다.
3) 서블릿 인스턴스를 생성한 후 jspInit 메소드를 호출한다.
4) _jspService 메소드를 호출하고 실행 결과를 클라이언트에 전달한다.
2. 구성요소
1) 지시자 태그(Directive Tag)
- JSP 컨테이너에게 정보를 제공하는 역할을 담당, page/include/taglib
2) 내장 객체(Implicit Object)
- 요청, 응답, 세션 등에 접근하고자 할 때 JSP페이지에서 사용할 수 있는 변수, request/response/session등
3) 스크립팅 엘리먼트(Scripting Element)
- JSP 페이지에서 자바 프로그래밍 언어를 사용하고자 할 때 사용, 선언문/표현식/스크립틀릿
4) 액션
- 서버에서 어떤 동작을 행하도록 명령을 내리고자 할 때 사용, include/forward/useBean/setProperty/getProperty등
3. 지시자태그
<%@ directiveName attribute="value" ... %>
1) page지시자
- JSP 컨테이너에게 해당 페이지를 어떻게 처리할 것인가에 대한 페이지 정보를 제공
- language : 디폴트값이 java
<%@ page language=”java” %>
- contentType : 내용이 어떤 문서 형식인지를 MIME 형식으로 브라우저에게 알려주는 역할을 하는 속성
<%@ page contentType=”text/html” %>
- import : 다른 패키지에 정의되어 있는 클래스를 사용하고자 할때 사용할 수 있는 속성
<%@ page import=”java.util.*, java.sql.*” import=”java.io.*” %>
- session : HttpSession을 사용할지 여부를 지정하기 위해 사용되는 속성
<%@ page session=”false” %>
- errorPage : 예외가 발생할 경우 예외를 처리할 페이지를 지정하기 위해 사용되는 속성
<%@ page errorPage=”error.jsp” %>
- isErrorPage : 에러 처리를 담당하는 페이지인지 아닌지를 지정하기 위해 사용되는 속성
<%@ page isErrorPage=”true” %>
2) include 지시자
- include 지시자는 여러 개의 JSP 페이지에 공통된 내용이 존재할 경우 별도의 파일에 저장해 두었다가 해당 내용을 필요로 하는 JSP 페이지에 삽입되도록 하기위해 사용된다. 이때 include되는 JSP 페이지의 소스 내용이 그래도 포함된 후 변환작업이 수행된다.
- include 지시자는 JSP 페이지내에 여러 번 사용할 수도 있고, 중첩해서 사용할 수도 있다.
- <%@ include file=”copyWrite.jsp” %>
4. 내장객체
JSP 페이지는 변수 선언 및 객체 생성과정 없이 바로 사용할 수 있는 객체를 의미한다. 이들 내장 객체를 사용할 경우 프로그래밍을 최대한 단순화시킬 수 있다.
1) 입출력과 관련된 내장객체
- request : 브라우저에서 JSP 페이지로 전달되는 데이터를 얻을 수 있다.
- response : 요청을 한 브라우저로 다시 보낼 응답 정보를 나타낸다.
- out : JSP 페이지의 결과를 브라우저로 출력 스트림이다.
2) 현재 실행되는 페이지의 외부 환경정보와 관련된 내장객체
- session : 서버에 정보를 저장하기 위해 사용된다.
- application : 웹 어플리케이션 자체를 의미한다
- pageContext : 현재 JSP 페이지의 Context를 나타내며, pageContext 내장 객체를 통해 다른 내장 객체를 접근할 수 있다.
3) 서블릿과 관련된 내장객체
- page : 변환된 서블릿 객체 자체를 나타낸다. page 대신 this 키워드를 사용할 수도 있다.
- config : 서블릿 객체 생성시 초기화된 정보(예, 초기 파라메터등)를 저장하고 있다
4) 예외와 관련된 내장객체
- exception : page 지시자의 isErrorPage 속성값이 true로 지정된 JSP 페이지에서만 사용할 수 있다.
5. 스크립팅 엘리먼트
JSP 페이지에서 자바 프로그래밍 코드를 끼어넣기 위해서 사용
1) 선언문
- 변수 또는 메소드를 정의할 때 사용
<%! String name; %>
<%!
javax.sql.DataSource ds;
public void jspInit() {
ds = // JNDI를 이용하여 룩업하는 동작;
}
%>
2) 표현식
- 문자열 데이터를 출력하고자 할때 사용
<%= name %>
3) 스크립틀릿
- 제어문, 변수선언과 같은 프로그래밍 코드를 작성할 때 사용
<% if(id.equals(“111”) && password.equals(“111”)) { %>
로그인 성공
<% else { %>
로그인 실패
<% }%>
6. 액션 태그
액션 태그는 서버에서 어떤 행동을 행하도록 명령을 내리는 태그이다.
서버에서 액션 태그를 만나게 되면 액션 태그에 정의되어 있는 순서에 따라 명령문을 수행하게 된다.
따라서, JSP 개발자는 액션 태그를 사용함으로써 자바 프로그래밍 언어에 대한 지식이 없어도 객체를 생성 및 사용할 수 있다
1) include
- 현재 페이지에 다른 문서에서 생성한 컨텐츠를 include시킨다
<jsp:include page=”url” flush=”value”/>
2) forward
- 한 JSP페이지에서 다른 JSP페이지로 제어를 완전히 옮긴다.
<jsp:forward page=”url” />
7. 자바빈즈
자바 빈즈는 빌더 도구 안에서 비주얼하게 조작할 수 있는 재사용 가능한 소프트웨어 콤포넌트이다.
EJB(Enterprise JavaBeans)와 혼돈하는 경우가 있는데, 자바 빈즈와 EJB는 전혀 다른 스펙이다.
자바 빈즈는 클라이언트 사이드 콤포넌트(Client-side component)이고, EJB는 서버 사이드 콤포넌트(server –side component)이다.
1) 작성 관례
- 빈은 인스턴스화가 될 수 있어야 한다 (추상 클래스나 인터페이스일 수 없다.)
- 빈은 java.io.Serializable 또는 java.io.Externalizable을 구현해야 한다.
- 빈은 인자를 갖지 않는 클래스 생성자 함수를 가져야 한다.
인자가 없는 생성자 함수가 필요한 이유는 대부분 빈들이 자동으로 생성되기 때문이다.
- 빈은 네이밍 컨벤션(Naming Convention)을 지켜야 한다.
- 빈은 캡슐화의 개념에 따라 작성되어야 한다. 즉, 클래스 정의시 멤버 변수의 접근 지정자는 private으로 정의하고 이 멤버를 접근하기 위한 getter와 setter 메소드를 정의한다.
2) JSP페이지에서 제공하는 액션 태그
- <jsp:useBean> : 자바 빈 객체를 새로 생성하거나 생성되어 있는 자바빈을 찾는 동작을 수행하는 액션태그
<jsp:useBean id=”name” scope=”page|request|session|application” typeSpec>
typeSpec ::= class=”className”|class=”className” type=”typeName”|type=”typeName” class=”className”|beanName=”beanName” type=”typeName”|type=”typeName” beanName=”beanName”|type=”typeName”
- <jsp:setProperty> : 자바 빈의 속성에 값을 할당하는 독작을 수행하는 액션 태그
<jsp:setProperty name=’name’ propexpr />
propexpr ::= property = “*” |property =”propertyName”|property =”propertyName” param=”parameterName”|property =”propertyName” value=”propertyValue
- <jsp:getProperty> : 지정한 빈의 속성값을 가져와서 스트림으로 변환하고 이것을 output스트림에 두는 동작을 수행하는 액션 태그
<jsp:getProperty name=”name” property=”propertyName” />