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 클래스 : ServletConfig와 Servlet, Serializable 인터페이스를 구현하는 클래스
2. doGet/doPost메서드 구현
■ 웹 프로그래머가 직접 구현해야 하는 부분
■ service 메서드 내부에서 호출될 doGet 혹은 cioPost 메서드를 재정의(overriding)해야 하며 각 메서드는 다음과 같이 서블릿 컨테이너에 의해 가공된 HttpSer이elRequest와 HttpServletResponse 타입의 입력 파라미터를 사용하여 요청 및 응답 정보를 활용
1) get 방식 : 데이터의 정보를 웹 주소 URL에 포함하여 호출하는 방식
Address?param 1 =var1 ¶m2=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/html;charset=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 |