본문 바로가기

Web/기초

[WEB기초] Servlet이란

Web Service의 기본적인 동작 과정

HTML Form -> Servlet -> HTML Page

 

출처 : https://gmlwjd9405.github.io/2018/10/28/servlet.html

  1. 사용자가 웹 페이지 form(HTML Form)을 통해 자신의 정보를 입력한다.(Input)
  2. Servlet의 doGet()또는 doPost()메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색한다.
  3. 이 정보를 이용하여 사용자의 요청에 맞게 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공한다.(Output)

 

1. HTML Form

input elements(Ex. 텍스트 상자)가 포함된 웹 페이지의 한부분(section)

  • 사용자가 입력한 정보(form contents)를 웹 서버로 전송하기 위한 submit element(Ex. 버튼)가 존재한다.
  • action에는 form을 처리하는 서버 쪽 URL을 명시한다.

클라이언트(browser)가 요청하는 URL 정보

  • 요청을 보낼 서버의 IP 주소 : Port 번호 / App 이름 / 요청하는 HTML
    • Ex) localhost:8080/ServletTest/LoginForm.html
  • IP 주소
    • 요청을 보낼 서버의 "위치"를 의미한다.
    • browser와 WAS(Tomcat)가 같은 PC에 있으면 "IP주소 = localhost"
  • Port 번호
    • 해당 위치 안의 "특정 사함"을 의미한다.
  • HTML 이름
    • HTML 이름에 해당하는 HTML 문서를 받아온다.
    • browser는 받아온 HTML 문서 안의 html 태그들(Ex. h2, br 등)을 paring(기계어로 번역)한다.
    • 마지막으로 이 내용을 browser에서 rendering(그리기)한다.

LoginForm.html 예시

<form name="loginForm" method="post" action="loginServlet">
    Username: <input type="text" name="username"/> <br/>
    Password: <input type="password" name="password"/> <br/>
    <input type="submit" value="Login" />
</form>
  • method="post"
    • 원하는 동작에 따라 HTTP 메서드를 사용한다.
    • method="get"
  • action="loginSerlet"
    • URL of the servlet
    • 해당 URL로 request가 간다. -> WAS에서 어떤 Servlet인지 지정하는 것
  • type="submit"
    • 버튼을 누르면 사용자가 입력한 인자들이 Servlet으로 넘어간다.

Form Tag 속성

Form Tag 속성을 이용하여 어디로, 어떤 방식으로 전송할지 정한다.

  • action : form을 전송할 서버 쪽 스크립트 파일 지정
  • name : form을 식별하기 위한 이름지정
  • accept-charset : form 전송에 사용할 문자 인코딩을 지정
  • target : action에서 지정한 스크립트 파일을 현재 창이 아닌 다른 위치에서 열리도록 지정
  • method : form을 서버에 전송하는 방식으로, HTTP 메서드 지정( GET 또는 POST)
  • enctype : 넘기는 Content의 Type 지정 (주로 파일을넘길 때 사용)
    • type은 multipart/form-data로 지정해서 사용

Form Methods

form을 서버에 전송하는 방식으로, 두 가지 HTTP메소드를 지정할 수 있다.

  1. GET Method
    • 사용자가 입력한 내용(form data)이 URL 뒤에 텍스트 문자열로 추가된다.
      • 크기 제한 : 1024 characters
      • data는 ? 를 기준으로 action URL과 분리된다.
        • EX. http://www.freewebdev.com/login?id=oss0202&title=intro
      • 브라우저에서 웹 서버로 정보를 전달하는 기본 메서드(Default Method)
        • HTTP 메서드를 지정하지 않으면 GET Method를 호출한다.
      • 서버에 전달하는 data에 암호와 같은 민감한 정보가 있는 경우는 GET Method를 사용하지 않는다.
        • URL은 모두에게 노출되는 정보이기 때문에 보안상 적절하지 않다.
      • GET 메서드의 사용
        • Query-Type actions : DB에 영향을 주지 않는 단순히 읽기 위주(read operation)의 작업
        • Idempotemt actions : 몇 번이고 같은 연산을 반복해도 같은 값이 나오는 작업
  2. POST Method
    • 사용자가 입력한 내용(form data)을 별도의 메시지로 보낸다.
    • Request Body에 data를 추가한다.
      • URL에 직접적으로 data가 노출되지 않기 때문에 GET Method보다 보안상으로 조금 더 안전하다.
    • POST 메서드의 사용
      • action with side-effects : DB에 영향을 주는 작업

2. Servlet이란

Servlet의 개념

웹 기반의 요청에 대한 동적인 처리가 가능한 하나의 클래스이다.

  • Server Side에서 돌아가는 Java Program
  • 개발자가 작성해야 하는 부분

Servler Program의 기본적인 동작과정

출처 : https://gmlwjd9405.github.io/2018/10/28/servlet.html

  1. Web Server는 HTTP request를 WEb Container(Servlet Container)에게 위임한다.
    • 1) web.xml 설정에서 어떤 URL과 매핑되어 있는지 확인
    • 2) 클라이언트(browser)의 요청 URL을 보고 적절한 Servlet을 실행
  2. Web Container는 service()메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.
    • 1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.
    • 2) .class 파일을 메모리에 올려 Servlet 객체를 만든다.
    • 3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init() 메서드가 실행된다.
  3. Web Container는 Request가 올 때마다 thread를 생성하여 처리한다.
    • 각 thread는 Servlet의 단일 객체에 대한 service()메서드를 실행한다.

 

※ 참고 Servlet Program에서 Thread의 역할

  • Thread란? 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • Servlet Program에서 thread가 수행할 메서드가 지정/할당되면
    • thread는 생성 후 즉시 해당 메서드만 열심히 수행한다.
    • 해당 메서드가 return하면 thread는 종료되고 제거된다.
    • 즉, 실제로 thread의 역할 : Servlet의 doGet() 또는 doPost()를 호출하는 것이다.
  • Web Container(Servlet Container)는 thread의 생성과 제거를 담당한다.
    • 하지만 thread

gmlwjd9405.github.io/2018/10/28/servlet.html

 

[Web] Servlet이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

'Web > 기초' 카테고리의 다른 글

[WEB기초] DI(Dependency Injection) - 의존성 주입  (0) 2021.01.18
[WEB기초] web.xml  (0) 2021.01.10
[WEB기초] 로드 밸런서(Load Balancer)  (0) 2020.12.27
[WEB기초] 소켓, 서킷, 패킷, TCP/IP 통신  (0) 2020.12.13
[WEB기초] DNS  (0) 2020.12.12