Servlet vs Spring
1. Servlet
1) Spring Web MVC
- 스프링 모듈
- Web Service를 만든다.
- MVC 패턴을 사용해서 (Model View Controller)
2. Servlet은 왜 생겻을까?
1) 정적 데이터만 전달하는 Web Server

2) 동적 데이터를 처리하는 CGI

- CGI : Web Server와 프로그램 사이의 규약

- 하지만 CGI는 많은 사용자를 처리하기에는 무리

3) CGI를 보완한 Servlet
- WebContainer : 요청이 들어오면 Thread를 생성하고 Servlet을 실행시킴
- Servelt interface에 따라 Servlet을 관리

2. Servlet의 생명 주기
1) Init
- Servlet Instance 생성 (initalize)
2) Service
- 실제 기능이 수행되는 곳
- abstract class HttpServlet extends Servlet
- HTTP Method(GET, POST, PUT, DELETE)에 따라 doGet(), doPost(), doDelete() 메서드를 호출
- doXXX() : 개발자가 구현
3) Destroy
- Servlet Instance가 사라진다.
- 보통 container가 종료되는 시점에 destroy() 호출
- 특정 servlet 로드/ 언로드 시에도 사용
4)
- 각메서드는 Servlet Container (Tomcat)이 호출해준다.
3. Servlet code
<wep-app>
<servlet>
<servlet-name>member</servlet-name>
<servlet-class>servlets.MemberSerlvet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>member</servlet-name>
<url-pattern>/member</url-pattern>
</servlet-mapping>
</wep-app>
- Web.xml(설정파일) Servlet Mapping
- WAS에게 Servlet 객체 - URL mapping 정보를 알려준다.
public class MemberServlet extends HTTPServlet{
protected voi doPost(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
String userName = request.getParameter("userName")
String password = request.getParameter("password")
String result = doSomething(userName, password);
Stirng htmlResponse = "<html>"
htmlResponse += "<h2>Result: " + result + "</h2>";
htmlResponse += "<html>";
PrintWriter writer = response.getWriter();
writer.println(htmlResponse)
}
}

4. Spring 에서는 Servlet을 어떻게 사용할까?

- 모든 요청이 들어왔을때, Dispatcher Servlet으로 간다.

- 요청에 따라 적절한 Controller을 사용
- 찾는 방법은 스프링 프레임워크에서 제공

- HandlerMapping에서 찾은 Handler(Controller)의 메서드를 호출
- ModelAndView 형태로 바꿔줌
- Data에 해당하는 Model, Data를 넘길 page에 해당하는 View
- 보통 View의 논리적인 이름만 return해줌

- View에 Model(data)를 포함시켜준다.

- View의 이름으로 실제 View 객체를 생성
1) Dispatcher Servlet - Handler Mapping
- Spring Framework에서 제공하는 HandlerMapping
- 어떤 방식의 HandlerMapping을 사용할지 설정파일에 지정
- Servlet을 등록하면 그 Servlet이 사용할 설정파일이 자동으로 등록
1-1) BeanNameHandlerMapping
- Bean 이름과 Url을 Mapping 하는 방식
출처
타미의 Servlet vs Spring
댓글남기기