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 : View와 Model을 연결시켜주는 부분
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)에 담아서 전송하기 때문에 길이의 제
약이 없다.
: 파라미터를 사용자가 확인할 수 없어서 보안상 더 유용하다
(get은 url뒤에 붙여서 다 보임)
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 응답과 스레드의 소멸
'공부해요 > JSP' 카테고리의 다른 글
ajax으로 외부데이터 읽어오는데 불안정함 (0) | 2018.04.23 |
---|---|
[jstl]사용시 EL출력안됨. (0) | 2017.09.01 |
[ 모델2로 구현하는 자바 웹 프로그래밍 JSP2.2 & Servlet3.0 따라하기 ] 2 (0) | 2014.07.29 |
[ 모델2로 구현하는 자바 웹 프로그래밍 JSP2.2 & Servlet3.0 따라하기 ] 3 (0) | 2014.07.29 |
[ 모델2로 구현하는 자바 웹 프로그래밍 JSP2.2 & Servlet3.0 따라하기 ] 4 (0) | 2014.07.29 |