4 분 소요

JSP 프로그래밍1

JSP 프로그래밍

JSP 란

개념

  • 동적으로 콘텐츠를 생성하기 위해 프로그래밍 코드가 담긴 스크립트를 포함할 수 있게 하고, HTML과 유사한 태그를 통해 어려운 자바 코딩 없이도 자바 객체를 사용할 수 있음
  • JSP 기술의 기반
    • 템플릿 데이터
    • 동적인 데이터의 추가 - 표현식, EL
    • 기능의 추상화 - 자바 빈즈, 태그 라이브러리

장점

  • Write Once, Run Anywhere properties
  • 역할 분리
    • 프레젠테이션 기능과 비즈니스 로직 기능 분리하여 개발자와 디자이너의 역할 분리 가능
  • 컴포넌트, 태그 라이브러리 재사용
    • 자바 빈즈 컴포넌트, EJB, 태그 라이브러리
  • 정적 콘텐츠와 동적 콘텐츠 분리
  • 액션, 표현식, 스크립팅 제공
    • 액션 : JSP에서 사용되는 요소의 하나. 내장 객체, 서버 측 객체와 상호 동작할 수 있도록 유용한 기능을 추상화한 표준 태그
    • 표현식 : 데이터에 접근하기 위해 제공
    • 스크립팅 : 이러한 기능들을 서로 엮어서 콘텐츠를 생성해 낼 수 있도록 페이지 내에 자바 코드 삽입할 수 있는 영역 제공

JSP 동작 원리

JSP 기술이 지원하는 주요 항목

  • 표준 지시자
  • 표준 액션
  • 스크립트팅 요소
  • 태그 확장 매커니즘
  • 템플릿 콘텐츠

웹 애플리케이션

  • 서버상에서 동작하는 자바 런타임 환경
  • 요청을 처리하고 동적 콘텐츠를 생성하는 JSP
  • 요청을 처리하고 동적 콘텐츠를 생성하는 서블릿
  • 서버 측 자바빈즈 컴포넌트
  • HTML, DHTML, XHTML, XML 등의 페이지
  • 클라이언트 측 자바 애플릿, 자바빈즈 컴포넌트, 자바 클래스 파일들
  • 클라이언트 측에서 동작하는 자바 런타임 환경

컴포넌트와 컨테이너

  • 컴포넌트와 컨테이너를 분리하여 컴포넌트의 재사용 가능

변환과 실행

  • 변환 : 컨테이너가 JSP를 해석하여 실행될 수 있는 서블릿 클래스 파일로 변환
  • 실행 : 요청이 있을 때마다 발생

스크립트 기반 태그

  • 스크립트 기반 태그
    • <% %> 형식
      • <%@ %> 페이지에 대한 정보 설정
      • <%! %> 멤버변수 또는 메소드 선언
      • <% %> _jspService() 내에 그대로 옮겨짐
      • <%= %> _jspService() 내에 out.print()로 변경되서 옮겨짐.
    • 주석문
    • 지시자
      • page : JSP 페이지에 종속적인 설정 정보들을 알려주기 위한 수단
      • include : 다른 파일에 있는 코드를 가져다 사용
    • 스크립트릿
      • JSP 페이지가 요청될 때마다 수행되어야 하는 자바 코드를 추가할 때 사용
      • JSP 태그를 사용하다 HTML 태그를 사용하려면 JSP 태그를 닫고 써야 함
    • 표현식
      • 동적인 데이터를 응답 결과에 포함하기 위해 사용
      • <%= 실행문 %>
    • 선언문
      • JSP 페이지 내의 스크립트 코드에서 사용할 멤버 변수를 선언하거나 메소드 정의
      • <%! 변수 선언 %> <%! 메소드 선언 %>
  • XML 기반 태그
    • 표준 액션 태그
    • 커스텀 태그

내장 객체

  • JSP 파일이 자바 소스 파일로 변환될 때 _jspService() 메소드 내에 자동으로 선언 및 초기화되는 변수들

request, response

  • HttpServletRequest, HttpServletResponse 타입으로 요청 정보와 응답 정보를 처리하는 객체

session

  • javax.servlet.http.HttpSession의 내장 객체
  • 클라이언트마다 하나씩 생성되며, 클라이언트 단위로 정보를 유지하고자 할 때 사용

out

  • javax.servlet.jsp.JspWriter 타입
  • 버퍼 관련 메소드, 출력 관련 메소드

application

  • javax.servlet.ServletContext 타입
  • 웹 애플리케이션마다 하나씩 서비스가 시작될 때 생성되는 객체
  • 서버에 대한 정보 추출과 웹 애플리케이션 단위로 상태 정보 유지하기 위해 사용

pageContext

  • javax.servlet.jsp.PageContext 타입
  • JSP 페이지당 하나씩 자동으로 생성

표준 액션 태그, JSP 자바빈즈

표준 액션 태그

  • 미리 정해진 기능들을 JSP 스펙에 명시함으로써 모든 컨테이너가 동일하게 구현하는 태그
  • 모든 JSP 컨테이너에서 기본으로 제공

태그 라이브러리 이름

  • 표준 액션 태그를 사용하거나 다른 개발자들이 만든 커스텀 태그 사용 가능
  • <태그 라이브러리 이름 : 태그 이름><jsp : output>
  • <jsp:forward>
    • <jsp:forward page="경로" || "<%= %>" || "${ }" />
    • 서블릿에서 RequestDispatcher 객체의 forward() 메소드 기능 실행
    • 다른 페이지로 이동할 때 사용하는 태그
  • <jsp:include>
    • <jsp:include page="경로" || "<%= %>" />
    • 다른 페이지를 현재 페이지에 포함하고자 할 때 사용

JSP 자바빈즈

  • JSP의 표준 액션 태그로 접근할 수 있는 자바 클래스
  • 값을 가지는 속성(멤버 변수)과 값을 설정하는 메소드(setter), 값을 추출하는 메소드(getter)로 구성
  • 하나의 JSP 페이지에 종속되지 않고 여러 JSP 페이지에서 사용
  • 장점
    • 폼 데이터 처리 용이 - 클라이언트로부터 전달된 데이터를 쉽게 추출하고 다른 페이지에서 참조할 수 있음
    • 자바빈즈 활용 범위 확장 용이 - 자바빈즈를 활용하여 쉽게 상태 유지 ⇒ 여러 범위에서 사용
    • 컴포넌트 기반 구현 - JSP 페이지 크기 작아짐 ⇒ 컴포넌트 재활용, 개발 용이

개발 규약

  • 패키지화
    • 기본 패키지에 있으면 인식 안됨. 패키지화 필요
  • 기본 생성자 존재
    • 객체가 생성될 때 기본 생성자를 이용하기 때문에 반드시 기본 생성자가 있어야 함
  • 멤버변수의 접근자는 private로 선언
    • 객체의 속성값은 메소드로만 접근
  • getter, setter 메소드 작성, public 접근자 선언
  • 직렬화 구현(선택 사항)
    • 객체 정보를 기본형 데이터와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환시켜 입출력

사용

HelloBean hello = new HelloBean(); == <jsp:useBean class="HelloBean" id="hello">

hello.getName(); == <jsp:getProperty property="name" name="hello">

  • 자바빈즈 클래스의 객체를 생성하거나 이미 생성된 객체를 추출하는 기능
  • <jsp:useBeam 속성 />
    • id : 유일한 값, 대소문자 구분, 영문 / 숫자 / _로 시작
    • class
    • type : 생략 ⇒ 기본으로 주어진 자바빈즈 클래스 타입으로 접근, 부모 type으로 접근하게 하려면 type 속성을 사용하여 부모 타입 지정
    • scope
      • page : 하나의 JSP 페이지에서만 사용
      • request : 요청이 처리되는 동안 forward, include된 페이지 간에 사용
      • session : 클라이언트 단위로 사용
      • application : 웹 애플리케이션 단위로 사용

  • getter 메소드를 호출하여 필요한 기능을 수행하고 그 결과를 주어진 위치에 출력할 때 사용
    • name : 사용하려는 자바빈 태그에서 정의한 id 속성값과 동일하게 지정
    • property : 값을 추출하려는 자바빈즈 객체의 멤버변수 이름 지정

  • setter 메소드 호출하는 표준 액션 태그
    • name : 사용하려는 자바빈 태그에서 정의한 id 속성값과 동일하게 지정
    • property : 값을 수정하려는 자바빈즈 객체의 멤버변수 이름 지정
    • value : 자바빈즈 객체의 속성을 변경하려는 값 지정
    • param : 질의 문자열에서 param 속성에 할당된 값과 같은 name의 값으로 자바빈 속성값 설정
    • 설정 값 생략 : 질의 문자열에서 멤버변수와 같은 name 찾아 자동으로 설정
    • property = “*” :