티스토리 뷰





반응형

서블릿에 대하여

웹 브라우저의 요청을 받아 해당하는 웹 페이지를 찾아서 보내주는 일을 하는 컴퓨터를 웹 서버라고 한다.

웹 서버는 웹 브라우저로부터 URL을 받아서 그에 해당하는 HTML 문서를 찾아서 웹 브라우저로 보내주는 일을 한다.

 

웹 서버는 HTML문서 파일을 찾아서 보내주는 일 뿐만 아니라 HTML문서를 생성하는 프로그램을 호출해서 그 프로그램의 실행 결과를 보내주는 일도 한다. 이때 호출 되는 프로그램을 "웹 애플리케이션이라" 한다.

 

최초의 앱 애플리케이션 기술인 CGI에서는 웹 애플리케이션을 웹 서버와 동등한 독립적인 프로그램 형태로 작성함

하지만 CGI에는 커다란 두 가지 문제점이 있었다.

첫째 : 독립적인 프로그램을 실행하기 위해서는 시스템 자원이 많이 필요했다.

둘때 : 운영체제에 의해 웹 서버와 별개의 프로그램으로 취급되는 CGI프로그램의 실행 흐름을 웹 서버가 적절하게 제어를 못했다.

 

CGI문제를 해결하기 위해 웹 서버의 일부인 모듈 형태로 웹 애플리케이션을 작성하는 새로운 기술이 개발되기 시작하였다. 처음으로 등장한 접근 방법은 "웹 서버의 서브루틴 형태로 웹 애플리케이션을 만드는 것이었다. 그 후 객체 지향 프로그래밍 기법이 도입되어 웹 어플리케이션을 객체 형태로 구현하는 기술이 등장했고 그 중 하나가 바로 "서블릿"이다.

 

서블릿이란 자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다. 서블릿 기술에서는 자바 클래스 형태로 웹 애플리케이션을 작성하는데, 이 클래스를 서블릿 클래스라고 한다.

 

서블릿 클래스를 작성할 때 지켜야할 규칙은 다음과 같다.

  1. 서블릿 클래스는 javax.servlet 패키지에 속하는 Servlet인터페이스를 구현하도록 만들어야한다.
  2. doGet또는 doPost라는 메서드를 선언하고, 그 안에 서블릿 클래스가 호출되어있을 때 해야 할 일을 써 넣어야한다.
  3. 동적 HTML문서를 생성해서 웹 브라우저로 보내는 일을 하기 위해서는 doGet, doPost메서드의 두번째 파라미터를 이용

서블릿 작성 순서

  1. 서블릿 클래스의 소스 코드를 작성한다.
  2. 작성한 소스 코드를 컴파일합니다.
  3. 컴파일 결과를 웹 서버의 디렉터리에 저장한다.
  4. 서블릿 클래스를 웹 서버에 등록한다. (web.xml에 등록해서 매핑해준다.)

뇌를 자극하는 JSP & servlet

서블릿은 서블릿 클래스로부터 만들어진 객체이다.

웹 컨테이너는 서블릿 클래스를 가지고 서블릿 객체를 만든 다음 그 객체를 초기화해서 웹 서비스를 할 수 있는 상태로 만드는데, 이 작업을 거친 서블릿 객체만 서블릿이라고 할 수 있다.

멀티 쓰레드 모델의 장점 : 필요한 서블릿의 수가 적기 때문에 서블릿을 만들기 위해 필요한 시스템 자원과 서블릿이 차지하는 메모리를 절약할 수 있다.

멀티 쓰레드 모델의 단점 : 여러 스레드가 동시에 한 서블릿을 사용하기 때문에 데이터 공유 문제에 신경을 써야 한다.

JSP에 대하여

JSP(Java Server Page)는 서블릿과 마찬가지로 자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다. JSP페이지는 서블릿 클래스와 반대로 HTML 문서 안에 JAVA 코드가 삽입되는 구조를 갖는다. <% %>나 <%= %>로 되어 있는 문법들을 말한다. <% %> 사이에는 자바 식을 사용할 수 있다.

 

JSP페이지에 있는 HTML 코드는 웹 브라우저로 그대로 전송되지만, JSP 문법의 코드는 웹 컨테이너쪽에서 실행되고 그 결과만 웹 브라우저로 전송된다.

JSP페이지는 서블릿 클래스와 달리 컴파일 과정이나 등록과정이 필요치 않으며, 텍스트 에디터로 소스 코드를 작성해 웹 서버에 속한 디렉터리에 저장해 놓기만 하면 된다.

웹 컨테이너는 JSP 페이지 전체를 서블릿 클래스의 소스 코드로 변환한 다음에, 그 소스 코드를 컴파일해서 그 결과를 가지고 서블릿 객체를 만들고 그 서블릿 객체를 초기화해서 서블릿을 만든다. 웹 브라우저로 부터 URL이 왔을 때 실행되는 것은 서블릿이다.

 JSP의 다양한 문법

  1. <% %> 형태, <%= %>, 스크립틀릿, 지시자
  2. ${ } 형태, (el태그, expression language, 익스프레션 언어)
  3. <jsp:forward>나 <C:if>와 같은 xml태그 형태, 액션 태그, jstl

JSP 페이지의 내장 변수

JSP 페이지의 내장 변수 : JSP 페이지 안에 선언을 하지 않고도 사용할 수 있는 변수

request 내장 변수 : 서블릿 클래스의 doGet, doPost 메서드의 첫 번째 파라미터와 동일한 역할을 한다.

out 내장 변수 : 서블릿 클래스에서 getWriter 메서드를 호출해서 얻은 PrintWriter객체와 마찬가지의 역할을 한다.

response 내장 변수 : doGet, doPost 메서드의 두 번째 파라미터와 동일한 역할을 한다. 

sendRedirect 메서드 호출할 때 주의할 점 :  이 메서드를 호출하기 전과 후에 웹 브라우저로 데이터를 출력하면 안됨.

파라미터로 지정한 URL을 직접 호출하는 것이 아니라 그 URL을 이용해서 다시 웹 자원을 호출하라는 메시지를 웹 브라우저로 보낼 뿐이다.

application 내장 변수

위 변수에 대해 호출할 수 있는 getContextPath 메서드는 웹 애플리케이션의 URL경로명을 리턴하는 메서드이다. getRealPath 메서드는 웹 애플리케이션 내에서 파일 경로명을 파일 시스템 전체에 대한 절대 경로명으로 바꾸는 메서드이다.

파일 입출력

파일로부터 데이터를 읽는 방법 java.io.FileReader 또는 java.io.FileInputStream 클래스를 이용

파일을 읽는 웹 애플리케이션의 구성도

JSP 페이지나 서블릿 클래스는 스탠드얼론 프로그램과 달리 웹 서버의 일부가 되어서 실행된다. 웹 브라우저에서 해당 파일의 URL을 통해 파일의 내용을 직접 읽을 수 없도록 만들려면 WEB-INF 디렉터리에 저장해야한다.

 

JSP페이지 안에서 파일을 읽기 위해서는 기본적으로 파일의 절대 경로를 사용하거나 톰캣의 설치 디렉터리로부터 상대 경로명을 사용해야한다. 하지만 더 좋은 방법은 getRealPath 메서드를 이용해서 웹 애플리케이션 내에서의 경로명을 절대 경로명으로 바꾸어 사용하는 방법이다.

forward 메서드의 사용방법

forward 메서드는 JSP 페이지 안에서 다른 JSP 페이지를 호출할 때 사용하는 메서드이다. 이 메서드는 javax.servlet.RequestDispatcher 인터페이스에 속하기 때문에 이 타입의 객체가 있어야 호출할 수 있다. forward 메서드를 호출할 때는 request 내장변수와 response 내장변수를 파라미터로 넘겨줘야한다.

include 메서드 사용방법

include 메서드도 forward 메서드처럼 다른 JSP 페이지를 호출하지만, 호출된 JSP 페이지가 끝나고 나면 실행 흐름의 제어가 본래의 JSP페이지로 돌아온다.

include 메서드는 forward 메서드와 마찬가지로 javax.servlet.RequestDispatcher 인터페이스에 속하므로 먼저 RequestDispatcher 객체를 구해야한다. 이 메서드를 호출할 땐 forward처럼 request, response를 파라미터로 넘겨줘야함

 

 

출처 : http://www.hanbit.co.kr/store/books/look.php?p_code=B5476653696

 

뇌를 자극하는 JSP & Servlet

흔히 마주치는 수많은 웹 페이지들은 어떻게 만들고 운영되고 있는 것일까? 이 책은 이 질문에 대한 해답과 함께 JSP, Servlet을 활용해 다양하고 실용적인 웹 페이지를 구성하는 방법을 알려준다. 기본적인 JSP와 Servlet의 기초 개념부터 쿠키와 세션, 각종 액션 등의 다양한 내용은 물론 시스템 설계와 좋은 UI 구성까지 모두 담아냈다. 또한 최신 버전과 서비스 경향을 반영한 생생한 예제를 하나하나 따라하며 실습해 볼 수 있도록 구성했다. 때문

www.hanbit.co.kr

 

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30