728x90
반응형
스프링 부트 환경에서 서블릿을 등록하고 사용해보자.
- 스프링 부트 서블릿 환경 구성
- @ServletComponentScan
- 스프링 부트가 서블릿을 직접 등록해서 사용할 수 있도록 해준다.
- @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)
- "text/plain", "utf-8"로 등록한 ContentType의 정보가 잘 전달됨
- connection 등의 정보은 톰캣 서버가 자동으로 만들고, Accept는 웹 브라우저가 만드는 정보
- HTTP 요청 메시지 로그로 확인하기
- application.properties 파일에 다음 설정을 추가
logging.level.org.apache.coyote.http11=debug
- 서버를 다시 시작하고, 요청해보면 서버가 받은 HTTP 요청 메시지를 출력하는 것을 확인할 수 있다. (개발자 도구에서 확인했던 헤더 정보들)
서블릿 컨테이너의 동작 방식을 알아보자.
- 내장 톰캣 서버 생성
- 스프링 부트를 실행하면 스프링 부트가 내장 톰캣 서버를 생성한다. 톰캣서버는 내부에는 서블릿 컨테이너 기능이 있고, 이 서블릿 컨테이너를 통해 서블릿을 생성한다. (서블릿 컨테이너에 helloServlet이 생성된다.)
- get 방식에 "/hello?username=world"라고 치면, 웹 브라우저가 다음과 같은 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)
※ 파일>설정>gradle에서
intelliJ가 아닌 Gradle로 실행 (intelliJ로 실행하면 에러난다)
728x90
반응형
'Spring Tutorial' 카테고리의 다른 글
[스프링 MVC 9] 서블릿: HttpServletRequest 기본 사용법 (0) | 2023.07.18 |
---|---|
[스프링 MVC 8] 서블릿: HttpServletRequest (0) | 2023.07.17 |
[스프링 MVC 6] 서블릿: 프로젝트 생성 (0) | 2023.07.17 |
[스프링 MVC 1] 웹 애플리케이션 이해: 웹 서버, 웹 애플리케이션 서버 (1) | 2023.07.16 |
[스프링 MVC 0] [스프링 MVC 백엔드 웹 개발 핵심 기술, 활용 기술] (0) | 2023.07.16 |