공부해요/JSP

[ 모델2로 구현하는 자바 웹 프로그래밍 JSP2.2 & Servlet3.0 따라하기 ] 1

예쁜꽃이피었으면 2014. 7. 29. 00:12

Chapter 01 jsp입문

1.1   웹 프로그래밍 개요

1)     웹 프로그래밍이란?

웹 프로그래밍 : 웹 상에서 사용자와 기업 또는 사용자들간의 연결을 가능하게 하는 프로그래밍 언어

<v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f><o:lock aspectratio="t" v:ext="edit"></o:lock><w:wrap type="square" anchorx="margin"></w:wrap>HTML(정적 데이터 처리) -> CGI , ASP , PHP , JSP..(동적 데이터 처리)

2)     웹 프로그래밍 언어 소개

l  CGI(Common Gateway Interface)

- 응용 프로그램과 웹 서버 사이의 정보를 주고 받는 방식이나 규약들을 정해 놓은 것.

- ASP , PHP , Perl , JSP ..

l  ASP(Active Server Page)

- 스크립트 언어 사용 / Active-X DDL 컴포넌트를 사용하여 어느 정도의 확장성 갖춤

-웹서버로 Windows NT기반의 IIS만을 사용할 수 있기 때문에 플랫폼이 비독립적

l  PHP(Personal Hypertext Preprocessor)

- c기반의 언어(속도 빠름)

- 서버 측의 지원 인프라가 매우 부족하며 확작성이 떨어지고, 기업형의 복잡한 시스템 구조에 적용하기가 힘들며 보안상의 약점을 가지고 있다.

l  JSP(Java Server Page)

-서블릿과 함께 구동함으로써 서블릿의 기능을 그대로 사용할 수 있으며, 자바빈즈, EJB같은 기술로 보다 강력한 객체 지향적 지원이 가능하게 됨. JSTL을 지원하게 되면서 웹 프로그램의 가독성이 좋아지고 유지 및 보수가 훨씬 쉬워졌다.

3) 웹 어플리케이션의 구조

- 웹 어플리케이션을 개발한다는 것 = 웹을 통해 정보를 주고받는 프로그램을 개발한다는 것

  - 클라이언트/서버 방식 = 웹 서버 + 애플리케이션 서버 = 3-tier 구조

(웹 서버 : 일반적으로 사용자의 요청을 받아들이고 결과 페이지를 전송

애플리케이션 서버 : 사용자의 요청을 실질적으로 처리할 수 있는 비즈니스 로직이 구현되어 있다)

 

1.2   JSP와 서블릿(Servlet)

1)     JSP의 개요

브라우저는 기본적으로 HTML 형식의 문서만을 표시할 수 있기 때문에 동적인 웹 페이지, 즉 사용자의 요청에 맞는 경과를 표시해주는 웹 페이지를 웹 서버 측에서 사용자에게 전송해주기 위해서는 요청의 처리 결과에 따라서 자동으로 변화될 수 있는 웹 페이지를 가지고 있어야 한다.

2)     JSP의 특징

l  강력한 이식성

– JVM을 이용한 자바 언어의 특성상 어떤 운영체제에서도, 어떤 JSP 컨테이너에서도 사용이 가능하므로 한번 작성한 코드를 별다른 수정없이 다른 플랫폼으로 얼마든지 이식이 가능하다.

l  서버 자원의 효율적인 사용

기존 CGI방식의 단점인 프로세스관리의 어려움으로 인한 서버 자원의 낭비였다면 JSP는 이러한 문제점을 스레드(Thread)기반의 아키텍처를 사용하여 개선시켰다.

- 최초의 요청이 웹 서버에 들어오면 서버는 그 요청에 맞는 JSP페이지에 대한 서블릿 인스턴스를 단 한 번 생성하고 이후 같은 페이지를 요청하는 사용자가 있을 경우 이미 생경되어 있는 인스턴스에 스레드 단위로 요청을 전송하여 처리하기 때문에 서버 자원의 효율적인 사용이 가능해졌다.

l  간편한 MVC패턴 적용

- View(JSP) + Model(자바빈즈) +Controller(서블릿)

- View : 사용자에게 보여지는 화면

 Model : 실제 비즈니스 로직이 들어가는 부분

 Controller : ViewModel을 연결시켜주는 부분

l  JSTL , 커스텀 태그 등을 이용한 개발 용이성

3)     서블릿(Servlet)의 개요

- 웹 서버 상에서 실행되는 자바의 클래스 파일

- 자바의 모든 API를 그대로 사용할 수 있다 / 강력한 객체 지향성

- 일반적인 자바 클래스와 비교해볼 때 서블릿은 반드시 javax.servlet.Servlet인터페이스를 구현해서 작성해야만 하며 입력과 출력을 http프로토콜의 요청과 응답의 형태로 다룬다는 점이 다르다.

4) HTTP 프로토콜의 이해

l  HTTP 프로토콜의 구조

- 요청(Request)과 응답(Response)의 형태로 이루어짐

l  HTTP 요청(Request) 메시지

-HTTP 메소드와 접근할 주소(URL) 정보 그리고 서버에 전달할 데이터인 폼 파라미터로 구성된다.

- GET방식 : 전송할 파라미터 값들을 시작 라인의 URL 정보에 붙여서 같이 전송.

             : 파라미터 길어가 256바이트를 넘을 수 없다.

             : 본문(body)이 필요없기 때문에 전송 속도가 post방식에 비해 빠르다.

             : 전송할 데이터가 적은 경우 유용

- POST방식 : 파라미터 값들을 요철 메시지의 본문(Body)에 담아서 전송하기 때문에 길이의 제

약이 없다.

: 파라미터를 사용자가 확인할 수 없어서 보안상 더 유용하다

(geturl뒤에 붙여서 다 보임)

l  HTTP 응답(Response) 메시지

- 요청에 대한 서버의 처리 성공여부를 표시하는 상태코드 /

웹 서버가 응답해주는 콘텐츠의 타입 정보 /

콘텐츠의 내용으로 구성.

5)     웹 컨테이너란

- 웹 서버의 내부에서 서블릿 클래스 또는 JSP파일을 실행하기 위한 실행 환경을 제공하는 역할을 하며

특히 서블릿 클래스에 대한 웹 컨테이너를 서블릿 컨테이너 , JSP 파일에 대한 웹 컨테이너를 JSP 컨테이너라고 한다. 다만 실제적으로 이 둘을 혼용하여 웹 컨테이너(서블릿 컨테이너)로 통칭하는 경우가 많다.

대표적을 자카르타 , 톰캣 , 웹로직 , Resin 등이 있다.

6)     서블릿 동작 원리

서블릿은 서블릿 컨테이너라는 실행황경이서만 동작할 수 있다.

l  사용자의 URL 요청

- 어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버 측 URL과 서블릿 클래스를 미리 매핑시켜 놓은 배포서술자(Deployment Descriptor)가 필요하다.

- 웹 서버가 배포 서술자를 통해 지금 받은 요청이 서블릿 요청이라는 것을 알게되면 서블릿을 담당하는 웹 컨테이너로 그 요청을 전달한다.

l  Request , response객체 생성

- 웹 컨테이너는 HTTP 요청(Request)을 처리하기 위한 requeset 객체 +

HTTP 응답(Response)을 위한 response객체를 생성.

- request객체는 javax , servler.http.HrrpServletRequest 객체 타입으로 생성됨.

 Response 객체를 javax.servlet , http.HttpServletResponse 객체 타입으로 생성

l  서블릿 인스턴스와 스레드 생성

- requeset , response 객체가 생성된 뒤 사용자의 URL요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아낸다.

- 만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init()메소드를 실행하여 초기화 한 뒤 스레드를 하나 생성한다.

- 이미 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스레 스레드만 하나 생로 생성한다.

- 각 서블릿 인스턴스를 웹컨테이너당 하나만 존재하기 때문에 init()메소드는 각 서블릿 당 한 번씩만 호출된다.

l  Service()메소드 호출과 서블릿 클래스 실행

- 스레드가 생성되면 각 스레드에서 service() 메소드가 호출된다.

- service()메소드 호출

            1) GET방식 : 서블릿 클래스의 doGet() 메소드가 request, response객체를 인자로

자동으로 호출

2) POST방식 : 서블릿 클래스의 doPost() 메소드가 request, response객체를 인자로

자동으로 호출

                     - 개발자가 실제로 동적인 웹 페이지 생성을 할 수 있는 코드를 만들어야 하는 부분이

doGet() , doPost() 메소드 부분이라고 할 수 있다.

l  응답과 스레드의 소멸

 

반응형