본문 바로가기
Spring Tutorial

[스프링 MVC 7] 서블릿: Hello 서블릿

by 미소5 2023. 7. 17.

스프링 부트 환경에서 서블릿을 등록하고 사용해보자.

 

 

  • 스프링 부트 서블릿 환경 구성
    • @ServletComponentScan
      • 스프링 부트가 서블릿을 직접 등록해서 사용할 수 있도록 해준다.
@ServletComponentScan  //서블릿 자동 등록
@SpringBootApplication
public class ServletApplication {

   public static void main(String[] args) {

      SpringApplication.run(ServletApplication.class, args);
   }
}

 

 

  • 서블릿 등록하기
    • 실제 동작하는 서블릿 코드를 등록
package hello.servlet.basic;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name="helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("HelloServlet.service");
        System.out.println("request = " + req);
        System.out.println("response = " + resp);

        String username = req.getParameter("username");
        System.out.println("username = " + username);

        //헤더정보
        resp.setContentType("text/plain");  //단순 문자
        resp.setCharacterEncoding("utf-8");  //인코딩 정보: 거의 다 utf-8을 사용

        resp.getWriter().write("hello "+username);
    }
}
  • 서블릿 애노테이션
    • @WebServlet (name="서블릿 이름", urlPatterns="URL 매핑")
    • HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행한다.
      • protected void service(HttpServletRequest request, HttpServletResponse response)

웹 브라우저 실행 결과
콘솔 실행결과

 

F12>개발자도구>Network>Headers

  •  "text/plain", "utf-8"로 등록한  ContentType의 정보가 잘 전달됨
    • connection 등의 정보은 톰캣 서버가 자동으로 만들고, Accept는 웹 브라우저가 만드는 정보

 

 

  • HTTP 요청 메시지 로그로 확인하기
    • application.properties 파일에 다음 설정을 추가
logging.level.org.apache.coyote.http11=debug

콘솔 실행결과

  • 서버를 다시 시작하고, 요청해보면 서버가 받은 HTTP 요청 메시지를 출력하는 것을 확인할 수 있다. (개발자 도구에서 확인했던 헤더 정보들)

 


서블릿 컨테이너의 동작 방식을 알아보자.

 

  • 내장 톰캣 서버 생성

  • 스프링 부트를 실행하면 스프링 부트가 내장 톰캣 서버를 생성한다. 톰캣서버는 내부에는 서블릿 컨테이너 기능이 있고, 이 서블릿 컨테이너를 통해 서블릿을 생성한다. (블릿 컨테이너에 helloServlet이 생성된다.)

 


 

  • get 방식에 "/hello?username=world"라고 치면, 웹 브라우저가 다음과 같은 HTTP메시지를 만들어 서버에 전달한다.

HTTP 요청, HTTP 응답 메시지

  • 그럼 서버는 request, response 객체를 만들어 helloServlet을 호출(하고 service 메소드를 호출)하며  request, response를 전달한 후 우리가 필요한 작업을 한다.

웹 애플리케이션 서버의 요청 응답 구조

  • 예) response정보에 ContentType에 대한 정보들과 hello world라는 메시지를 넣는다. helloServlet이 종료되면서 WAS가 response정보를 통해 HTTP응답메시지를 만들어 반환해준다. 웹 브라우저에서 hello world를 볼수있다.

 

 

  • Content-Length 등 부가정보들은 웹 애플리케이션 서버(WAS)가 자동으로 생성해준다.

 



 

  • 개발 내용을 편리하게 참고할 수 있도록, welcome 페이지 (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>

 

  • basic.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    <li>hello 서블릿
        <ul>
            <li><a href="/hello?username=servlet">hello 서블릿 호출</a></li>
        </ul>
    </li>
    <li>HttpServletRequest
        <ul>
            <li><a href="/request-header">기본 사용법, Header 조회</a></li>
            <li>HTTP 요청 메시지 바디 조회
                <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>
            </li>
        </ul>
    </li>
    <li>HttpServletResponse
        <ul>
            <li><a href="/response-header">기본 사용법, Header 조회</a></li>
            <li>HTTP 응답 메시지 바디 조회
                <ul>
                    <li><a href="/response-html">HTML 응답</a></li>
                    <li><a href="/response-json">HTTP API JSON 응답</a></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
</body>
</html>

 

 




[Spring 입문2] spring 웹 개발 기초 (tistory.com)

 

Spring 입문2 -spring 웹 개발 기초

스프링 부트가 제공하는 Welcome Page static/index.html @Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "sara!!"); // model(data:sara!!) return "hello"; //컨트롤러에

joly156.tistory.com

 


※ 파일>설정>gradle에서

   intelliJ가 아닌 Gradle로 실행 (intelliJ로 실행하면 에러난다)


 

728x90
반응형