@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 메소드도 호출됨!
}
- urlPatterns의 url이 호출되면 서블릿 코드가 실행 -> 자동으로 service 메소드도 호출됨
- HTTP 요청 정보를 편리하게 (개발자가) 사용할 수 있는 HTTPServletRequest객체와
- HTTP 응답 정보를 편리하게 (개발자가) 제공할 수 있는 HTTPServletResponse객체를
- 개발자는 매우 편리하게 사용하면 된다!
즉 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
'백엔드 개발 > 서블릿 & MVC' 카테고리의 다른 글
05. HTTPServletRequest (0) | 2023.12.24 |
---|---|
04. 서블릿 활용 - 요청 & 응답(request, response) (0) | 2023.12.24 |
03. 웹브라우저 - WAS - 서블릿의 구조 (0) | 2023.12.24 |