서블릿 이해하기 JSP 기반의 서블릿과 서블릿 소스 코드를 이해한다. 간단한 서블릿 프로그램을 제작할 수 있다. 한빛미디어(주)
서블릿 개요 Section 01 서블릿 개요 자바 플랫폼에서 컴포넌트 기반의 웹애플리케이션 개발기술 JSP는 서블릿 기술에 기반함. JSP의 프리젠테이션 문제를 해결하기 위해 JSP가 등장 이로 인해 웹 애플리케이션의 유지보수 어려움 심각. JSP 모델2 가 주목받으며 다시 서블릿에 대한 중요성 부각.
서블릿 개요 Section 01 서블릿 변천 프로그램에서 HTML 핸들링 컨텐츠와 비즈니스 로직이 분리되지 않음 ① 서블릿 문제점 대두 ② JSP 등장 ③ JSP 스크립트 기술의 한계 ④ MVC 패턴 주목받기 시작 프로그램에서 HTML 핸들링 컨텐츠와 비즈니스 로직이 분리되지 않음 개발과 관리의 어려움 HTML에서 프로그램 핸들링이 가능 JSP 스크립팅 기술 HTML에서 프로그램 핸들링 컨텐츠 관리는 쉬워졌지만 프로그램 관리는 이전보다 더 복잡해짐 애플리케이션 구성 요소 단위로 역할 분담 모델: 자바 클래스(DAO, DO) 뷰: JSP, JSTL 컨트롤러: 서블릿
서블릿 개요 Section 01 서블릿 컨테이너 자바가상머신을 내장한 서블릿 운영환경. JSP는 서블릿으로 변환되어 실행 따라서 대부분 별도의 실행환경 없이 서블릿 컨테이너에 통합됨. 자체 웹 서버 기능도 있으나 웹 서버와 분리하기도 함. 대표적으로 apache tomcat이 있음.
서블릿 개요 Section 01 서블릿 컨테이너 서블릿 동작 원리
서블릿 개요 Section 01 서블릿 장점 쓰레드를 기반으로 하므로 웹 애플리케이션 운영에 효율적이다. 자바를 기반으로 하므로 자바 API를 모두 사용할 수 있다. 운영체제나 하드웨어에 영향을 받지 않는다. 한 번 개발된 애플리케이션은 다양한 서버 환경에서도 실행이 가능하다. 웹 애플리케이션에서 효율적인 자료 공유 방법을 제공한다.
서블릿 개요 Section 01 웹 애플리케이션 개발 시 서블릿 이점 컨텐츠와 비즈니스 로직을 분리할 수 있다. 컨트롤러와 뷰의 역할 분담 웹 디자이너와 개발자간의 원활한 공동작업이 가능해진다. 유지보수가 수월하다. 기능의 확장이 용이하다. 프로그래머가 HTML, 자바스크립트 스타일시트 등 복잡한 기술을 모두 알아야 할 필요가 없다.
서블릿 구조와 생명주기 Section 02 서블릿 구조 서블릿 API 서블릿은 자바 클래스로 제작됨. javax.servlet.GenericServlet과 javax.servlet.http.HttpServlet API 구조에 대한 이해 필요
서블릿 구조와 생명주기 Section 02 서블릿 구조 서블릿 API 구조
서블릿 구조와 생명주기 Section 02 서블릿 구조 HttpServlet 구조 일반적으로 서블릿은 javax.servlet.http.HttpServlet 을 상속 service() 메서드는 컨테이너에서 호출 doGet(), doPost() 메서드를 오버라이드해서 처리에 필요한 기능을 구현 클라이언트 doGet( ) javax.servlet.GenericServlet javax.servlet.http.HttpServlet MyServlet extends HttpServlet service( ) 요청(request) 응답(response) doPost( )
서블릿 구조와 생명주기 Section 02 서블릿 구조 GET 방식과 POST방식 GET 방식 POST 방식 서버에 있는 정보를 가져오기 위해 설계됨. 240바이트까지 전달할 수 있음. QUERY_STRING 환경변수를 통해 전달. 형식 : http://xxx.xxx.co.kr/servlet/login?id=hj&name=hong URL노출로 보안성이 요구되는경우엔 사용할 수 없음. 검색엔진에서 검색단어 전송에 많이 이용함. POST 방식 서버로 정보를 올리기 위해 설계됨. 데이터크기의 제한은 없다. URL에 파러미터가 표시되지 않는다.
서블릿 구조와 생명주기 Section 02 서블릿 구조 서블릿 로딩 init() 메서드 요청 처리 service() 메서드 service() 메서드가 컨테이너에 의해 호출되며 사용자 처리 수행 doGet(), doPost() 메서드 서블릿 종료 destroy() 메서드
서블릿 구조와 생명주기 Section 02 서블릿 구조 서블릿 생명 주기 초기화 이벤트 요 청 종 료 응 답 쓰레드를 통한 요 청 종 료 응 답 쓰레드를 통한 동시 실행 최초 요청/ 컨테이너 시작 모든 요청과 응답 실행 시기 기 능 init() service() destroy() doGet()와 doPost()로 분기 실행 메서드 컨테이너 종료/ 애플리케이션 종료
서블릿 프로그래밍 교재 : 105 ~ 115 페이지 예제 개요 HelloWorld 메시지를 출력하는 간단한 서블릿 프로그램 작성 이클립스에서 서블릿 개발 과정 및 설정 과정 이해
HttpServlet 클래스 이용하기 Section 04 HttpServletRequest 클래스 HttpServlet 클래스의 doGet(), goPost() 메서드 호출시 파라미터로 전달됨. 사용자요청과 관련된 정보를 제공. HTML 폼 입력값을 가져온다. 쿠키, 세션정보에 접근할 수 있다. 클라이언트 IP주소를 알수 있다.
HttpServlet 클래스 이용하기 Section 04 HttpServletRequest 클래스 HttpServletRequest 클래스 주요 메서드 현재 jsp 로 전달되는 내용을 지정한 캐릭터셋으로 변환 html form에서 한글 입력 시 정상적으로 처리하려면 반드시 필요 setCharacterEncoding( ) 현재 서버의 프로토콜을 문자열 형태로 알려줌 getProtocol( ) 클라이언트의 IP 주소를 알려줌 getRemoteAddr( ) 현재 세션 객체를 가져옴. getSession( ) 현재 요청이 GET, POST인지 가져 옴 getMethod( ) 모든 쿠키값을 javax.servlet.http.Cookie의 배열형태로 가져옴 getCookies( ) 문자열 name과 같은 이름을 가진 파라미터의 값을 배열 형태로 가져옴. checkbox, multiple list 등에 주로 사용 getParameterValues(name) 문자열name과 같은 이름을 가진 파라미터의 값을 가져옴 getParameter(name) 현재 요청에 포함된 파라미터 이름을 Enumeration 형태로 전달 getParameterNames( ) 설 명 메서드
HttpServlet 클래스 이용하기 Section 04 HttpServletRequest 클래스 HttpServlet 클래스의 doGet(), goPost() 메서드 호출 시 파라미터로 전달 사용자 응답을 처리하기 위한 클래스 MIME Type 설정 HTTP 헤더 정보 설정 페이지 전환
HttpServlet 클래스 이용하기 Section 04 HttpServletResponse 클래스 HttpServletResponse 클래스 주요 메서드 클라이언트 요청을 다른 페이지로 보냄 sendRedirect(url) 에러 코드를 세팅하고 메시지를 보냄 sendError(status,msg) 문자열 name의 이름으로 date에 설정된 밀리세컨드 시간값을 헤더에 설정 setDateHeader(name, date) 문자열name의 이름으로 문자열 value 값을 헤더로 세팅 setHeader(name,value) 문자열 형태의 type 에 지정된 MIME Type 으로 ContentType 을 설정 setContentType(type) 설 명 메서드
계산기 서블릿 구현 교재 : 118 ~ 127 페이지 예제 개요 3장에서 만들어본 계산기를 서블릿 버전으로 개발 계산기능을 별도의 클래스로 분리하고 서블릿과 연동하는 구조 이해 [예제 4-2] ~ [예제 4-5]
JSP와 서블릿 관계 Section 05 JSP 서블릿 컴파일 과정 JSP 파일의 서블릿 변환 과정
JSP와 서블릿 관계 Section 05 JSP 서블릿 컴파일 과정 서블릿 코드로 생성된 JSP 이클립스 workspace 폴더에 생성된 파일 확인
JSP와 서블릿 관계 Section 05 변환된 소스 클래스 관계 서블릿 코드로 생성된 JSP package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; public class HelloWorld_jsp extends HttpJspBase { }
JSP와 서블릿 관계 Section 05 변환된 소스 클래스 관계 JSP 소스가 변환된 부분 _jspService() 메서드에 JSP 소스 코드가 변환되어 위치함 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { … … … out.write("\r\n\r\n"); out.write("<HTML>\r\n"); out.write("<HEAD>"); out.write("<TITLE>Hello World"); out.write("</TITLE>"); out.write("</HEAD>\r\n\r\n"); out.write("<BODY>"); out.write("<H2>Hello World : 헬로월드"); out.write("</H2>\r\n오늘의 날짜와 시간은 : "); out.print( new java.util.Date() ); … 이하중략 }