일반적으로 Jar지만 JSP공부를 하기위해 이 프로젝트는 War를 선택한다.
generate해서 프로젝트 파일받아서 인텔리제이로 열어주고
plugin에서 롬복이 깔려있는지 체크하고 , build시 실행이 gradle로 되는것을 인텔리제이로 바꿔주고, 어노테이션 처리가 잘되게끔 체크해줘야한다.
서블릿을 등록하고 사용해보자.
스프링 부트 서블릿 환경 구성
@ServletComponentScan //서블릿 자동등록 어노테이션, 자동빈등록에 쓰는 @ComponentScan과 같이 , 현재 패키지이하를 모두 뒤져서 서블릿을 찾아, 등록시켜준다.
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
자동서블릿등록을 위해 @ServletComponentScan 어노테이션 추가.
HelloServlet.java
@WebServlet(name = "helloServlet",urlPatterns = "/hello") //서블릿이름과 url를 설정해준다.
public class HelloServlet extends HttpServlet { //서블릿은 HttpServlet이라는걸 상속받아야한다.
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//이 서블릿이 호출되면 이 service 메소드가 실행된다, 오버라이드 해준다.
System.out.println("HelloServlet.service");//soutm하면 메소드명을 출력해줌
}
}
@WebServlet을 이용하여 서블릿 이름과 url설정을 해준다.
HttpServlet상속도 꼭해준다.
서블릿이 호출되면 실행될 service메소드도 오버라이드 해준다
Ctrl + O 를 이용하여 상속받은 클래스안의 메소드를 골라 오버라이드할 수 있다.
스프링부트를 실행해서 서블릿이 잘 동작하는지 체크해보자.
방금 http://localhost:8080/hello로 url호출하면 웹브라우저가 http요청메시지를 서버에 전달한다.
그 http요청이 오면 WAS가 HttpServletRequest , HttpServletResponse 객체를 만들어서 service의 매개변수로 전달해준다.
System.out.println("request = " + request);
System.out.println("response = " + response);
해당 코드로 어떤 객체들이 들어왔나 찍어보면 아래와 같은 결과가 나타난다.
HttpServletRequest , HttpServletResponse는 인터페이스인데 해당 인터페이싀 구현체 객체가 들어가있는 모습이다.
@WebServlet(name = "helloServlet",urlPatterns = "/hello") //서블릿이름과 url를 설정해준다.
public class HelloServlet extends HttpServlet { //서블릿은 HttpServlet이라는걸 상속받아야한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//이 서블릿이 호출되면 이 service 메소드가 실행된다, 오버라이드 해준다.
System.out.println("HelloServlet.service");//soutm하면 메소드명을 출력해줌
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username"); // 서블릿 request의 getParameter("파라미터이름")으로 파라미터값을 꺼내올수있다.
System.out.println("username = " + username);
}
}
http://localhost:8080/hello?username=kim에서 ?는 쿼리 파라미터이다.
URL의 쿼리 파라미터란 ? 뒤에 지정하는 파라미터를 뜻합니다.
여러 개를 연결할 때는 & 를 씁니다. 쿼리 스트링(query string)이라고도 합니다.
http://localhost:8080/hello?username=kim으로 url을 호출했을때
응답메시지에 값 채워보기
@WebServlet(name = "helloServlet",urlPatterns = "/hello") //서블릿이름과 url를 설정해준다.
public class HelloServlet extends HttpServlet { //서블릿은 HttpServlet이라는걸 상속받아야한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//이 서블릿이 호출되면 이 service 메소드가 실행된다, 오버라이드 해준다.
System.out.println("HelloServlet.service");//soutm하면 메소드명을 출력해줌
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username"); // 서블릿 request의 getParameter("파라미터이름")으로 파라미터값을 꺼내올수있다.
System.out.println("username = " + username);
response.setContentType("text/plain"); //contentType설정 , 헤더에 들어간다.
response.setCharacterEncoding("utf-8"); //보낼 문자정보를 알려줘야한다. , 헤더에 들어간다.
response.getWriter().write("hello "+username);//http메시지 바디에 메시지를 넣는다.
}
}
서블릿response객체를 이용해서 헤더와 바디를 채워줬다. 그리고 다시 url를 호출해보았다.
F12(개발자도구)를 이용해서 자세히 확인가능하다.
개발할때 편하게 http요청메시지를 보고싶을때 (HTTP 요청 메시지 로그로 확인하기)
application.properties에 다음과 같은 코드 추가
logging.level.org.apache.coyote.http11=debug
서버 재시작후 url호출 해보면.
서블릿 컨테이너 동작 방식
내장 톰캣 서버 생성
스프링부트가 내장 톰캣 서버를 띄워준다.
톰캣서버는 내부에 서블릿 컨테이너를 가지고있다. (톰캣 == was) was는 webserver + 서블릿 컨테이너
전체적인 구조!!
서블릿컨테이너를 통해서 서블릿 객체를 생성해준다(서블릿컴포넌트스캔으로 자동적으로 생성)
이렇게 helloServlet이 서블릿컨테이너에 존재하게됬을때
url호출을 하면 웹브라우저가 http요청메시지를 만들어서 서버에 전달한다.
1.url이 호출되게되면 웹브라우저가 http요청메시지를 만들어서 서버에 전달한다.
2.http요청메시지를 기반으로 서블릿컨테이너는 서블릿request객체를 생성한다.
내용이 비어있지만 서블릿response객체도 서블릿컨테이너가 생성한다.
3.http요청메시지에 있는 url에 맞는 서블릿객체를 쓰레드가 호출한다.
서블릿객체안에 있는 service메소드(비즈니스 로직)에 서블릿request와 서블릿response객체를 전달해서 실행시켜준다.
4.비즈니스로직이 끝나면 서블릿reponse객체를 서블릿컨테이너에 넘기고
5.서블릿컨테이너는 서블릿reponse객체를 이용하여 http응답메시지를 생성하고 클라이언트에 전달한다.
웰컴페이지 추가
index페이지와 연결되면서, 공부한 내용을 쉽게 확인할수 있게 만든 basic.html도 추가한다.
localhost:8080 url를 호출하게되면 다음과 같이 index.html의 내용이 보인다.
저 하이퍼링크를 누르면 basic.html로 이동한다.
서블릿을 상속하고, 서블릿 이름과 url를 매핑해서 서블릿클래스를 만들었다.
스프링부트가 올라갈때 서블릿객체를 만들어준다 (싱글톤)
url이 호출되게되면 웹브라우저가 http요청메시지를 만들어서 서버에 전달한다.
http요청메시지를 기반으로 서블릿컨테이너는 서블릿request객체를 생성한다.
내용이 비어있지만 서블릿response객체도 서블릿컨테이너가 생성한다.
http요청메시지에 있는 url에 맞는 서블릿객체를 쓰레드가 호출한다.
서블릿객체안에 있는 service메소드(비즈니스 로직)에 서블릿request와 서블릿response객체를 전달해서 실행시켜준다.
비즈니스로직이 끝나면 서블릿reponse객체를 서블릿컨테이너에 넘기고
서블릿컨테이너는 서블릿reponse객체를 이용하여 http응답메시지를 생성하고 클라이언트에 전달한다.
'인프런 > 스프링 MVC 1편' 카테고리의 다른 글
6)스프링 MVC (구조이해),핸들러 매핑과 핸들러 어댑터,뷰 리졸버 (0) | 2023.01.18 |
---|---|
5)MVC 프레임워크 만들어보기(리팩토링하면서 버전업 v1~v5) (0) | 2023.01.17 |
4)서블릿,JSP,MVC패턴 적용 (0) | 2023.01.16 |
3)HttpServletRequest,HttpServletResponse (0) | 2023.01.15 |
1)웹서버,웹 어플리케이션 서버,웹 시스템 구성,서블릿,멀티스레드,서버사이드 렌더링,서버 사이드 렌더링 (0) | 2023.01.13 |
댓글