본문 바로가기

백엔드 개발/서블릿 & MVC

02. 서블릿

@ServletComponentScan

스프링이 자동으로 현재 내 패키지 포함해서 하위 패키지까지 뒤져서 서블릿을 다 찾아서 자동등록해줌

 

1. 서블릿을 생성하기 위해서는 먼저 HttpServlet을 상속받아야 한다.

상속 : Java에 있어서 중요한 개념

//HttpServlet을 상속받은 뒤, HttpServlet의 service 메소드를 내 마음대로 재정의하면 됨
//이 서블릿이 호출이 되면 자동적으로 위의 protected service 메소드도 호출됨!

 

2. @WebServlet 어노테이션

name : 서블릿 이름

urlPatterns : 이 서블릿을 짝 지어줄 Url 매핑

 

3. 열쇠와 풀린 자물쇠 

 

열쇠 : protected 메소드

풀린 자물쇠 :public 메소드

 

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

    }
    
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }

 

-> 나는 열쇠모양 메소드를 택했다

 

4. HelloServlet을 서버에 띄워보겠다

스프링 서버 play하고, 주소창에는 /hello 치면 됨

콘솔창에는

 

 

HelloServlet.service도 잘 호출되었고, 로그도 잘 찍혔는데 왜 웹에서는 흰 화면 뜨는지?.. 

왜?

why?

huh?

 

답변 : 요청만 했으나, 내가 이 화면에서 응답한 게 없기 때문이다. == WAS가 새로 생성한 request & response 객체 중에 response 객체에 들어가있는 내용, 데이터가 없다는 소리임 => 증거있어? 그러면 한번 response에 뭐가 들어있나 찍어보자.

 

 @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HelloServlet.service");
        //HttpServlet을 상속받은 뒤, HttpServlet의 service 메소드를 내 마음대로 재정의하면 됨
        //이 서블릿이 호출이 되면 자동적으로 위의 protected service 메소드도 호출됨!

        //웹브라우저 요청에 따라서 WAS가 새로 생성한 request, response 객체 안에 있는 내용 찍어보려고 하는 것임
        System.out.println("request = " + request);
        System.out.println("response = " + response);
    }

request, response 객체에 대한 정보가 콘솔에 찍혀져 나왔다.

 


복기해보자면

1. 웹브라우저에서 /hello를 치면

2. WAS에서 새 req,res 객체를 만들어서 서블릿 컨테이너에 투척함

WAS ⊃ 서블릿 컨테이너 ⊃ helloServlet, saveServlet 등등..

서블릿 컨테이너 : 서블릿 생성, 호출, 관리해줌

3.request 객체 -> 사용자가 작성한 form이 서버에 어떻게 보내질것인지(요청될것인지) 요청 메세지를 적는데 이 요청 메세지는 웹 브라우저가 알아서 적어줌

response 객체 -> 응답 메세지는 개발자인 내가 직접 생성해야했었는데! 

서블릿이 있으므로서 응답메세지까지 적어준다.

정말로 서블릿이 '비즈니스 로직 실행 및 DB에 저장 요청'을 제외한 모든 업무를 다 해준다.

@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");
        //HttpServlet을 상속받은 뒤, HttpServlet의 service 메소드를 내 마음대로 재정의하면 됨
        //이 서블릿이 호출이 되면 자동적으로 위의 protected service 메소드도 호출됨!
    }
  1. urlPatterns의 url이 호출되면 서블릿 코드가 실행 -> 자동으로  service 메소드도 호출됨
  2. HTTP 요청 정보를 편리하게 (개발자가) 사용할 수 있는 HTTPServletRequest객체와
  3. HTTP 응답 정보를 편리하게 (개발자가) 제공할 수 있는 HTTPServletResponse객체를
  4. 개발자는 매우 편리하게 사용하면 된다!

즉 HTTPServletRequest와 HTTPServletResponse는 걍 이미 요청메세지와 응답메세지 양식을 다 가지고 있는 만능불닭소스같은 존재라고 이해하면 되고, 우리는 그 불닭소스같은 req객체를 활용하여 내가 원하는 데이터를 넣으면 되고 ex. name = kim age = 20

res객체를 활용하여 들어있는 데이터를 빼내오면 되는 것이다.


출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 - 인프런

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

김영한 스프링 MVC 1