[Server] Servlet(서블릿)
by 캐떠린Servlet 이란?
- 자바 진영에서 웹 애플리케이션을 지원하기 위한 기술
- 자바로 웹 사이트를 만드는 기술
- 첫번째 웹 서버 기술 ~ 현재 모든 기술의 기반
- 순수 자바 + 서블릿 규격
- 자바 프로그램으로 웹 페이지를 생산하는 기술 ⇒ 동적 페이지
- 동적 페이지의 경우, “서버에 페이지 주세요” 하면 프로그램이 대신 페이지를 제작하여 제공해준다. 이때 서버 측에 페이지를 만드는 웹 서버 프로그램이 존재하는데, 바로 이 웹 서버 프로그램을 만드는 기술이 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번에서 만든 클래스 안에 두 메서드를 생성해야 한다.)
- 필요에 따라 둘 중 하나 선언 or 둘 다 선언 하기도 한다.
- 클라이언트(브라우저)의 요청이 들어오면 자동으로 호출되는 메서드
- 카페에서 커피를 주문하는 역할을 하는 ‘주문하기’ 메서드
- 커피 만드는 메서드 → 사용자가 보게될 HTML 페이지를 만드는 메서드
- 메서드 작성 규칙
- 매개변수(2개)
java.servlet.http.HttpServletRequest
java.servlet.http.HttpServletResponse
- 예외 미루기(2개 모두 필요)
java.io.IOException
java.servlet.ServletException
- 매개변수(2개)
3. 동적 HTML 페이지 작성 구현
doGet
/doPost
메서드의 구현부 → HTML 페이지를 만들기 위한 자바 코드 작성HttpServletResponse
객체의getWriter()
메서드 호출 →PrintWriter
객체 반환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 페이지 작성 구현
⚠️ 주의사항: 오타나면 답이 없다. ⇒ 문자열로 태그가 다 들어가기 때문에!!!
7. web.xml
에 servlet 작업해주기
<servlet>
<servlet-name>ex01</servlet-name>
<servlet-class>com.test.servlet.Ex01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ex01</servlet-name>
<url-pattern><!-- 가상URL -->/ex01.do</url-pattern>
</servlet-mapping>
➡ Procedure: 톰캣이 ex01으로 가서 자동으로 do메서드를 호출해준다. → do메서드의 구현부에서 페이지를 완성해주고 → 그렇게 만든 홈페이지는 톰캣이 가져가고 → 톰캣에게 요청했던 브라우저에게 돌려준다.
✳ web.xml 파일의 버그
Solution: 해당 밑줄 부분에 아무거나 입력 후 지우면 사라짐. But 파일 실행할 때마다 버그 발생..!
✳web.xml
파일 들여쓰기
: 기본 들여쓰기가 스페이스 2칸 처리 되어있기 때문에 전체 선택 후,
Ctrl
+Shift
+F
로 들여쓰기 자동 재배치 실행!
💡 모든 마크업 언어는 루트 태그를 벗어나면 안된다.
⇒ 따라서
<web-app>
태그 안에 Servlet 설정을 해줘야 한다!
'Server' 카테고리의 다른 글
[Server] JSP에 대하여 (2) | 2023.10.30 |
---|---|
[Server] 데이터 입력 및 데이터 수신 과정 톺아보기 (0) | 2023.10.29 |
[Server] 정적 페이지 vs 동적 페이지 (2) | 2023.10.22 |
[Server] Servlet 관련 각종 Error Case (0) | 2023.10.22 |
[Server] 개발 환경 Setting :: Apache Tomcat, Eclipse (0) | 2023.10.22 |
블로그의 정보
All of My Records
캐떠린