본문 바로가기

자바

서블릿 기초

톰캣과 같은 WAS(웹 애플리케이션 서버)가 처음 나왔을 때 웹 브라우저 요청을 스레드 방식으로 처리하는 기술이 바로 서블릿이었습니다 지금부터 하는 내용은 모든 웹 프로그램에 뼈대로 하여 동작합니다 잘 이해해야 합니다

 

서블릿 기본 기능 수행 과정

다음은 서블릿이 수행하는 세 가지 주요 기능을 나타내었습니다 요약하면 클라이언트로부터 요청을 받아 비즈니스 로직을 처리하고 그 결과를 다시 클라이언트에 돌려주는 과정입니다

 

                     1 ->                    <-  2 - >

클라이언트                         서블릿                DB

                       <- 3

 

1. 클라이언트로부터 요청을 받습니다

2. 데이터베이스 연동과 같은 비즈니스 로직을 처리합니다

3. 처리된 결과를 클라이언트에게 돌려줍니다

 

초기 웹 프로그램 개발에서는 서블릿이 클라이언트로부터 요청을 받아 데이터베이서 연동 같은 비즈니스 작업을

처리한 후 그 결과를 클라이언트의 브라우저로 전송하는 방식으로 작업했습니다 클라이언트로부터 요청을 받는

작업에는 어떤 것들이 있을까요 우리가 자주 사용하는 포털사이트에서 로그인하려고 ID와 비밀번호를 텍스트 창에

입력한 후 로그인 버튼을 클릭하면 사용자가 입력한 ID와 비밀번호가 서버 쪽의 서블릿에 전송됩니다

서블릿에서는 여러 가지 메서드를 이용해 사용자가 전송한 ID와 비밀번호를 받아 옵니다

그다음 사용자의 로그인 요청에 대해 데이터베이스와 연동하여 사용자가 이미 등록된 회원인지 조회합니다

그 결과에 따라 다음 페이지로 가던지 ID나 비밀번호가 틀렸으니 다시 로그인하라는 오류 메시지를 클라이언트에 전송합니다

 

서블릿 응답과 요청 수행 API 기능

우선 요청이나 응답과 관련된 서블릿 기능을 알아봅시다 요청이나 응답과 관련된 API는 모두 javax.servlet.http패키지에 있습니다

 

- 요청과 관련된 API : javax.servlet.http.HttpServletRequest 클래스

- 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스

 

다시 그럼 서블릿이 수행하는 주용 기능을 다시 생각해봅시다 클라이언트가 서블릿에 요청을 하면 먼저 톰캣 컨테이너가 받습니다 그런 다음 사용자의 요청이나 응답에 대한 HttpServletRequest 객체와 HttpServletResponse 객체를 만들고 서블릿의 doGet()이나 doPost() 메서드를 호출하면서 이 객체들을 전달합니다

톰캣이 사용자의 요청에 대한 정보를 모든 HttpServletRequest 객체의 속성으로 담아 메서드로 전달하므로 각 HttpServletRequest에서 제공하는 메서드들은 매개변수로 넘어온 객체들을 이용하여 사용자가 전송한 데이터를 받아오거나 응답할 수 있는 것입니다

각 API에서 제공하는 중요한 메서드들을 정리해 두었습니다 이 메서드들을 이용해서 여러 가지 요청이나 응답과 관련된 작업을 합니다 이에 대해서는 다음에 자세히 알아볼 것이므로 이런 메서드들이 있구나 하는 정도로 넘어가겠습니다

변환형 메서드 이름 기능
boolean HttpServletResponse reponse 현재 요청한 사용자가 ServletConText객체에 대한 인증을 하기 위한 컨테이너 로그인 매커니즘을 사용합니다
string change SessinIO() 현재 요청과 연관된 세션의 id를 변경하여 새 세션 id를 반환합니다
string getContextPath 요청한 컨텍스트를 가리키는 URL을 변환합니다
Cookie getCookies() 클라이언트가 현재의 요청과 함께 보낸 쿠키 객체들에 대한 배열을 반환합니다
string getHeader 특정 요청에 대한 헤더 정보를 문자열로 반환합니다
string gerHeaderNames() 현재 요청에 포함된 헤더의 name속성을 enumeration으로 반환합니다
string getMethod() 현재 요청이 GET, POST또는 PUT방식중 어떤 HTTP요청인지를 반환합니다
string getRequestURI() 요청한 URL의 컨텍스트 이름과 파일 경로까지 반환합니다
string getServletPath() 요청한 URL에서 서블릿이나 JSP이름을 반환합니다
변환형 매서드 이름 기능
HttpSession getSession 현재의 요청과 연관된 세션을 반환합니다 만약 세션이 없으면 새로 만들어서 반환합니다
void addCookie 웅답에 쿠키를 추가합니다
void addHeader name과 value를 헤더에 추가합니다
String encodeURl 클라이언트가 쿠키를 지원하지 않을 때 세션 id를 포함한 특정 URl을 인코딩합니다
String getHeaderNames 현재 응답의 헤더에 포함된 name을 얻어옵니다
void sendRedirect 클라이언트에게 리다이렉트 응답을 보낸 후 특정 URL로 다시 요청하게 합니다

<form> 태그 이용해 서블릿에 요청하기

이번에는 <form> 태그를 이용해 브라우저에서 서블릿으로 사용자의 요청이나 데이터를 전송하는 방법과 서블릿이 데이터를 받아 오는 방법에 대해 알아보겠습니다

<form> 태그로 서블릿에 요청하는 과정

JSP, ASP, PHP가 나오기 전에는 HTML, CSS, 자바스크립트를 이용해 웹 프로그램을 만들었습니다 서블릿과 JSP는 이러한 HTML, CSS, 자바스크립트 같은 기존의 것을 버리는 것이 아니라 여기에 자신의 기능을 추가하여 즉 서로 연동하여 동작합니다 특히 사용자의 요청은 HTML의 <form> 태그나 자바스크립트로부터 전송받아서 처리합니다 

클라이언트 웹 브라우저에서 서블릿에 요청하는 방법은 다음과 같습니다

 

클라이언트     - >              서블릿

                                (톰캣 컨테이너)

웹 브라우저에서 여러 가지 입력 서식을 이용해 전송을 클릭하면 사용자가 입력한 데이터가 서블릿으로 전송됩니다

그러면 서블릿은 여러 가지 메서드를 이용해서 전송된 데이터를 받아 옵니다

 

<form> 태그의 여러 가지 속성

예를 들어 사용자의 ID와 비밀번호를 입력하는 로그인 창이 있다고 합니다

사용자가 자인의 ID와 비밀번호를 입력한 후 로그인을 클릭하면 <form> 태그의 action 속성은 데이터를 전송할 서블릿이나 JSP의 이름을 지정합니다 그러면 지정된 이름이 login인 서블릿으로 ID와 비밀번호가 전송됩니다

 

실제 데이터는 각 <input> 태그의 name 속성 값과 쌍으로 전송됩니다 그럼 서블릿에서는 name속성 값으로 같이 전송된 입력 데이터를 받아 옵니다 

그 외 <form> 태그의 여러 가지 속성과 기능들을 참고하세요

속성 기능
name

-<form> 태그의 이름을 지정합니다

-여러 개의 form이 존재할 경우 구분하는 역할을 합니다

-자바스크립트에서 <form> 태그에 접근할 때 자주 사용합니다

method

-<form> 태그 안에서 데이터를 전송할 때 전송 방법을 지정합니다

-GET 또는 POST로 지정합니다(아무것도 지정하지 않으면 GET입니다)

속성 기능
action

-<form> 태그에서 데이터를 전송할 서블릿이나 JSP를 지정합니다

-서블릿으로 전송할 때는 매핑 이름을 사용합니다

encType

-<form> 태그에서 전송할 데이터의 encoding 타입을 지정합니다

- 파일을 업로드할 때는 multipart/form-data로 지정합니다

 

서블릿에서 클라이언트의 요청을 얻는 방법 

HttpServletRequest 클래스에서 <form> 태그로 전송된 데이터를 받아오는 데 사용하는 메서드로는 다음과 같은 것들이 있습니다 이 중에서 가장 많이 사용되는 것이 getParameter() 메서드입니다 만약 같은 name으로 여러 개의 값이 전송되었을 때는 배열 형태로 값을 반환하는 getParameterValues 메서드를 사용합니다

메서드 기능
String getParameter

name의 값을 알고 있을 때 그리고 name에 대한 전송된 값을 받아오는 데 사용합니다

String getParameterValues 같은 name에 대해 여러 개의 값을 얻을 때 사용합니다
Enumeration getParameterNames() name 값을 모를 때 사용합니다

 

HttpServletRequest로 요청 처리 실습 

이번에는 실제 이클립스에서 <form> 태그로 전송된 정보를 서블릿에서 받아 와서 출력하는 과정을 실습해 보겠습니다 

로그인 창에서 ID와 비밀번호를 입력받아 HttpServletRequest로 처리하는 간단한 프로그램입니다

'자바' 카테고리의 다른 글

서블릿 이해하기  (0) 2020.01.31
웹 애플리케이션  (0) 2020.01.28
웹 프로그래밍의 기본  (0) 2020.01.28
자료형(Data Type)  (0) 2019.08.13
변수  (0) 2019.08.12