JSP(Java Server Pages)
8. 이클립스 JSP 개발 환경 구축
1) 프로젝트(new) 생성 시 『Dynamic Web Project』 선택
2) 프로젝트 명 입력 시 식별자 작성 규칙을 준수
3) Target Runtime 지정 → 톰캣 설치 디렉터리 연결
※ 실제 실무 프로젝트에서는 웹 애플리케이션 서버가 이클립스에 플러그인 형태로 설치되어 운영되는 것이 아니라... 단독으로 웹 서버가 구축되고 이 환경에 맞게 개발이 이루어지게 된다. 또한, 아파치 토캣 이외의 다른 웹 어플리케이션 서버(제우스?)를 사용할 수 있다.
4) 프로젝트 생성 후에는 Server 탭에서 톰캣 서버 등록 ( 단, 서버를 새로 등록했을 경우 서버 관련 설정을 재구성 )
5) 톰캣 서버에 프로젝트 등록 → add and remove
6) 톰캣 서버 시작(재시작)
※ 이 시점에서... 포트번호 설정 및 확인 필요 (현재의 실습 환경은... 아파치 톰캣의 포트번호를 변경한 상태)
7) JSP 페이지 작성(확장자 『.jsp』) → WebContent 디렉터리 하위에 작성
※ 페이지 작성 전에 Encoding 방식을 확인하고 설정한다. (UTF-8)
※ JSP 기본 페이지는 (현재 이클립스 Oxygen.2 Release (4.7.2) 버전)
default 값으로 HTML 4.01 로 작성되어 있다.
HTML 5 로 변경을 해야 할 상황이라면 JSP 템플릿을 수정한 이후에 작업한다.
8) 톰캣 서버가 실행되고 있는 상태에서 웹 브라우저의 URL 주소 창에 다음과 같은 주소를 요청한다. (클라이언트 입장)
http://서버주소:포트번호/프로젝트명/파일이름.jsp
http://localhost:8090/WebPrj03/NewFile.jsp
※ 관찰
- First.jsp 생성 및 구성 이후
- 브라우저를 통해 해당 페이지 구성 내용 확인
- 『C:\WebStudy\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\WebPrj03\org\apache\jsp』
위의 경로를 통해 『First_jsp.java』파일 내용 확인.
- 우리가 클라이언트에게 전달할 내용을 직접 그리는 것이 아니라 이와 같은 방식으로 그려달라고 대필자(Servlet)에게 주문서를 작성하는 것.
확장자가 html 인 형태로 작성된 파일은 우리가 직접 그린 문서를 클라이언트에게 바로 전달했다면 jsp 는 우리가 제안만 할 뿐 직접 그리는 것이 아니라는 것을 파악하고 있어야 한다.
JSP 구성 요소
디렉티브(지시어) directive
페이지에 대한 설정 정보 지정. 클래스 속성 변경.
<%@ %>
page
페이지에 대한 기본 정보 입력. (생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등)
현재 문서를 나타내는 객체.
page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고 이 속성들은 웹 컨테이너에 정보를 제공한다.
또한 한 페이지에 page 디렉티브는 한 번 이상 나올 수 있고 위치도 관계가 없다.
하지만 보통 상단에 기술한다.
- 주요 속성
· language : 스크립트 코드에서 사용되는 프로그래밍 언어 지정
· contentType : 생성할 문서 타입
· import : 사용할 자바 클래스 지정
· session : 세션 사용 여부 지정
· buffer : 출력 버퍼 크기 지정
· autoFlush : 출력 버퍼가 다 채워졌을 경우 자동으로 버퍼에 있는 데이터를 출력
스트림에 보내고 비우고 만들지에 대한 설정 여부 지정
· info : 페이지에 대한 설명
· errPage : 실행 도중 에러 발생 시 보여줄 페이지 지정
· pageEncoding : 페이지 자체의 캐릭터 인코딩 지정
taglib
태그 라이브러리(tag library)
사용자가 만든(정의한) 태그 모음(사용자가 직접 기능 설정)
include
다른 문서를 포함하는 기능
여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때 이러한 내용을 매번 반복해서 입력하지 않고 별도의 파일을 저장해 두었다가 JSP 파일에 삽입하도록 하는 것이다. → 생산성 향상
include 디렉터리의 처리 과정은 정적으로 include 지시자를 사용한 JSP 페이지가 컴파일 되는 과정에서 include 되는 JSP 페이지의 소스 내용을 그대로 포함해서 컴파일한다.
즉, 복사&붙혀넣기 방식으로 두개의 파일을 하나로 구성한 후 같이 변환되고 컴파일된다.
스크립트 요소
스크립트 릿(Scriptlet : 스크립릿 : 스크립틀릿)
JSP 에 JAVA 코드를 기술
<% %>
JSP 문서 내에 JAVA 코드를 기술하는 부분이기 때문에 오로지 자바 코드만 올 수 있다.
스크립트 릿에 선언된 변수는 지역 변수의 성격을 가지게 되며 자바에서 메소드 내에 선언된 변수라고 할 수 있다.
표현식(Expression)
HTML 문서 결과값에 포함시키고자 할 때 사용(브라우저에 등장시킬 수 있는 영역)
<%= %>
선언부(Declaration)
스크립트 릿이나 표현식에서 사용할 함수를 작성할 때 사용
<%! %>
스크립트 릿이나 표현식에서 사용 가능한 변수나 메소드를 정의하는 부분이기 때문에 선언부에서 선언된 변수는 서블릿으로 변환되는 과정에서 멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다.
또한, 『_jspInit()』,『_jspDestroy()』와 같은 생명주기 운영을 위해 메소드를 재정의할 수 있다.
Spring
Spring Framework 이해하기
개요
1. Framework
: 애플리케이션을 구현하고 관리하는 환경(틀)
2. Spring Framework
: 설정 정보(xml)에 의해 애플리케이션을 구성하고, 객체를 생성하고, 관리하는 주체.
스프링 프레임워크(Spring Framework)의 개념
- 스프링은 자바 엔터프라이즈 어플리케이션 개발에 사용되는 어플리케이션 프레임워크.
어플리케이션 프레임워크는 어플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델 그리고 API 등을 제공해준다.
- 어플리케이션의 바탕이 되는 틀 → 스프링 컨테이너
- 스프링은 스프링 컨테이너 또는 어플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다.
- 스프링 컨테이너는 설정 정보(XML : 배치 기술서)를 참고해서 어플리케이션을 구성하는 오브젝트(객체)를 생성하고 관리한다.
- 스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용하게 된다.
- 스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 어플리케이션 오브젝트를 이용할 수 있도록 설정 정보를 작성하는 방법을 알아야 한다. ==> 설정 정보(xml)에 의해 어플리케이션을 구성하고 객체를 생성, 관리하는 주체
- ★★★공통 프로그래밍 모델 → IoC(역제어)/DI(dependency injection), 서비스 추상화, AOP
프레임워크라는 어플리케이션을 구성하는 오브젝트(객체)가 생성되는 동작하는 방식에 대한 틀을 제공해줄 뿐 아니라 어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준도 제시한다.
이런 틀을 보통 프로그래밍 모델이라고 한다.
스프링은 세 가지 핵심 프로그래밍 모델을 제공한다. (핵심 철학, 핵심 가치)
① IoC/DI
IoC/DI 라고 불리는 오브젝트 생명 주기와 의존관계에 대한 프로그래밍 모델이다.
스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI 를 프레임워크의 근간으로 삼고 있다.
스프링 프레임워크에서 동작하는 코드는 IoC/DI 방식을 따라 작성되어야 스프링이 제공하는 가치를 제대로 누릴 수 있다.
스프링이 직접 제공하는 모든 기술과 API, 심지어 컨테이너도 IoC/DI 방식으로 작성되어 있다.
스프링을 바르게 이해하고 효율적으로 사용하는데 기본이 되며 가장 중요한 기술이다.
IoC(Inversion of Control) : 제어의 역전
- 객체 관리의 주체
- Inversion of Control : 제어의 역전
- 객체 생성과 관리를 직접 하는 것이 아니라 (클래스)외부(컨테이너)에서 만들어진 오브젝트(객체)를 제공받는 입장이 되는 것
- Bean : 스프링이 관리하는 대상
- Bean Factory : 객체를 관리하는 주체. 일반적으로 이 기능을 확장한 Application Context 를 사용하게 된다.
- Application Context : Bean Factory 의 확장 버전
- 설정 정보 : 어떤 객체들이 관리 대상인지 설정한 정보 ①XML, ②Annotation 등을 이용한다. 객체들의 의존 관계도 기술되어 있다.
- IoC 컨테이너 : 객체를 등록하고 관리하는 공간
DI(Dependency Injection) : 의존성 주입
- 객체 관리의 방법.
- 자바에서 객체를 생성하고 관리하는 방법은 모두 has-a 관계를 통해 처리해 왔기 때문에 이들은 모두 의존관계가 치밀하고 밀접한 상황일 수 밖에 없다. 이 때문에... 이러한 강한 결합 상태는 유연성을 떨어뜨리는 결과를 초래하게 된다. 이러한 결합 상태를 풀어주는 과정(방법)이 바로 DI이다.
- Dependency Injection : 의존성 주입(의존관계 주입)
- 의존관계 주입 : 의존 객체를... 이 객체를 사용하는 객체에... 외부에서 주입하는 액션(상태)
- 의존관계 : A 가 실행되기 위해서 B 를 필요로 하는 상태
- 의존객체 : A 입장에서의 의존객체는 B (주입되는 객체)
→ 우선... A 객체에 B 객체의 주소를 넘겨줌으로써 B 객체를 사용하게 된다면 A 객체는 여전히 B 객체를 사용하는 데는 문제가 없고, B 객체는 A 객체와의 결합 상태가 느슨해진다고 할 수 있다.
이 때, 넘겨주는 방법은 생성자 또는 setter() 메소드를 이용하는 방법이 있다. DI 를 위해 객체는 작은 객체부터 생성해서 큰 객체로 DI 하게 된다. 이 때, 완성된 오브젝트(객체)가 만들어질 때까지 객체를 관리할 주체가 필요하게 되는데 그 역할을 하는 것이 바로 컨테이너인 것이다.
② 서비스 추상화
스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들 수 있게 되는데, 이를 가능하게 해주는 것이 바로 서비스 추상화이다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.
추상 = 유연
'교육 및 세미나 > 신입사원 교육' 카테고리의 다른 글
12일차(2018.01.18) (0) | 2018.01.19 |
---|---|
11일차(2018.01.17) (0) | 2018.01.19 |
9일차(2018.01.15) (0) | 2018.01.15 |
8일차(2018.01.12) (0) | 2018.01.12 |
7일차(2018.01.11) (0) | 2018.01.12 |