JSP 1일차
서블릿 프로그래밍
자바와 웹
장점
- 객체 지향 프로그래밍
- 플랫폼에 독립적
- 뛰어난 재사용성
- 방대한 API
- 보안 우수
웹서버 애플리케이션 개발
- 서블릿, JSP
자바 개발 플랫폼
- Java SE : 데스크톱, 서버, 임베디드 시스템 개발을 위한 표준 자바 플랫폼. JDK, JRE 두 가지로 나누어서 제공
- Java EE : 자바의 기본적인 기능 정의한 SE에 웹서버 역할 추가한 것. 자바 애플리케이션을 동작하게 하는 컨테이너 등을 표준화한 스펙
- Java ME : 모바일 장치나 내장형 장치(휴대전화, 셋톱 박스 PDA) 같은 소형장치에서 실행되는 자바 애플리케이션을 지원하기 위해 경량화된 기술 지원.(자바 VM 경량화한 KVM, CardVM)
웹에서의 자바 기술
- 웹에서 실행되는 애플리케이션 기술
- 애플릿
- 서버에서 클라이언트 쪽으로 실행 파일을 내려받아서 실행되는 방식
- 현재는 HTML5, CSS, jQuery 등의 기술들이 대체
- 서블릿
- 자바 언어로 구현되는 서버 프로그램
- 클라이언트가 웹 브라우저를 통해 요청하면 서버에서 실행한 후 결과값만 클라이언트로 전송
- HTTP 프로토콜로 통신하는 웹의 특징과 속성들을 자유롭게 활용할 수 있는 API 제공
- 컨트롤러 페이지 만들 때 사용
- 기존 CGI(Common Gateway Interface)가 가지던 성능적 약점, 메모리 문제, 단일 인스턴스로 인한 병목현상 등을 해결
- JSP
- 서블릿과 똑같은 기능
- HTML 페이지 안에서 스크립트 형태로 구현
- 간단한 코드로 구현
- 뷰 페이지 만들 때 사용
웹 프로그래밍
웹문서
- 클라이언트가 서버에 정보를 요청하면 응답하는 콘텐츠
- 정적 웹 문서 : 클라이언트가 웹 문서를 요청하면 웹서버는 이미 만들어져 있는 문서를 클라이언트에 제공 - HTML, GIF, JPG, PDF, PPT 등
- 동적 웹 문서 : 요청 시마다 다른 문서의 내용을 클라이언트로 전달하는 것 - CGI, ASP, PHP, 서블릿, JSP
- 웹 문서에 동적인 요소를 포함(스크립트 방식) - JSP
- 서버가 다른 애플리케이션을 통해 웹 문서를 재생성하여 제공하는 방식 - 서블릿
- 웹 애플리케이션
- 클라이언트 사이드 : 클라이언트에서 요청한 웹 애플리케이션이 클라이언트에 전송된 다음에 클라이언트 자원을 이용하고 클라이언트에 의해 수행
- 서버 시아드 : 웹 애플리케이션이 서버에서 일차 수행되면서 서버의 자원을 활용하고 그 결과를 클라이언트에 전송
- 웹 서비스
- 네트워크 상에 분산된 자원들을 이기종 간에 서로 연동하여 자원을 공유하기 위한 추상적 서비스 형태
- SOAP 기반 : SOA 개념을 실현하기 위한 대표적 기술. UDDI라는 전역 서비스 저장소에서 서비스 요청자가 검색 후 HTTP의 응용 프로토콜인 SOAP를 이용하여 메세지 주고받는 방식
- RESTful 기반 웹 서비스 : SOAP의 문제점을 보완할 수 있는 REST 기반 웹 서비스. HTTP의 기본 기능만으로 원격 정보에 접근
- 네트워크 상에 분산된 자원들을 이기종 간에 서로 연동하여 자원을 공유하기 위한 추상적 서비스 형태
웹 서버와 웹 애플리케이션 서버
웹 서버
- 웹에서 서버 기능을 수행하는 프로그램. HTTP 프로토콜 기반으로 웹 클라이언트로부터의 요청을 서비스하는 기능 담당
- 클라이언트가 요청한 웹 문서 찾아서 전달
- 요청 파일이 없거나 문제가 발생하면 정해진 코드 값으로 응답
- 클라이언트로부터의 요청에 대한 기본 사용자 인증 처리
- 서버 프로그램에 대한 요청 웹 애플리케이션 서버에 수행시키고 그 결과 응답
웹 애플리케이션 서버
- 여러 웹 클라이언트로부터의 요구를 웹 서버 단독으로 처리하면 처리량이 많아지고 성능에 문제
- 웹 서버의 기능을 분리해서 처리하려는 목적으로 사용
- 웹서버 기능 - 웹로직, 웹스피어, 제우스, 제이보스, 톰캣
컨테이너
- 웹 컴포넌트(서블릿, jsp)를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기 관리 / JSP를 서블릿으로 변환하는 기능
- 서블릿 컨테이너
- 클라이언트의 요청에 따라 서블릿을 수행하는 프로그램
- JSP 컨테이너
- JSP를 서블릿으로 변환하는 프로그램
HTTP 프로토콜
- 서버와 클라이언트 간의 통신 방식
HTTP
- TCP/IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜
- 웹 브라우저와 웹서버가 통신할 때 서로 약속도니 요청, 응답 메세지를 주고받으면서 통신
- 신뢰성 있는 통신과 처리 효율이 높은 프로토콜
- 무연결성 : 클라이언트와 서버 간에 요청이 있을 때마다 독립적으로 연결하여 통신 ⇒ 요청 단위로 새로운 연결 처리
- 무상태성 : 이전 연결에서 했던 작업 내용을 다음 요청에서 사용할 수 없음
- 요청, 응답 : 요청 정보와 응답 정보를 주고받으면서 통신
HTTP 요청정보
- 웹 클라이언트가 웹서버에 서비스를 요청하면 HTTP에 의하여 자동으로 만들어져 서비스 요청받는 웹서버에 전달
-
요청정보 구조
요청 줄 요청방식 URI HTTP 버전 헤더 name : content 몸체 - 요청방식
- GET, POST, PUT, DELETE, HEAD, OPTIONS, HEAD, TRACE, CONNECT
- 요청 URI
- 웹 클라이언트가 웹서버에 요청한 서비스 문서의 정보
-
프로토콜 서버주소 포트번호 서버자원정보
⇒ http://www.mysite.com:80/edu/index.html
- 헤더
- Accept, Accept-Encoding, Accept-Language, User-Agent, Cache-Control
HTTP 응답정보
- 상태코드
- 200, 400, 401, 403, 404, 405, 500
- 헤더
- 클라이언트 서비스 요청에 대한 실행 결과를 웹 클라이언트가 올바르게 처리할 수 있게 하기 위한 정보
서블릿 구현 및 실행
웹 애플리케이션
- 서블릿을 만드는 목적 : 클라이언트에 서비스 하기 위해
- 구조 : 디렉터리, 디렉터리가 압축된 형태로 웹서버에 올려서 서비스
- web.xml : 웹 애플리케이션의 서비스 처리에 관한 내용 정의
서블릿 구현
- javax.servlet.http 반드시 상속
- 서블릿 인터페이스 : 서블릿 프로그램을 개발할 때 반드시 구현해야 하는 메소드를 선언하고 있는 인터페이스
- init(), service(), destroy(), getServletConfig(), getServletInfo()
- GenericServlet 클래스
- sevlet 인터페이스를 상속하여 클라이언트-서버 환경에서 서버단의 어플리케이션으로서 필요한 기능을 구현한 추상 클래스
- HttpServlet 클래스
- GenericServlet 클래스 상속해서 service() 메소드를 재정의함으로써 HTTP 프로토콜에 알맞은 동작을 수행하도록 구현해야 하는 클래스
실행 순서
- IoC : 개발자가 아닌 제 3자가 프로그림의 실행 흐름을 제어하는 것(제어의 역전)
- 클라이언트로 처리 요청 받음 → 최초의 요청 여부 판단 → 서블릿 객체 생성 → init() 메소드 실행 → service() 메소드 실행
콜백 메소드와 서블릿 객체의 생명주기
- 콜백 메소드 : 어떤 객체에서 어떤 상황이 발생하면 컨테이너가 자동으로 호출하여 실행되는 메소드
- init(), service, destroy()
- 서블릿 객체가 메모리에 생성되는 시점 ⇒ 서버 입장에서 클라이언트로부터 최초로 서블릿 실행 요청이 있을 때
- 서블릿이 생성된 뒤 같은 요청이 있으면 최초 요청시 생성한 서블릿 객체 service() 메소드 사용
- 서블릿 객체 삭제 ⇒ 서버를 중지시켜 웹 애플리케이션 서비스를 중지할 때
- destroy() : 자원을 해제하는 내용 구현
서블릿 실행
- 클라이언트가 서블릿에 접근하는 방법
- web.xml에
<servlet>
과<servlet-mapping>
태그로 경로 설정 - @WebServlet 어노테이션 설정
- web.xml에