[Servlet & JSP] Servelt

🍋 Servlet

서블릿(servlet)은 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet클래스의 구현 규칙을 시킨 자바 웹 프로그래밍 기술이다.

다른 말로는, 서버에서 웹페이지를 동적(혹은 정적까지도)으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이라고 할 수 있다. 따라서 확장자는 .java이며, 해당 코드 안에 HTML태그가 삽입된다.

🟡 servlet의 특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용하여 요청에 응답
  • Java Thread를 이용하여 동작
  • MVC 패턴에서 Controller로 이용됨
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음
  • UDP보다 처리 속도가 느림
  • HTML 변경 시 servlet을 재컴파일해야함

🟡 개발 시 알아 두어야 할 사항

  1. 브라우저 언어와 servlet, 또는 JSP만 직접 소통

    html / css / java script 는 절대 일반 순수 자바 클래스와 소통이 불가하다.

    즉, 웹 요청/응답 처리 시 servlet이나 JSP로 개발해야 한다.

  2. 이클립스에서의 웹 개발 구조

    • src
      1. *.java 개발
      2. 순수 DAO와 DTO 혹은 일반 모든 자바 소스 개발
      3. web상에서 http기반으로 요청/응답을 직접 처리하는 servlet
    • WebContent
      1. .html / .css / .js / .jsp / 이미지, 동영상

🟡 servlet API

  1. HttpServlet

    • http 프로토콜을 사용할 수 있도록 구현된 클래스
    • 이를 상속받은 servlet은 재정의로만 쉽게 개발 가능
  2. HttpServletRequest

    • http 프로토콜 기반으로 요청하는 client의 정보를 보유

      → 접속한 client의 ip, 브라우저 기본정보, client가 server에 전송하는 입력 데이터 등..

    • doGet() or doPost() 메소드 실행 시 parameter로 쓰임. 즉, 메소드 실행을 위해 필요한 client의 정보를 제공해주는 API

  3. HttpServletResponse

    • http 프로토콜 기반으로 요청하는 client에게만 응답하는 처리 수행

    • 응답 포멧 설정 가능

      → 속성지정 가능 (ex.한글로 응답하기 위한 속성 설정)

      setContentType() : client 브라우저에 응답하는 포멧 + 인코딩 설정

      getWriter() : 2byte출력이 가능하고, 사용 시 PrintWriter 객체를 생성해주어야 함. (PrintWriter는 접속된 client에게만 출력)

      PrintWriter는 2byte 단위로 출력됨

    • client 브라우저에 응답하는 객체

아래 코드처럼 작성하면 된다.

public class Servlet2Validation extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		System.out.println("id : " + id + " pw : " + pw);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		System.out.println("id : " + id + " pw : " + pw);
	}

}

🟡 servlet container

servlet container란 말 그대로 servlet을 관리해주는 container이다.

우리가 서버에 서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고 서블릿을 관리해주는 것이 필요한데, 그러한 역할을 하는 것이 바로 서블릿 컨테이너이다. 서블릿 컨테이너는 클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓으로 통신하며 대표적인 예로 톰캣(Tomcat)이 있다. 톰캣은 실제로 웹 서버와 통신하여 JSP(자바 서버 페이지)와 Servlet이 작동하는 환경을 제공해준다.

출처 : https://mangkyu.tistory.com/14


🟡 servlet lifecycle

servlet lifecycle은 servlet container에서 관리한다.

  1. 기본 생성자 (parameter가 없는 생성자)
    • 최초 client가 호출시 실행돼서 객체 생성
    • 새로운 로직의 갱신된 객체 생성시 단 한 번 생성 (갱신 직후 최초 client가 요청시 단 한 번 실행)
  2. init()
    • 생성자 호출 직후에 단 한 번 실행
    • 공유 자원 초기화 로직으로 적합
  3. doGet() / doPost()
    • client 요청 시 1:1 실행 (Java Thread를 이용하여 동작됨)
    • service 메소드라 표현
  4. destroy()
    • 갱신된 servlet bytecode가 서버 메모리에 로딩시 자동 호출
    • 즉, 구버전 객체 메모리 해제시에 자동 실행
    • 자원 반환용 로직 구현시 적합
    • 서버 다운 직전에도 자동 호출됨

🟡 servlet method

<form action="idcheck" method="post">
	id 입력 from : <input type="text" name="id"> <br> 
	pw 입력 from : <input type="password" name="pw"> <br>
	<input type="submit" value="로그인">
</form>

위 코드에서처럼, <from>태그에는 method속성을 정해줄 수 있다. 이 속성은 form data가 서버로 제출될 때 사용되는 HTTP 메소드를 명시한다. method의 속성으로는 아래 네 가지가 있다.

  1. get
    • 서버에 데이터 전송시 url에 전송되는 데이터가 오픈돼서 전송
    • 보안 철저히 고려하지 않음
    • 소량의 데이터 전송에 간혹 쓰임
    • 즐겨찾기, 즉 webpage 구분용으로 사용 (url 상에 노출되니까)
      예시 url : https://book.naver.com/bookdb/book_detail.nhn?bid=20743750
    • servlet은 doGet()으로 처리
  2. post
    • 우편물처럼 데이터를 봉투에 담아서 은닉해서 전송하는 것과 같은 원리
    • 데이터 서버에 전송할 때 보안을 고려해서, 또는 데이터양이 많을 경우 사용되는 방식
    • servlet은 doPost()으로 처리
  3. put
  4. delete

좋은 웹페이지 즐겨찾기