Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[서블릿] Hello Servlet 본문

인프런/[인프런] 스프링 MVC 1

[서블릿] Hello Servlet

Seung__ 2021. 9. 7. 22:51

1. 스프링 부트 서블릿 환경 구성


  • @ServletComponentScan
  • 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan 을 지원.
  • 현재 패키지 하위로 Servlet 찾아서 등록함.
package hello.servlet;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan
@SpringBootApplication
public class ServletApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServletApplication.class, args);
    }

}

 

 

2. HelloServlet Class


  • @WebServlet : Servlet Annotation
    • name : servlet name
    • urlPatterns : URL 매핑
  • localhost:8080/hello 로 접근하면
  • ServletContatiner는 service 메서드 실행함.
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // /hello로 접근하면 HelloServlet 실행
public class HelloServlet extends HttpServlet {

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

        System.out.println("HelloServlet.service");
       // super.service(req, resp);
    }
}

빈화면임. 오류는안뜸 ㅋㅋ

 

 

3. HttpServletRequest, HttpServletReponse가 뭐임


  • Http요청이 오면 Servlet 컨테이너가 Request, Response객체를 만들어 Servlet에 던져줌.
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // /hello로 접근하면 HelloServlet 실행
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);

        
       // super.service(req, resp);
    }
}
  • 뭐지? 신기하네.. ㅋㅋ 구현체임 ㅇㅇ
request = org.apache.catalina.connector.RequestFacade@18bed47c
response = org.apache.catalina.connector.ResponseFacade@2e7c2f49

 

 

 

 

4. Request객체 사용


  • 아래와 같이 작성하고
  • http://localhost:8080/hello?username=Kim로 접속해보자.
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // /hello로 접근하면 HelloServlet 실행
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);

    }
}
  • Request객체에서 username을 꺼내 쓸 수 있다.
  • Servlet이 parsing해준다 ㅋㅋㅋㅋ

 

 

 

 

 

 

5. Reponse객체 사용


  • Response객체에 데이터를 담으면
  • Http message에 해당 데이터가 담겨서 넘어감.
  • Header
    • setContentType("text/plain")
    • setCharacterEncoding("utf-8")
    • getWriter().write() -> 여기에 입력한 data가 message body에 담김.
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // /hello로 접근하면 HelloServlet 실행
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);//여기에 입력하면 message body에 들어감.

    }
}

 

 

 

6. HTTP 요청 Message를 log에 남기기


  • application.properties에 아래와 같이 추가.
  • logging.level.org.apache.coyote.http11=debug

    운영서버에 이렇게 요청을 다남기면 성능문제발생함 ㅋㅋㅋㅋ 개발단계에서만 쓰자.

 

 

 

 

7. ServletContainer 동작 방식


  • 스프링 부트 실행
  • 스플이 부트가 내장 톰캣 서버 띄움
  • 톰캣은 내부에 servlet 컨테이너 기능 있음
  • servlet contatiner를 통해 Servlet 생성함
  • ServletContainer안에 HelloServlet생성
  • 웹 브라우저가 HTTP 요청 메시지를 날리면
  • WAS가 Request, Reponse객체를 만들어서 helloServlet을 호출하고 
    Service 메서드에 Request, Reponse객체를 넘겨줌.
  • 필요하면 Reponse객체에 데이터를 담아서 return.
  • WAS는 Reponse객체를 가지고 HTTP 응답 메시지 작성.

 

 

 

8. 참고


main/webapp/index.html 을 추가하면 웰컴페이지 사용 가능.

 

 

 

9. GitHub : 210907 HelloServlet


 

GitHub - bsh6463/MVC1

Contribute to bsh6463/MVC1 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글

HttpServletRequest 사용법  (0) 2021.09.07
Http Servlet Request  (0) 2021.09.07
[서블릿] 프로젝트 생성  (0) 2021.09.07
백엔드는 어디까지..?  (0) 2021.09.07
동시요청 - 멀티 쓰레드  (0) 2021.09.06
Comments