'JAVA Servlet'에 해당되는 글 4건

  1. 2008.07.20 서블릿과 모델 jsp의 역할
  2. 2008.07.20 stateless한 web에서 세션이란?
  3. 2008.07.20 Ant 설정
  4. 2008.07.15 자바 네트워크의 환경
JAVA Servlet2008. 7. 20. 21:30

Java 네트워크에서는 MVC구조에 충실하게 개발 할 수 있도록 많은 클래스와 기능 및 라이브러리를 제공하고 있다. 썬에서 배포한 java에는 인터페이스로만 메서드가 선언되어있고 실제로 이를 구현하여 라이브 러리를 제공하는 것은 서버이고 이를 만든 업체가 실행문을 넣어 제공하게 된다. 따라서 서버에 따라 약간의 기능과 성능이 차이를 가질 수 있다. 자바 웹 프로젝트에 lib라는 폴더에는 서버에서 제공하는 라이브러리를 복사해 두어야 extends 나 임플리먼트 할 수 있게 된다.

이렇게 *.java파일을 만드는데 각 기능에 따라 서블릿과 모델로 구분이 된다. 서블릿은 웹에서 접근하는 클래스이고 이 클래스는 request에서 받은 정보를 토대로 해당하는 비지니스 로직을 실행하도록 한다. 바로 이 비니지스 로직을 담당하는 것이 모델이다. 그리고 보릭에 따른 결과를 리턴하여 화면에 보여주는 것이 JSP이다.

* JSP의 필요성
자바에서 setContentType("text/html")등으로 브라우저 화면에 html이나 xml등 파일포맷에 맞추어 println을 하면 그 내용이 화면에 보이게 된다. 하지만 그 많은 코드를 자바에서 모두 프린트하게 할 수 없으므로 html에 자바코드를 넣게 된다. 바로 이러한 파일이 *.jsp파일이 된다.

Posted by 버터백통
JAVA Servlet2008. 7. 20. 21:05

서버는 굉장히 휘발성이 강하다. 사실 웹에서의 서버는 어떠한 수행을 한번 하고 나면 이전 상태를 기억하지 못하는 stateless한 방식이다. 따라서 서버는 브라우저에서 전달해온 request객체들의 정보를 저장하지 않고, 대안으로 session이라는 것에 세션 아이디와 정보를 저장하여 실행하게 된다.

최초 서버에 서블릿을 호출하면 해당 객체들이 new로 생성하고 이후에 destroy할 때(서버가 종료)까지는 새로운 생성 없이 쓰레드만 생성하여 실행을 한다.

서버 개발은 보통은 MVC모델로서 비지니스 로직은 Model, 서블릿은 Control, 화면에 출력하는 JSP는 view에 해당한다.

* 과정
최초 리퀘스트가 발생하면 서버는 세션을 우선 찾고 없을시 세션객체를 만든다. 그때 세션의 아이디(유니크한..)를 부여한다. 그리고 응답할때 아이디를 같이 실어서 보낸다. 이후 또 리퀘스트가 일어날 때 브라우저는 아이디를 보낸다. 서버는 세션 아이디를 검색하여 있으면 같은 비지니스 로직을 사용한다.

사용자 삽입 이미지

* 리퀘스트 객체는 최초 실행되고나면 사라진다. 이후는 세션에 저장된 값들로 처리된다.
* 브라우저가 새로 뜨면 새로운 리퀘스트가 날아가고 세션이 생성된다.

세션은 한번 실행한 브라우저에서 다시 호출이 발생하면 세션에 담겨진 정보를 보내어 처리하도록 하는 것이다. 이 세션은 보통 30분 정도의 수명을 가지는데 바꾸고 싶을 때는 프로젝트의 web.xml에서 다음과 같이 설정한다.
<!-- Session Live Time : 60분 -->
<session-config>
<session-timeout>60</session-timeout>
</session-config>








Posted by 버터백통
JAVA Servlet2008. 7. 20. 17:00

Ant는 이클립스 기반의 플러그인으로 프로젝트에 설정을 하면 여러 귀찮은 작업을 한번에 해결할 수 있도록 하는 도구이다. 플렉스에서도 플러그인 지원이 되지만 자바프로젝트에서 몇가지 설정하는 방법을 살펴본다.

개발중인 프로젝트 루트에 build.propertiesbuild.xml를 설치/복사한다.
build.properties에 보면 appserver.home=c:\\Program Files\\Apache Software Foundation\\Tomcat 6.0와 같이 설정되어있다 만약 설치 폴더가 다르면 수정해 주어야 한다.
그리고 tomcat.manager.username= "아이디 "  tomcat.manager.password="암호" 서버의 계정을 설정한다.

build.xml에도 특별한 변경이없으면 utf-8으로 프로젝트를 설정하고, ant로 실행하고자 하는 클래스를 경로들에 넣어준다.
<arg line="${appserver.url}/${name}/실행하려는 서블릿 클래스명" />
위에서 입력하는 이름은 프로젝트의 web.xml에서 설정하는 이름과 같아야 한다.
* web.xml
서블릿 설정 : 실제 실행할 java 클래스
<servlet>
  <servlet-name>FirstServlet</servlet-name>
  <servlet-class>xprime.test.FirstServlet</servlet-class>
</servlet>
설정된 서블릿 매핑 : 웹에서 호출하는 이름
<servlet-mapping>
  <servlet-name>FirstServlet</servlet-name>
  <url-pattern>/first</url-pattern>
</servlet-mapping>

web.xml에서 매핑된 이름을 넣어준다
<arg line="${appserver.url}/${name}/first" />

이외에 몇가지 설정을 하고 Ant메뉴에서 deploy나 run을 실행시킨다. 물론 실행하고자 하는 명령을 build.xml에 설정하여야 한다.
<target name="reload" depends="deploy" description="Reload application in Tomcat">
        <reload url="${tomcat.manager.url}"
                 username="${tomcat.manager.username}"
                 password="${tomcat.manager.password}"
                 path="/${name}"/>
     <exec executable="C:\Program Files\Internet Explorer\iexplore.exe">
      <arg line="${appserver.url}/${name}/first" />
     </exec>
</target>

이 코드는 reload라는 이름으로 만들어 ant에서 뽑아 놓은 명령문이다.

플렉스에서도 ant를 지원하는데 플러그인을 받아야 한다.
Flex Builder 메뉴에서 Help > Software Updates > Find and Install 선택 후 Search for new features to install 을 선택하여 넘어가다 보면 목록에 Eclipse Java Development Tools를 설치하면 된다. 그리고 프로젝트에 실행할 xml을 설정하면 된다. 그러나 as프로젝트에서 플렉스의 UIComponent와 같은 사용자 stageManager를 구현해 놓으면 ant없이 용량이 적은 swf를 뽑아낼 수 있다. 플렉스 UIComponent를 사용하면 기본용량이 200kb이상 증가하기 때문이다.

Posted by 버터백통
JAVA Servlet2008. 7. 15. 13:09
과거 웹이라는 개념이 나오기 전에는 업체에서 제공하는 CS(client server)프로그램을 각 PC에 설치하여 사용하여야 했다. 가령 K넷이라는 회사에서 주식정보를 서비스한다고 하면 해당 업체에서 제공하는 프로그램을 받아 설치하고 모뎀등을 이용해서 정보를 보아야 하며 다른 업체에서 유사한 서비스를 하여도 해당 업체에서 제공하는 프로그램으로 접근하여 정보를 보아야 했고 정보의 업데이트도 상당히 힘들고 오래 걸린다.
그러나 웹이 등장하면서 이러한 정보는 웹브라우저로 통일하여 볼 수 있게 되었고 업체들은 자신들의 서버를 두어 데이터를 공유/제공하기 시작했다.

최초 웹은 정적인 정보를 HTML로만 보여주어 정보를 업데이트하기 위해서는 html하드 코딩에 의해서만 갱신하였다. 이후 자동화/동적 기술인 CGI(최초의 동적 데이터 업데이트 기술 , c..등으로 개발)를 도입하면서 웹에 활력이 되었고 보다 발전하여 자바가 등장하였다.(사실 최초의 자바는 웹용보다는 냉장고나 모바일등에 탑재하기 위한 언어로 만들어졌다.) 이 후 자바가 CGI를 교체하였으며 자바 서블릿 개념이 등장하게 된다.
이 외에도 많은 언어 asp , php , jsp..등이 있지만 규모가 있는 회사는 보통 자바를 많이 사용한다.

* 자바의 강점과 CGI대체 동기
CGI는 프로세스 중심작업으로 요청과 작업이 발생하면 프로세스가 한개씩 생성되어 작업을 한다.(굉장히 많은 자원을 필요로 한다) 가령 IE6처럼 브라우저를 생성할 때마다 프로세스를 한 개씩 잡아가는 것과 유사..

Java는 프로세스는 한개만 사용하고 나머지는 쓰레드(서브 프로세스)를 사용한다.

* 서버의 형태
서버는 보통 3개정도로 구분 지을 수 있다.
1  Web Server : 일반적인 정적인 서버 (아파치...)
2  Servlet container : 서블릿하고 몇몇의 서블릿 스팩을 지원한다 (톰캣...)
3  Web application server(WAS) : J2EE정도의 모든 스펙을 제공한다.(제우스 , 웹스피어 , 웹로직)




[ 자바 Editions ]

사용자 삽입 이미지
                               
자바 네트워크하면 보톤 J2EE를 다루게 된다. J2EE에서 제공되는 서비스는 다음과 같다.

[ J2EE Standard Service ]

Java Servlet
자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 Java EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.

JSP(Java Server Page)
웹 서버에 있는 서브릿(servlet)을 사용해 웹 페이지의 내용과 모양을 제어하는 기술. 서브릿 응용 프로그램 인터페이스(API)로서 ASP(Active Server Page)와 유사하나 자바 서버 페이지(JSP)는 자바 프로그램을 호출하고 ASP는 스크립트(VBScript나 JScript)를 사용한다. 자바 서브릿과 연결된 하이퍼텍스트 생성 언어(HTML) 페이지는 .JSP라는 파일 이름이 붙는다.

EJB(Enterprise Java Beans)
서버/클라이언트 모형을 갖춘 네트워크의 서버 측에서 운용되는, 자바 언어로 이루어진 프로그램 컴포넌트 작성용 구조. 클라이언트에게 빈이라는 프로그램 컴포넌트를 분배하는 자바빈(Java Beans) 기술로 되어 있고, 새로운 프로그램 컴포넌트의 변경이나 추가 시에 개별 컴퓨터를 갱신하지 않고 서버에서 변화를 제어할 수 있는 애플리케이션에서 재사용할 수 있는데, EJB 컴포넌트 수행을 위해서는 컨테이너라고 하는 특정 애플리케이션의 일부가 되어야 한다.

JDBC(Java DataBase Connectivity)
자바(Java) 프로그램이 데이터베이스에 연결하고 구조화 조회 언어(SQL)로 질의를 하며, 자료를 갱신할 수 있도록 제공하는 응용 프로그램 인터페이스(API). 마이크로소프트사의 ODBC(open database connectivity)와 비교할 수 있다. 선 마이크로시스템스사에서는 모든 데이터베이스를 지원하는 자바 데이터베이스 접속성(JDBC)을 제공하지는 않고 JDBC 드라이브 관리자와 JDBC의 표준 추상 인터페이스를 제공하고 있다. 실제 해당 데이터베이스와 통신을 하는 JDBC 드라이버는 데이터베이스를 만든 벤더사에서 제공하고 있다.


JMS(Java Message Service)
네트워크에서 컴퓨터간 메시징이라는 일반 통신을 지원하는 선 마이크로시스템스사의 응용 프로그램 인터페이스(API). 표준 메시징 프로토콜과 자바 프로그램의 지원을 받아 특별 메시징 서비스를 제공하고, 자바 메시지를 주고받는 자바 애플리케이션을 개발하는 데 사용한다. 또한, 기업 메시징 시스템 액세스를 위한 API로서, 컴퓨터간 데이터 교환, 이벤트 안내, 서비스 요구 사항 등과 같은 정보를 포함하는 메시지를 비동기적으로 주고받는 비즈니스 애플리케이션을 작성하고 다른 시스템이나 다른 언어로 쓰여진 프로그램을 일원화하는 데 주로 사용되며, 자바 객체를 포함한 메시지와 확장성 생성 언어(XML) 페이지를 포함한 메시지를 지원한다.

JNDI(Java Naming and Directory Service)
자바 플랫폼 기반의 애플리케이션이 명칭 부여 및 디렉터리 서비스를 처리할 수 있는 응용 프로그램 인터페이스(API). 여러 종류의 명칭 부여 및 디렉터리 서비스를 가능하게 하는 이식성 애플리케이션을 만들 수 있으며, 그 중에는 파일 시스템과 LDAP, 노벨 디렉터리 서비스, 망 정보 서비스(NIS)와 같은 디렉터리 서비스와 공통 객체 요구 매개자 구조(CORBA), 자바 원격 메소드 호출(RMI), 기업 자바빈(EJB)과 같은 분산 객체 시스템이 포함된다. 도서관에서 책 위치와 배치를 정하듯이 분산된 컴퓨터 환경 내에서 컴포넌트의 위치와 배치를 정하며, 컴포넌트 애플리케이션끼리 서로 찾아낼 수 있다. 여러 서비스 제공자들이 API로 접속되어 있기 때문에 자바 네이밍 디렉터리 인터페이스를 사용하여 쉽게 다른 환경과 통합할 수 있고, 레거시 애플리케이션과 병존할 수 있다.

JTA(Java Transaction Service)
분산 객체, 효율적 자원 관리, 컴포넌트 기반 개발 등을 자바 환경에서 할 수 있도록 하는 표준 규약. 은행 전산망처럼 큰 규모의 전산 환경을 엔터프라이즈급 환경이라고 하는데, 이러한 환경은 수많은 고객 정보를 공유해야 하고 어느 곳에서나 동일한 서비스를 차질 없이 제공해야 한다. 이러한 개방적인 웹 환경을 지원하는 J2EE의 구성 요소는 분산 객체와 컴포넌트 기반 개발을 지원하는 기업 자바빈(EJB), EJB 컨테이너 또는 웹 애플리케이션 서버가 효율적 자원 관리를 위해 사용하는 JTA(Java Transaction API)와 JDBC, 웹 환경을 담당하는 서브릿과 JSP(Java ServerPages), 기타 자바 네이밍 디렉터리 인터페이스(JNDI), 자바메일, 자바 메시지 서비스(JMS) 등의 기능이 있다.

Java Mail
자바 관련 메일관련 J2EE플랫폼에서 사용하는 API이다.

JAF(Java Activation Framework)
JAF(Java Activation Framework)는 다양한 데이터 형식을 이용하여 작업하는 방법을 통합하기 위해 작성된 확장 자바 API이다. 실제로 JAF를 이용하면 간단한 텍스트 데이터에서부터 이미지, 비디오 등의 매우 복잡한 멀티 미디어 데이터로 구성된 문서까지 다양한 데이터를 제공할 수 있다.


RMI-IIOP(RMI over IIOP)
RMI-IIOP (RMI over IIOP)는 CORBA 시스템에서 Java RMI 인터페이스의 역할을 하는 프로토콜이다.
RMI-IIOP는 CORBA의 장점을 활용하면서 CORBA에서의 응용 프로그램 개발의 어려움을 단순화 시키도록 설계되었다. RMI-IIOP는 CORBA 구조, 공용체, 시리즈, 배열, 문자열 등을 이용하며 작동은 Object by Value 개념에 근거한다.
* RMI : Remote Method Invocation로 다른 서버에 자바클래스(리모트 오브젝트) 연동하여 분리된 환경에서도 편한 작업이 용이하다.


[ J2EE Category ]

사용자 삽입 이미지



[ J2EE Architecture ]

사용자 삽입 이미지






참고 ) 포트 : 모뎀과 컴퓨터 사이에 데이터를 주고받을 수 있는 통로로서 http에서 기본 포트는 80이다. 이때 도메인에서 http://www.daum.net:80에서 80을 생략하여 http://www.daum.net만으로 통상 접근한다.


참고) 서버 통신 : 클라이언트에서 필요한 정보를 요청(Request)할 때 보통 GET방식이나 POST방식으로 파라미터나 값을 보내게 된다. 이 요청을 받은 서버에 서블릿이나 페이지에서 데이타등을 처리하여 응답(Response)하게 된다.
사용자 삽입 이미지
GET : URL에 변수명과 값이 표시되는 방식
- http프로토콜에서는 파라미터가 헤더에 붙어서 간다.
 (헤더는 길이 한계가 정해져있다.)

POST : URL뒤에 값이 보이지 않는다.
- http프로토콜에서는 파라미터가 바디에 붙어서 간다.

ps) 서버쪽 자료와 정리에 도움을 주시는 윤세원 차장님께 감사드립니다~

Posted by 버터백통