백엔드
Spring > 서블릿과 jsp 1.서블릿과 컨트롤러 비교
coyojo
2023. 3. 7. 23:58
< 서블릿>
* @WebServlet은 컨틀롤러에서 @Controller + @RequestMapping을 합친것과 같다.
* Controller는 상속을 받지 않지만 Servlet은 HttpServelt을 상속받아야 한다.
* public void service(HttpServletRequest request, HttpServletResponse respose) 과 같이
service에 HttpServletRequest와 HttpServletResponse를 적어줘야한다.
* @ ( annotation)을 클래스에 붙이므로 , 즉 url 맵핑을 클래스 단위로 하기때문에
맵핑 하나당 클래스를 만들어 줘야한다.
@WebServlet("/rollDice2")
public class TwoDiceServlet extends HttpServlet { //단일상속
@Override
public void service(HttpServletRequest request, HttpServletResponse respose)
throws IOExecption {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
< 컨트롤러>
* 상속을 안 받는다.
* 매개변수에 필요한 것만 적으면 된다.
* 컨트롤러는 메소드 단위로 맵핑을 하기때문에 하나의 클래스에 또다른 메서드를 만들기만하면
또 다른 맵핑을 할 수 있다,
@Controller
public class TwoDice {
@RequestMapping("/rollDice")
public void main(HttpServletResponse response) throw IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
< 서블릿의 생명주기 >
@WebServlet("/hello")
public class ServletLifeCycle extends HttpServlet {
// 서블릿 초기화 - 서블릿이 생성 또는 리로딩 때, 단 한번만 수행됨
public void init() throws ServletException {
System.out.println("init()초기화");
}
public void service(HttpServletRequest request, HttpServletResponse response) {
//1. 입력
//2. 처리
//3. 출력
System.out.println("service() 호출");
}
public void destroy() {
// 뒷정리 작업 - 서블릿이 제거( unload) 될 때, 단 한번만 수행됨
}
}
요청하는 서블릿 인스턴스가 존재하지 않으면 1) 서블릿 클래스 로딩 & 인스턴스 생성 --> 2) init() 호출 --->3) service()
요청하는 서블릿 인스턴스가 존재하면 인스턴스 생성없이 바로 service() 호출부터 진행한다.