동적 페이지의 경우, “서버에 페이지 주세요” 하면 프로그램이 대신 페이지를 제작하여 제공해준다. 이때 서버 측에 페이지를 만드는 웹 서버 프로그램이 존재하는데, 바로 이 웹 서버 프로그램을 만드는 기술이 servlet이다.(like 손님에게 커피를 제공할 바리스타를 만드는 기술)
💡 정적 페이지와 동적 페이지는 어떤 차이가 있을까?
정적 페이지 : 누가, 언제 방문하든 간에 항상 동일한 콘텐츠를 제공 like 캔커피를 판매하는 것 ⇒ 완성된 제품을 별도 가공 없이 제공
동적 페이지 : 누가, 언제 방문하냐에 따라 상이한 콘텐츠를 제공 → 주소는 동일하나 사용자에 따라 페이지의 내용이 바뀐다. like 바리스타에게 커피를 주문하여 제공받는 것 ⇒ 미리 준비된 상품 없이 내가 주문(URL 요청)할 때 제작하여 제공
Servlet Class
손님(클라이언트)에게 커피를 제공하는 바리스타(직원)
클라이언트(브라우저)의 요청에 따라, 동적으로 웹 페이지를 생산하는 클래스
서블릿 기술을 사용해 구현한 실제 클래스
Servlet Class 작성 규칙
1. 서블릿 클래스 선언 (일반 클래스를 서블릿 클래스로 만들기 위해서 아래 2가지 중 하나를 선택하면 된다.)
a. javax.servlet.Servlet 인터페이스를 구현한다.(인터페이스를 상속받아 추상메서드 구현)
b. javax.servlet.http.HttpServlet 클래스를 상속받는다.(단순히 클래스를 상속받는다.)
❓ 위의 2가지 방법 중 어떤것을 사용하는게 나을까?
방법 a: 복잡함, 고비용 But 구현이 자유롭다.
방법 b: 단순함, 저비용(우리가 해야할 구현을 미리 다 해놓아서 클래스로 제공하기 때문에) But a에 비해 구현이 덜 자유롭다.
⇒ HttpServlet 추천!!!
2. doGet/doPost 메서드 선언 → 예약된 이름의 메서드 ⇒ 요청 메서드 (반드시 1번에서 만든 클래스 안에 두 메서드를 생성해야 한다.)
PrintWriter 객체의 printXXX("태그") 메서드를 사용해서 HTML 페이지를 작성한다. ⇒ 동적으로 웹페이지 생산
페이지 완성 → 브라우저에게 반환 → 웹 페이지 출력
Servlet 작업
: web.xml에 Servlet을 등록하고 mapping 해주기
Servlet 설정
등록할 servlet의 이름과 구현 클래스 지정
가상 주소 mapping = 가상 URL + servlet 이때문에 자바 클래스를 호출할 수 있는 가상 URL 생성이 필요하다.
형식
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
<display-name>ServletTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>매핑과 동일한 이름 설정</servlet-name>
<servlet-class>클래스 경로</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿과 동일한 이름 설정</servlet-name>
<url-pattern>가상 URL</url-pattern>
</servlet-mapping>
</web-app>
💡 web.xml에서 Servlet 설정 시 가상 URL의 '/'의 의미 ex) <url-pattern>/ex01.do</url-pattern> : 앞에 있는 ‘슬래시(/)’는 http://localhost:포트번호/servlet을 의미한다. 외부인들이 페이지에 접속하여 주소창을 볼 때는 http://localhost:포트번호/servlet/ex01.do로 표출된다.
실전 적용 :: Servlet Class 작성 규칙에 따라 작성해보기
→ 위 사진의 src/main/java 위치에 자바 파일을 생성한다!
1. package 생성하기: com.test.servlet
2. 자바 파일 생성하기: Ex01.java ★이제 본격적으로 이 평범한 자바 프로젝트를 커피를 만드는 바리스타로 만들어보자!★
3. 서블릿 클래스 선언 → 기존의 클래스에 extends 추가 후 HttpServlet 클래스 import
4. doGet메서드 만들고 매개변수 넣기
5. 예외 처리하기
6. 클라이언트가 보게될 소스 만들기 → 동적 HTML 페이지 작성 구현 ⚠️ 주의사항: 오타나면 답이 없다. ⇒ 문자열로 태그가 다 들어가기 때문에!!!