3. J2EE이해하기
J2EEAPI LIST
API
1. J2EE (Java 2 Enterprise Edition)
■ J2EE(Java Platform, Enterprise Edition)란
J2EE는 분산 엔터프라이즈 애플리케이션을 개발하기 위한 플랫폼이다.
다양한 요구 사항을 반영하여 API 와 표즌들 가운데
JCP의 후원 아래 SUN과 기업들이 엔터프라이즈 관련 표준과 API를 J2EE라는 이름으로 통합하였음.
J2EE는 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합입니다.
J2EE를 만든 것은 Sun Microsystems이고 SUN에서 J2EE 스펙을 시범적으로 구현해두기는 하지만,
IBM, BEA, Oracle, HP, Iona등 여러 벤더들도 그 스펙을 구현할 수 있으며 J2EE 호환성을 검증하
는 기구의 검증을 통과하기만 하면 J2EE 호환 제품으로 시장에 출시할 수 있습니다.
그리고 이런 벤더들은 J2EE 스펙을 개선하는 과정에도 활발히 참여하기 때문에, J2EE는 사실상
SUN의 독점적인 기술이라기 보다는 Java진영으로 불리는 여러 Vendor들과 개발자들이 같이 만들어
가고 공유하는 기술로 보는 것이 더 정확할 것입니다.
■ 기본 특징
- > 언어는 Java, 플랫폼은 자유
- > 구성 요소
Servlet : 클라이언트가 보내는 HTTP 요청을 처리하는 서버측 자바 프로그램이며, Servlet 엔진이 있어야 합니다.
JSP(Java Server Pages): HTML이나 Java 코드를 써서 사용자에게 정보를 보여 줍니다. JSP가 처음 실행될 때 Servlet 엔진이 이것을 Servlet으로 컴파일시켜서 내부적으로는 Servlet으로 동작합니다.
EJB(Enterprise Java Beans) : Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있습니다.
Remote Method Invocation(RMI): 프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술입니다.
Java Naming DirectoryInterface (JNDI): 자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공합니다.
Java Database Connector(JDBC): 여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공합니다.
각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 합니다.
Java Connector Architecture(JCA): 이기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공합니다.
Java Message Service (JMS): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다.
*J2EE 플랫폼이 제공하는것
1. 데이터 베이스 접속 (database connnectivity)
2. 엔터프라이즈 비지니스 컴포넌트(enterprise busienese components)
3. MOO (message-oriented middleware)
4. 웹 관련 컴포넌트 (web-related componets)
5. 통신 프로토콜 (communication protocols)
6. 상호 운용성(interoperability)
J2EE 는 스펙들에 대한 스펙, 슈퍼스펙이다. J2EE는 서블릿 스펙 2.4와 jsp 2.0 스펙과 같은 스펙들을 포함하고 있다. 서블릿 스펙과 jsp스펙은 둘다 웹 컨테이너를 위한 것이다.
J2EE1.4 스펙에는 이것 말고도 EJB2.1 스펙도 들어 있다. 이 스펙은 EJB 컨테이너에 사용한다. 웹 컨테이너는 웹 컴포넌트(서릿,JSP)를 위한 것이고, EJB컨테이너는 비즈니스 컴포넌트용이다.
J2EE 에 완벽하게 부합되는 J2EE 애플리케이션 서버는 웹컨테이너와 EJB 컨테이너 둘다 있어야 한다. 톰캣은 웹 컨테이너일 뿐이다.
"컨테이너"
컨테이너는 서블릿과 웹 서버가 서로 통신할 수 있는 손쉬운 방법을 제공한다. 다시 말하면, 서버와 대화하기 위하여 개발자가 직접 ServerSocket을 만들고 특정포트에 리스닝하고, 연결 요청이 들어오면 스트림을 생성하는 등 이런 복잡한 일련을 할 필요가 없단 얘기이다. 컨테이너는 어떻게 웹 서버와 통신해야 하는지 잘 알고 있으며 이런 통신 기능을 api로 제공한다.따라서 웹 서버와 서블릿이 서로 통신하기 위한 통로인 통신 API에 대해서 고민할 필요가 없다. 개발자가 고민해야 할 부분은 서블릿에 구현해야 할 비즈니스 로직이다.
* 컨테이너가 요청다루기 *
1. 사용자가 서블릿에 대한 요청을 클릭
2. 컨테이너는 들어온 요청이 서블릿이라는 것을 간파하곤 HttpservletRequest, HttpServletResponse 객채생성
3. 사용자가 날린 url을 분석하여 어떤 서블릿에 대한 요청인지 알아내고 해당 서블릿의 스레드를 생성하여 request,response 전달
4. 컨테이너는 서블릿의 service() 메소드를 호출 -> service()에서는 doGet()을 호출할지 doPost를 호출할지 결정(일단 doGet으 로 간주)
5. doGet()메소드는 동적인 페이지를생성한 다음, 이를 response객체에 실어 보낸다. 보내고 난 후에도 response에 대한 레퍼런스를 가지고 있다.
6. 스레드 작업이 끝나면 컨테이너는 response객체 를 HttpResponse로 전환하여 클라이언트로 내려보낸다. 이제 마지막으로 Request와 Response 객체를 소멸.
* servlet코드 ex *
import javax.servlet.*; import javax.servlet.http.*; import javax.io.*; public class ExServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException { PrintWriter out = response.getWriter(); java.util.Date today = new java.util.Date(); out.println("<html>" + "<body>"+ "excode" + today + "</body>" + "</html>" ); } }
HttpServletResponse객체에는 PrintWriter가 들어있다. PrintWriter말고도 다양한 출력옵션이 있는데 html이 아닌 이미지같은것을 출력할때 쓰면 된다.
[참고] RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forword(request,response);
* 배포서술자에 url을 서블릿에 매핑하기 *
<servlet> <servlet-name> mkk </servlet-name> <servlet-class> org.thinker.Mkk </servlet-class> </servlet> <servlet-mapping> <servlet-name> mkk </setvlet-name> <url-pattern> /mkk.do </url-pattern> </servlet-mapping>
DD에서 할수 있는 일은 url 매핑 말고도 무척 많다. 보안역할 설정, 오류 페이지 설정, 항목 라이브러리, 초기화 구성 및 관련 정보 설 정 등등
//그리고 서버가 J2EE의 모든 규격을 구현한 서버라면 EJB선언 및 접근에 관련된 내용도 여기서 설정한다.
■EJB는
Multi-tier의 분산형 객체지향 JAVA 어플리케이션을 개발하고 보급하기 위한 컴포넌트 아키텍쳐로서 Sun 사에서 개발했고, EJB는 확장성 있는 어플리케이션 서버 컴포넌트들을 지원하는 여러 서비스들을 제공함으로써 비즈니스 어플리케이션들을 컴포넌트 단위로 쉽게 작성 할 수 있도록 합니다. EJB는 트랜잭션 처리 모니터(TP Monitor), 웹 서버(Web Server), 데이터 베이스 서버(Database server), 어플리케이션 서버 (Application Server) 등과 같은 트랜잭션 처리 시스템에서 운영될 수 있습니다. EJB 컴포넌트 모델은 서버 컴포넌트들을 지원하기 위해 JavaBean 컴포넌트 모델을 확장했고, 서버 컴포넌트란 어플리케이션 서버에서 실행되는 어플리케이션 컴포넌트를 의미합니다. 서버 컴포넌트들은 어플리케이션을 개발하기 위해 다른 컴포넌트들과 결합될 수 있습니다. EJB 컴포넌트들을 JavaBean 컴포넌트들과 달리 시각적인 Java IDE 환경에서 조작 될 수 없습니다.
엔터프라이즈 자바빈(EJB)는 3-Tier를 지원하는 컴포넌트 기반의 분산 컴퓨팅을 위한 구조입니다. EJB 를 사용하면 가단한 노력만으로 분산 처리가 가능하고, 보안성이 있으며, 트랜잭션이 가능한 자바 클래스를 만들 수 있습니다.