Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- transaction
- 스프링
- Greedy
- spring
- 알고리즘
- 스프링 핵심 원리
- 인프런
- Exception
- 백준
- 자바
- db
- springdatajpa
- Proxy
- AOP
- 김영한
- 스프링 핵심 기능
- Spring Boot
- 그리디
- jpa
- SpringBoot
- Android
- java
- pointcut
- kotlin
- Servlet
- Thymeleaf
- JDBC
- JPQL
- http
- QueryDSL
Archives
- Today
- Total
개발자되기 프로젝트
[서블릿] Hello Servlet 본문
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
'인프런 > [인프런] 스프링 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