본문 바로가기

IT&코딩/JSP

JSP - 5일차 (서블릿)

728x90
반응형

■ 서블릿(Servlet)

 

서블릿은 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다. servlet은 java 코드 안에 HTML태그가 삽입되며 자바언어로 되어있다. (.java가 확장자이다.)

 

자바언어를 웹어플리케이션에 조금 더 개발하기 쉽게 하기 위해 만든 API(라이브러리, 클래스 등)이며 이 규약에 맞는 라이브러리나 클래스들을 상속 및 구현하여 만든 클래스들을 서블릿이라고 한다.

 

서블릿(servlet)은 클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 구현 규칙을 짘킨 자바프로그램(클래스)이다.

 

□ 특징

 

* 여기서 Thread는 실행흐름을 의미한다. (자바는 여러가지 실행흐름을 병렬로 나열, 진행)

 

□ 작동순서

 

클라이언트에서 servlet 요청이 들어오면 서버에서는 servlet 컨테이너를 만들고, 서블릿 HttpServletRequest, HttpServletResponse 객체를 생성한다. 서블릿 컨테이너는 Http request를 분석하여 어떤 서블릿에 대한 요청인지를 찾아 해당하는 서블릿 클래스가 메모리에 존재하지 않는다면 서블릿 객체를 하나 생성하고 스레드에게 해당 작업을 위임한다.

 

요청이 있을 때마다 스레드가 생성된다.

 

해당 서블렛에서 service 메소드를 호출한 후 Post, Get 요청 여부에 따라 doGet() 또는 doPost 메소드를 호출한다. doGet()또는 doPost()는 동적페이지를 생성한 후 HttpServletResponse 객체에 응답을 낸다.

 

응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

 

클라이언트에서 servlet요청이 들어오면 서버에서는 servlet컨테이너를 만들고, 서블릿 HttpServletRequest, HttpServletResponse 객체를 생성한다. HttpServletResponse 객체를 생성한다.

 

java는 멀티스레드를 지원하기 때문에 CGI(Common Gateway Inferface) 언어에 비해 서버부하가 적다

 

CGI란 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다. 즉 사용자의 요청에 의한 서버의 응답을 수행하기 위해 서버가 외부 프로그램과 정보를 주고 받기 위한 규약들을 말한다.

 

 

□ Context Path

 

WAS(Web Application Server)에서 웹 어플리케이션을 구분하기 위한 path이다.

이클립스에서 프로젝트를 생성하면, 자동으로 server.xml에 추가된다.

 

url의 호스트, 포트명 다음에 나온다.

 

Context Root : 서버가 하나의 웹 어플리케이션을 구분하기 위한 Path


src/main/java : 자바 소스 파일 저장
클래스 파일은 무조건 패키지 안에 저장해야 함

 

□ Servlet Mapping

 

Servlet Mapping이란 특정 servlet을 요청할 때, 전체 경로를 URL에 써주면, 너무 복잡하고 보안에도 취약하기 때문에, 간단하게 경로를 표현해주는 것이다.

 

web.xml을 이용하는 방식과 어노테이션을 이용하는 방식이 있다.

 

□ Servlet 클래스

 

 

□ request & response

 

클라이언트로부터 요청이 들어오면 WAS는 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장한다. 또한 웹 브라우저에게 응답을 보낼 때 사용하기 위해 HttpServletResponse 객체를 생성하고, 생성된 두 객체를 서블릿에 전달한다.

 

 

 

□ Servlet 클래스 활용

 

 

□ HTTP 패킷

 

클라이언트가 서버로 요청을 했을 때, 보내는 데이터를 HTTP 패킷이라 표현한다.

HTTP 패킷의 구조는 크게 헤더와 바디로 나뉘어진다.

 

헤더에는 HTTP 메서드 방식중 무엇을 썼는지, 클라이언트의 정보, 브라우저 정보, 접속할 URL 등과 같은 클라이언트 정보를 담는다.

 

바디는 보통 비어있다. 하지만 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다. 이러한 웹 개념아래, GET 메소드와 POST 메소드를 통해서 요청을 할 수 있다.

 

□ GET & POST 방식

 

- GET 방식 : HTTP 패킷의 헤더(Header)에 포함되어 서버에 요청한다.

 

URL 뒤에 ?를 사용하여 Parameter를 작성하게 되고 &을 붙여 여러 개의 Parameter를 구분하게 된다.

URL값으로 정보가 전송되어 보안에 약하다.

 

- POST 방식 : BODY에다가 데이터를 넣어서 보낸다

 

데이터 전송량에 길이 제한은 없으며 대용량 데이터를 보내는 데 적합하다. URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.

 

HTML 내 form 캐그의 method 속성에 따라 get이나 post 방식으로 요청할 수 있다.

 

 

□ 한글처리

 

Tomcat 서버의 기본 문자 처리방식은 IOS-8859-1 방식이다. 따라서 개발자가 별도의 한글 인코딩을 하지 않으면 한글이 깨져 보이는 현상이 있다. GET 방식과  POST 방식에 따라서 한글처리 방식에 차이가 있다.

 

 

□ Servlet 생명주기

 

Servlet은 최초 요청시 객체가 만들어져 메모리에 로딩되고, 이후 요청시에는 기존의 객체를 재활용 하기 때문에 동작속도가 빠르다.

 

 

□ Servlet 선처리, 후처리

 

 

□ Servlet Parameter

 

form 태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면 해당 Servlet에서는 HttpServletRequest 객체를 이용해서 Parameter 값을 얻을 수 있다.

 

□ 초기화 파라미터 : ServletConfig

 

특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있다. (아이디, 특정 정보 등)

이러한 데이터들을 초기화 파라미터라고 하며, web.xml에 기술하고 Servlet 파일에서는 ServletConfig 클래스를 이용해서 접근한다. 다른 방법으로 초기화 파라미터를 web.xml이 아닌 Servlet 파일에 직접 기술하는 방법도 있다.

 

□ 데이터 공유 : ServletContext

 

여러 Servlet에서 특정 데이터를 공유해야 할 경우 context parameter를 이용해서 web.xml에 데이터를 기술하고, Servlet에서 공유하면서 사용할 수 있다.

 

 


 

□ 예제 1

 

 

<web.xml 파일 내부>

 


 

□ 예제 2 (doGet, doPost 방식)

 

<getPost.html>

 

<Servlet02.java>

 

<웹브라우저>

 

<콘솔창>

 

 


 

□ 예제 3

 

<formEx01.html>

 

 

<Servlet03.java>

 

<웹브라우저>

 


 

□ 예제 4

 

<formEx02.html>

 

 

<Servlet04.java>

 

 

<웹브라우저>

 


 

□ 예제 5

 

<formEx03.html>

 

 

<Servlet05.java>

 

 

<웹브라우저>

 

<콘솔창>

 


 

ㅁ 예제 6

 

<Servlet06.java>

 

 

<web.xml>

 

 

<Servlet.java 실행시 웹브라우저>

 

 

<콘솔창>

 


 

□ 예제 7

 

<Servlet07.java>

 

 

<web.xml>

 

 

<웹브라우저>

 

 

<콘솔창>

 


 

□ 예제 8

 

<ServletLifeCycle.java>

 

 

<서버가 시작될 때>

 

 

<서버 종료시>

 


 

□ 예제 9

 

<testForm.html>

 

 

<Test01.java>

 

 

<웹브라우저>

 

 

728x90
반응형

'IT&코딩 > JSP' 카테고리의 다른 글

JSP - 7일차 (데이터베이스)  (0) 2022.11.25
JSP - 6일차 (Java Server Page)  (0) 2022.11.20
JSP - 4일차 (자바스크립트)  (0) 2022.11.13
JSP - 3일차 (CSS)  (0) 2022.11.13
JSP - 2일차 (HTML)  (0) 2022.11.11