서블릿(Servlet)
동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.
Internet
: network of network → infrastructureTCP/IP
: 데이터 전송은 packet
이라는 단위로 이루어진다.IP
(Internet Protocol): (한 컴퓨터에서 다른 컴퓨터로 데이터를 전송할 때) 실제로 두개의 프로세스 간의 통신을 하게 해주는 녀석TCP
(Transmission control protocol): 그래서 연결성과 신뢰성을 TCP가 담당해준다.IP address
: 4byte 숫자DNS
(Domain Name System, Domain name Server): 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환하는 시스템Port
: IP 내에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호HyperText
: 사용자의 선택에 따라 관련된 정보쪽으로 이동할 수 있는 조직화된 정보HTTP
: CS구조(Client/Server)Static Web
Dynamic Web
JSP
의 등장JSP
MVC
spring
)를 이용해보자.Request URL
: http://localhost:8080/path/file?key=value프로토콜
: httpip
: localhostport번호
: 8080QueryString
: 물음표(?)로 시작하고 key=value&key=value&key=value … 의 형태Request line
Request header
Request body
Status line
또는 Response line
Response header
Response body
form(사용자 입력 양식) → client가 서버에 데이터를 전달할 목적으로 사용한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>아래는 form 태그에요!!</div>
<!-- action: 입력된 내용을 가지고 요청을 보낼 서버쪽 프로그램에 대한 URL -->
<!-- method: 생략가능. 만약 생략되면 "GET"
클라이언트가 서버에 Request를 보내는 방법을 지정한다.
총 6개 존재하는데 4개(REST)만 사용한다.
REST를 사용하지 않는다면 일반적으로는 2개(GET, POST)만 이용한다.
"GET", "POST", "PUT", "DELETE" -->
**<form action="index.html" method="GET">** <!-- action은 상대경로로 작성하자 -->
<!-- <form action="http://localhost:8080/html/index.html" method="GET">
절대경로로 쓰는 것은 지양한다. context root가 변경되는 경우 바꿔주어야하기 때문 -->
ID : <input type="text" name="userID">
PW : <input type="text" name="userPW">
<input type="submit" value="서버로 데이터 전송">
</form>
</body>
</html>
Client가 Server에게 사용자 데이터를 포함하여 request를 한다.
<Connector **URIEncoding="EUC-KR"** connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
src/main/java 폴더 내에 servlet 파일을 만들어 준다.
![](https://velog.velcdn.com/images/oduodg/post/e738612d-089e-471b-91a8-c9e38516d2f8/image.png)
- servlet 하나에 56여러 URL을 매핑해서 사용할 수 있다.
servlet은 필드의 공유객체
레이어드 아키텍쳐의 적용 필요! → MVC pattern
을 적용해서 해결
Servlet의 데이터 공유는 어떻게 하면 되나요? → ServletContext
를 이용해서 해결
HTML의 내용이 많아졌을 때 출력 문제가 생긴다. Java code 내에서 HTML을 포함시켜야 한다. → JSP
or Front-end 자체 처리
(JSON)로 해결
// 3. 출력처리
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = new PrintWriter(response.getOutputStream()); // Stream 열기
out.println(<html><head><body>);
if(loginStatus) { // 로그인 가능하다면
System.out.println("환영합니다.");
out.println("환영합니다.");
} else {
System.out.println("로그인 실패");
out.println("로그인에 실패했습니다.");
}
out.println(</html></head></body>);
out.close();
HTTP protocol은 Stateless protocol(무상태 프로토콜) → “Session 처리
”를 통해서 해결
객체 → 모든 servlet이 공유하는 객체
우리 context root 안에 servlet context 객체는 1개
http://localhost:8080/html/servletb → 결과 x 얻어온 결과는 : null
http://localhost:8080/html/servleta → 냉장고라는 결과 저장
http://localhost:8080/html/servletb → 결과 o 얻어온 결과는 : 냉장고
즉 servlet 간에 데이터를 공유하기 위해서는 공유 객체를 이용하면 된다.
http://localhost:8080/html/mysession?myID=kim → session에 데이터를 저장
http://localhost:8080/html/usesession → session에서 데이터를 추출
클라이언트마다 각자의 세션이 있다. 다른 계정의 크롬창에서는 데이터가 추출되지 않음.(다른 세션을 쓴다는 의미)