오봉이와 함께하는 개발 블로그
스프링 MVC 1 - 기본 프로젝트 Hello 서블릿 본문
728x90
프로젝트 생성
- start.spring.io
- Spring Boot : 최신
- Gradle
- Java 11
- Group : hello
- Artifact : servlet
- Name : servlet
- Package name : hello.servlet
- Packaging : War
- Dependencies
- Spring Web
- Lombok
Hello 서블릿
서블릿과 스프링은 상관없지만, 내장 톰캣 등 환경 설정을 위해 스프링 부트를 통해 실행하자.
스프링 부트 서블릿 환경 구성
- 먼저 서블릿 자동 등록을 위해 스프링 부트 시작 애플리케이션 클래스에 어노테이션을 추가한다.
@ServletComponentScan // 서블릿 자동 등록
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
서블릿 등록하기
- 실제 동작하는 서블릿 코드를 작성하자.
- 경로 : hello.servlet.basic.HelloServlet
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username");
System.out.println("username = " + username);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello " + username);
}
}
- @WebServlet
- name : 서블릿 이름
- urlPattern : URL 매핑
요청을 통해 매핑된 URL(http://localhost:8080/hello)이 호출되면 서블릿 컨테이너는protected void service(HttpServletRequest request, HttpServletResponse response)
을 실행한다.
http://localhost:8080/hello?username=world을 실행해보자.
웹 브라우저에는 hello world가 나오고 콘솔 결과는 다음과 같다.
HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@10859c04
response = org.apache.catalina.connector.ResponseFacade@3dbfbee0
username = world
HTTP 요청 메시지 로그로 확인하기.
운영서버에 모든 요청 정보를 남기면 성능저하가 발생할 수 있기 때문에 개발 단계에서만 적용하자.
application.properties에 logging.level.org.apache.coyote.http11=debug
을 추가하자.
서버를 종료후 다시 실행하여 아까와 같은 URL을 통해 다시 HTTP를 요청하면 다음과 같이 로그가 뜬다.
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6
Cookie: egovLatestServerTime=1648689603645; egovExpireSessionTime=1648725603645; Idea-2b7f509a=90db7928-e8ec-4571-b5cd-927069c66a8d; JSESSIONID=24BB879E031946ECFEE44B8B06E0F84E
]
서블릿 컨테이너 동작 방식
- 스프링 부트를 실행하면 내장 톰캣 서버가 같이 실행된다.
- 톰캣 서버는 내부에 서블릿 컨테이너 기능을 가지고 있다.
- 서블릿 컨테이너를 통해 모든 서블릿을 생성한다.
4. URL을 입력하면 웹 브라우저가 HTTP 요청 메시지를 생성해서 서버에 요청한다.
5. HTTP 요청 메시지를 기반으로 request, response 객체를 만들어서 helloServlet을 실행한다.
6. helloServlet이 종료될 때 response 객체에 HTTP 응답 메시지를 생성해서 웹 브라우저로 넘겨준다.
welcome 페이지 추가
공부할 내용을 편리하게 참고할 수 있게 welcome 페이지를 만들자.
<!-- main/webapp/index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <ul>
<li><a href="basic.html">서블릿 basic</a></li> </ul>
</body>
</html>
<!-- main/webapp/basic.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>hello 서블릿</li>
<ul>
<li><a href="/hello?username=servlet">hello 서블릿 호출</a></li>
</ul>
<li>HttpServletRequest</li>
<ul>
<li><a href="/request-header">기본 사용법, Header 조회</a></li>
<li>HTTP 요청 메시지 바디 조회</li>
<ul>
<li><a href="/request-param?username=hello&age=20">GET - 쿼리 파라미터</a></li>
<li><a href="/basic/hello-form.html">POST - HTML Form</a></li>
<li>HTTP API - MessageBody -> Postman 테스트</li>
</ul>
</ul>
<li>HttpServletResponse</li>
<ul>
<li><a href="/response-header">기본 사용법, Header 조회</a></li> <li>HTTP 응답 메시지 바디 조회</li>
<ul>
<li><a href="/response-html">HTML 응답</a></li>
<li><a href="/response-json">HTTP API JSON 응답</a></li>
</ul>
</ul>
</ul>
</body>
</html>
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
'BE > Servlet' 카테고리의 다른 글
스프링 MVC 1 - HTTP 요청 데이터 개요, GET 쿼리 파라미터 (0) | 2022.08.10 |
---|---|
스프링 MVC 1 - HttpServletRequest 개요, 기본 사용법 (0) | 2022.08.09 |
스프링 MVC 1 - 멀티 쓰레드 (0) | 2022.08.09 |
스프링 MVC 1 - 서블릿 (0) | 2022.08.08 |
Servlet - 세션 트래킹(웹 페이지 사이 정보 공유) Session 세션 (0) | 2021.12.29 |
Comments