01 서블릿

● 동적 웹 서비스를 Java로 구현하기 위한 기술

● 클라이언트의 요청을 처리하여 응답하답 위해 웹 서버에서 실행되는 java클래스

● 서블릿과 서블릿 컨테이너

○ 서블릿 컨테이너를 통한 서블릿의 동작 진행

1)    웹 클라이언트에서 전송된 HTTP 요청을 웹 서버가 전달 받음

2)    웹 서버는 HTTP 요청 정보를 묶어 서블릿 컨테이너에 전달

3)    서블릿 컨테이너는 저장된 서블릿 객체들 중 해당 HTTP 요청을 처리할 수 있는 서블릿을 실행

4)    웹 서버에서는 서블릿 실행을 통해 만들어진 응답을 전달 받음

5)    웹 서버는 전달받은 응답을 웹 클라이언트에게 전송

 

○ 서블릿 컨테이너가 전달받은 요청 정보로부터 서블릿의 실행 및 결과를 웹 서버에 전달하기까지의 과정

1)    웹 서버의 요청(request) 정보를 통해 HttpServletRequest 클래스의 객체인 요청 객체와 HttpServletResponse 클래스의 객체인 응답 객체를 생성

2)    전달받은 요청을 처리할 수 있는 서블릿 클래스가 서블릿 컨테이너에 로딩되어 있는지 검사

• 로딩되어 있지 않을 경우 해당 서블릿 클래스를 로딩하여 객체를 생성

• 이미 로딩되어 있을 경우 해당 서블릿 클래스의 객체를 생성

3)    생성된 서블릿 객체를 호출하여 실행. 실행 시 doGet 혹은 doPost 메서드에 필요한 입력 파라미터는 ①, ② 과정에서 생성된 HttpServletRequest, HttpServletResponse 클래스의 객체를 이용

4)    서블릿 실행 결과를 웹 서버에서 전달

 

HttpServletRequest, HttpServletResponse 객체

HttpServletRequest 객체 : 요청 정보를 담기 위해 사용

HttpServletResponse 객체 : 요청에 대한 응답 정보를 지정하기 위해 사용

 

● 서블릿 클래스의 작성 방법

1.     HttpServlet 클래스 상속

public으로 선언되어야 하며 반드시 HttpServlet 클래스를 상속

HttpServlet 클래스

HTTP 프로토콜에 최적화된 서블릿 구현을 위한 클래스

GenericServlet 클래스를 상속 받는 추상 클래스

GenericServlet 클래스 : ServletConfigServlet, Serializable 인터페이스를 구현하는 클래스

 

2.     doGet/doPost메서드 구현

■ 웹 프로그래머가 직접 구현해야 하는 부분

service 메서드 내부에서 호출될 doGet 혹은 cioPost 메서드를 재정의(overriding)해야 하며 각 메서드는 다음과 같이 서블릿 컨테이너에 의해 가공된 HttpSerelRequest HttpServletResponse 타입의 입력 파라미터를 사용하여 요청 및 응답 정보를 활용

1)    get 방식 : 데이터의 정보를 웹 주소 URL에 포함하여 호출하는 방식

                      Address?param 1 =var1 &param2=var2 • • -paramN=varN

                      form 태그의 데이터 전송방식이 지정 없이 실행되었을 때 doGet 메서드가 호출

2)    post 방식 : 추가로 전송할 데이터를 HTTP 요청 메시지에 첨부하는 형태로 전송하는 방식

                      get 방식과는 달리 웹 주소 URL로는 어떠한 정보가 전달되는지 열람할 수 없음

 

● 서블릿 제작

1.     서블릿 생성

Dynamic Web Project# 생성한 후 'Java Resources' 폴더에 있는 'src' 폴더 안에 Servlet 생성

이클립스에서 생성한 서블릿 클래스 에러 -> 아파치 톰캣 디렉터리 내 lib에 있는 servlet-api.jar 라이브러리를 추가하면 해결

<form> 태그 : 사용자와 웹 서버 간 대화형 웹 서비스 구현 위해 HTML에서 제공되는 태그

사용자의 입력을 웹 서버로 전달하는 역할

<form action=”요청 처리할 웹 애플리케이션 혹은 웹 페이지(없으면 자기자신 호출)” method=”데이터 전송방식

사용자의 입력을 받기 위한 다양한 태그(복수 가능)

사용자가 입력한 데이터를 전송하기 위한 submit 기능을 위한 구문

</form>

■ 〈form〉태그의 action 속성에는 현재 데이터를 전달받을 웹 애플리케이션이나 웹 페이지를 값으로 설정하고 method 속성에는 데이터를 전달할 방식을 “get” 혹은 “post”로 설정할 수 있음

 

2.     서블릿의 한글 처리

■ 한글이 정상적으로 처리되기 위해서는 웹 클라이언트 측 웹 브라우저의 문자 처리 방식과 웹 서버의 문자 처리 방식을 동일하게 해주거나 적절한 문자 처리 방식으로 변환해주는 작업이 필요

1)    get 방식

□ 파라미터는 해당 요청 페이지에 설정된 문자셋으로 인코딩돠어 웹 서버로 전송

□ 요청 페이지에 설정되어 있는 문자셋과 웹 서버의 응답처리 페이지의 문자셋을 동일하게 처리해주어야 함

get 방식의 경우 파라미터의 값이 URL에 직접 명시되는데 아래와 같이 사용자가 직접 주소창에 전송될 파라미터를 입력하여 실행했을 경우 二라우저가 사용하는 문자셋을 사용하여 인코딩한 후 처리 됨

 

2)    post 방식

HttpServletRequest 클래스가 제공하는qetCharacterEncoding()을 이용

post 방식은 URL에 파라미터의 값이 각각 추가되어 오지 않고 HTTP 요청메시지에 첨부되는 형식으로 전달되므로 HttpServletRequest 클래스의 setCharacterEncoding() 메서드를 한 번만 사용해도 간단히 한글 처리가 가능

request.setCharacterEncoding (“utf-8")

response.setContentType("text/htmlcharset=UTF-8")

 

3)    server.xml을 통한 문자셋 설정

□ 아파치톰캣의 server.xml을 수정하면 이러한 변환 작업을 먼저 처리

server.xml 내부에서 〈Connector〉태그를 찾아 다음과 같이 URIEncoding="UTF 8”속성을 추가한 후 저장

server.xml 파일은 변경 이후 웹 서버 재 시작

 

'JSP > 이론' 카테고리의 다른 글

[JSP][이론]05 JSP 액션 태그  (0) 2020.09.07
[JSP][이론]04 JSP 세션 관리_HTTPSession  (0) 2020.09.05
[JSP][이론]04 JSP 세션 관리_쿠키  (0) 2020.09.05
[JSP][이론] 02 JSP 기초  (0) 2020.09.05
[JSP][이론] 들어가며  (0) 2020.09.04

+ Recent posts