Web Service의 기본적인 동작 과정
HTML Form -> Servlet -> HTML Page
- 사용자가 웹 페이지 form(HTML Form)을 통해 자신의 정보를 입력한다.(Input)
- Servlet의 doGet()또는 doPost()메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색한다.
- 이 정보를 이용하여 사용자의 요청에 맞게 적절한 동적 컨텐츠(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메소드를 지정할 수 있다.
- 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 : 몇 번이고 같은 연산을 반복해도 같은 값이 나오는 작업
- 사용자가 입력한 내용(form data)이 URL 뒤에 텍스트 문자열로 추가된다.
- 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의 기본적인 동작과정
- Web Server는 HTTP request를 WEb Container(Servlet Container)에게 위임한다.
- 1) web.xml 설정에서 어떤 URL과 매핑되어 있는지 확인
- 2) 클라이언트(browser)의 요청 URL을 보고 적절한 Servlet을 실행
- Web Container는 service()메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.
- 1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.
- 2) .class 파일을 메모리에 올려 Servlet 객체를 만든다.
- 3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init() 메서드가 실행된다.
- 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 > 기초' 카테고리의 다른 글
[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 |