article thumbnail image
Published 2023. 1. 2. 20:20

서블릿 (Servlet) 이란 동적 웹페이지를 만들때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술 
서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 

>> 사용자의 요청을 받아 처리하고 그에 해당하는 응답페이지를 만들어 다시 사용자에게 전송하는 Controller역할 

 

서블릿 동작 구조

 

* 서블릿 컨테이너 

 웹 서버 또는 응용 프로그램 서버의 일부로, 웹서버에서 온 요청을 받아 서블릿 class를 관리하는 역할
컨테이너의 서블릿에 대한 설정은 Deployment Descriptor(Web.xml)파일 이용

 

web.xml파일 : 해당 웹 애플리케이션을 구동시키는 서버 Start시 제일 먼저 읽혀지는 파일
                      배포서술자( Deployment Descriptor ,DD)의 역할로 해당 웹애플리케이션의 기본적인 설정정보 작성

- welcome-file : url로 해당 애플리케이션의 루트로 요청시 제일 먼저 보여지게 되는 메인 페이지를 지정해놓은 것
                          http:// 구동중인 서버의ip주소:포트번호 / 애플리케이션의 루트명 
                       ** 단, welcome-file은 src/main/webapp/ 안에 위치해있어야됨 

*사용자 데이터 전송방식

get 방식   

         특징1) GET방식 요청시 URL의 header영역에 데이터들을 포함시켜 요청 

          -> 사용자가 입력한값(데이터)들이 url에 노출됨
          -> 보안유지 불가능 
          -> 즉, 로그인이나 회원가입 같은 경우 GET방식에 부적합함 

         특징2) header 영역은 전송하는 길이에 제한이 있음

          -> 방대한 데이터를 담았을 경우 초과된 데이터는 절단되서 넘어감
          -> 즉, 게시판 작성과 같은 경우 GET방식에 부적합

         특징3) 장점 : url에 데이터가 노출되어 있기 때문에 북마크 (즐겨찾기) 가능

          -> 즉, 검색기능 같은 경우 GET방식에 적합 

post방식 

      특징 1) POST방식으로 요청시 URL의 Body 영역에 데이터를 포함시켜서 넘김

         -> 사용자가 입력한 값(데이터)들이 url에 노출되지 않음 
         -> 보안유지가 가능 
         -> 즉, 로그인이나 회원가입 같은 경우 post방식에 적합

      특징 2) Body 영역은 전송하는 길이에 제한 없음 

        -> 방대한 데이터 넘길 수 있음
        -> 즉 , 게시판 작성 같은 경우 POST 방식에 적합

      특징 3) 즐겨찾기(북마크)는 가능하나 데이터가 url에 노출되어 있지 않음 

         -> 기존에 봤던 응답화면 볼 수 없음 
         -> 즉, 검색기능 같은 경우 POST방식 부적합

     특징 4) GET방식에 비해 상대적으로 처리 속도 느림 ( 페이지요청, 기다리는 시간 있을 수 있음)
                 Timeout(최대요청받는시간) 존재 


Get방식으로 요청시  servlet파일의 doGet메소드가 자동으로 호출됨 

HttpServlet Request  : Http Servlet을 위한 요청정보(request information)제공 
                                  요청 전송방식, 요청자의 ip주소, 요청시 전달된 값 등

1) 요청처리를 위해 전달된 값 뽑기 
request의 parameter 영역 안에 존재 ( 키=밸류세트로 담겨있음)

request의 parameter영역으로 부터 전달된 데이터 뽑는 메소드 
> request.getParameter("키") : String (반환값) - 그에 해당하는 value값 
> request.getParameterValues("키") : String [] (그에 해당하는 value 값들이 배열에 담겨서 반환)

 

2) 요청처리 (db와 상호작용)

HttpServlerResponse :  요청에 대한 처리 결과 작성하기위해 사용하는 객체

3) Java코드 내에서  html구문 작성

-> 자바코드 내에서 작성하기 때문에 반복문, 조건문 등 유용한 메소드를 활용 가능 
-> 그러나 복잡하고 html을 수정하면 java코드를 수정해야하기 때문에 서버 재실행 해야됨

response 객체를 이용해서 사용자에게 html전송

response.setContentType("text/html' charset=UTF-8");
 -> 출력한 내용은 문서형태의 html이고 문자셋은 utf-8임을 선언

getWriter() : 문자를 페이지에 전송하기 위한 Stream을 가져오는 메소드( 요청했던 사용자와의 스트림 생성)
PrintWriter out = response.getWriter();

out.println() : 생성한 스트림을 통해 html구문 한줄씩 작성 

 


Post방식으로 요청시 doPost메소드에 자동으로  doGet메소드를 호출하게 되어있으므로 doGet메소드에 작성 

1) 요청시 전달값 뽑기 전 인코딩 설정

 request.setCharacterEncoding("UTF-8");

 request.getParameter("키")
 request.getParameterValues("키) 로 데이터 값 뽑기 

 

2) 요청처리 (db와 상호작용)

3) 성공 /실패 판단후 응답페이지 

 - 순수 Servlet방식 : java코드 내에서 html기술
- JSP(Java Server Page)방식 : html내에서 java코드 기술 

응답페이지 만드는 과정을 JSP에 위임
위임시 필요한 객체 == RequestDispatcher

-> Servlet상에 존재하는 데이터가 jsp화면에서 필요한 경우
 그 데이터를 어딘가에 담아서 jsp로 전달해야됨

-> 그응답할 데이터를 담기위한 공간 ==  request의  attribute영역 (키=밸류세트로 담아야됨)

request.setAttribute("키",밸류)

응답하고자 하는 뷰 (jsp) 선택하면서 RequestDispatcher생성=> 포워딩

 RequestDispatcher view = request.getRequestDispatcher("view/responsePage.jsp");
 view.forward(request,response);

 

jsp 페이지 -> <% %> 스트립틀릿(scriptlet) html문서 내에서 자바코드를 쓸 수 있는 영역

스크립틀릿 영역 안에 request.getAttribute("키") 로 담아놓은 데이터를 뽑음 
=> 반환형이 object이므로 강제 형변환 필요

String name = (String)request.getAttribute("name");

 

 

복사했습니다!