2022. 3. 16. 00:24ㆍJAVA/Spring Framework
본격적인 스프링 MVC 동작 원리를 이해하기 위해 서블릿에 대해 알아보고자 합니다.
서블릿 (Servlet)이란 HttpServlet을 상속 받아 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 프로그램입니다.
Servlet 특징
- 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- HTML을 사용하여 Response
- JAVA의 쓰레드를 이용하여 동작
- MVC 패턴에서의 Controller로 이용됨
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속
- UDP보다 속도가 느림
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점
Servlet 생명주기
- 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성됩니다.
- 서버는 init() 메소드를 호출해서 Servlet을 초기화 합니다.
- service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리하도록 합니다.
- service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드 (doGet(), doPost() 등)를 호출합니다.
- 서버는 destroy() 메소드를 호출하여 Servlet을 제거합니다.
이제 서블릿 애플리케이션을 만들어 볼까요?!
File - New - Project... 경로를 통해 New Project 레이어를 열어줍니다.

Maven을 클릭하고 Create from archetype을 체크해주고,
maven-archetype-webapp 을 클릭하여 simple Java web application을 생성해주겠습니다.
이후에 프로젝트 명명은 적당한 것으로 해주세요!
그리고 pom.xml에 servlet 디펜던시를 추가해주도록 하겠습니다.

이 dependency는 아래 링크에서 복사해올 수 있습니다.

java servlet을 검색해서 최신 버전을 복사해서 pom.xml에 추가해줍니다.


우선 최종적인 프로젝트 구조가 이렇게 될 건데요!
src/main 아래에 "java"라는 이름의 디렉토리를 추가해주세요.
그리고 File - Project Structure - Modules 를 통해 java 디렉토리를 소스 폴더로 지정해줍니다.

서블릿을 실행시켜줄 서버가 필요한데, 톰캣을 설치해보도록 하겠습니다.
https://tomcat.apache.org/download-90.cgi
Apache Tomcat® - Apache Tomcat 9 Software Downloads
Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version
tomcat.apache.org

그냥 zip 파일을 다운 받으셔도 되고, window 사용자라면 운영체제 버전에 맞는 압축 파일을 다운 받아서
적당한 위치에 압축을 풀어주세요!
이제 톰캣을 설정해주겠습니다!
Add Configuration > + 버튼 > Tomcat Server > Local

그리고 아까 압축 풀어두었던 톰캣 경로를 지정해줍니다.



Deployment 탭에서 Artifact를 war exploded로 추가해주고,
서버 실행 시 url이 지저분해지는 것을 막기 위해 Application context를 / 로 지정해주겠습니다.
HelloServlet.java
package com.example;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
resp.getWriter().println("<html>");
resp.getWriter().println("<head>");
resp.getWriter().println("<body>");
resp.getWriter().println("<h1>Hello Servlet</h1>");
resp.getWriter().println("</body>");
resp.getWriter().println("</head>");
resp.getWriter().println("</html>");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
이제 다 되었습니다!!!!!! 🤓
톰캣을 실행해 볼까요?


처음 실행되었을 때 init (/) 과 doGet (/hello)이 호출되었습니다.
/hello를 여러번 호출 시킨 뒤, 서버를 종료시켜볼게요.

서블릿 생명주기에 따라 한 번 생성되면 init은 다시 호출되지 않습니다.
doGet만 여러 번 호출된 것을 확인할 수 있습니다.
그리고 마지막에 서버가 종료되며 서블릿도 destroy 되네요 😎
'JAVA > Spring Framework' 카테고리의 다른 글
[스프링 웹 MVC] 서블릿 리스너와 서블릿 필터 (0) | 2022.03.20 |
---|---|
[스프링 웹 MVC] 스프링 MVC 소개 (0) | 2022.03.14 |
스프링 웹 MVC (0) | 2022.03.14 |