본문 바로가기
IT/Spring

Java Framework - Spring(4) : MVC 모델

by uzzing' 2022. 5. 19.

Spring MVC

MODEL 1 아키텍쳐 구조

- Model 기능의 JavaBeans는 DAO 와 VO 클래스를 의미

- JSP에서 Controller + View 기능을 모두 담당

- JSP에서 컨트롤에 해당하는 JAVA 코드

// 1. 사용자 입력정보 추출
String id = request.getParameter("id");
String password = request.getParameter("password");

// 2. DB 연동 처리
UserVO vo = new UserVO();
vo.setId(id);
vo.setPassword(password);

UserDAO userDAO = new UserDAO();
UserVO user = userDAO.getUser(vo);

// 3. 화면 이동
ModelAndView mav = new ModelAndView();
if (user != null) {
    response.sendRedirect("getBoardList.do");
} else {
    response.sendRedirect("login.jsp");
}

 

MODEL 2 아키텍쳐

- Model 기능 : DAO, VO 클래스

- View 기능 : JSP 페이지

- Controller 기능 : Servlet 클래스

 

컨트롤러 구현하기 

1. 서블릿 클래스 생성 : WEB-INF/web.xml 파일에 작성하면, 서블릿 컨테이너가 읽어들이며 객체 생성

2. 컨트롤 기능의 서블릿 작성 : DispatcherServlet 클래스에 service 메소드 정의

3. 컨트롤 분리 : JSP 에서 컨트롤에 해당하는 JAVA 코드를 이동. action 의 속성값은 *.do 로 수정

- DispatcherServlet 이 생성되는 시기는 .do로 요청이 들어올 때 서블릿 컨테이너가 생성 및 service를 호출함.

 

브라우저에서 요청했을 때의 실행되는 순서

1. 클라이언트의 "/login.do" 요청을 받으면 DispatcherServlet가 생성된다.

2. DispatcherServlet은 UserDAO 객체를 이용하여 글 목록을 검색한다.

3. 검색된 글 목록을 세션에 등록하고

4. login.jsp 화면을 요청하면,

5. login.jsp는 세션에 저장된 글 목록을 꺼내어 목록 화면을 구성한다.

6. 마지막으로 이 응답 화면이 브라우저에 전송된다.

 

스프링 MVC

- 톰캣 서버에 의해 서블릿 컨테이너 생성

→ 브라우저가 .do 를 호출하면 서블릿 컨테이너가 DispatcherServlet(Front Controller) 생성

→ DispatcherServlet 이 스프링 컨테이너 생성

→ 스프링 컨테이너가 xml 파일을 참고하여 HandlerMapping, Controller 등 생성

 

총 2개의 컨테이너가 존재

  • 서블릿 컨테이너는 톰캣 서버가 생성 → web.xml 로드 → .do 요청으로 디스패처서블릿 생성
  • 스프링 컨테이너는 디스패처 서블릿이 생성 → action-servlet.xml 로드

 

어노테이션 기반의 스프링 MVC

- 모든 컨트롤러 클래스의 기능을 한줄로 표현 가능해진다.

- @Controller 어노테이션 : <bean> 등록 대신 Contoller 객체로 변환처리한다. POJO 스타일의 클래스로 구현하려면 implement Controller 제거를 하고, 매개변수, 리턴타입 등을 수정한다.

- @ReqiestMapping 어노테이션 : '/login.do' 요청에 대해서 LoginContoller 의 login 메소드를 실행하기 위해서 매핑을 시켜줘야 한다. 

@Controller
public class LoginController {

    @RequestMapping(value="/login.do")
    public String login(UserVO vo, UserDAO userDAO) {
        if(userDAO.getUser(vo) != null) return "forward:getBoardList.do";
        else return "login";    
    }
}

- Controller 는 입력 정보를 추출하여 VO 객체에 저장하고, VO 객체를 인자로 전달하여 처리한다. Controller 메소드 매개변수로 받은 VO 객체를 Command 객체라고 한다.

- 이때 VO 클래스의 setter 메소드명이 JSP의 name과 동일해야한다. 

JSP
<input type="texe" name="id">

VO 클래스
public class UserVO {
    ...
    public void setId(String id) {
        this.id = id;
    }
    ...
}

 

반응형

댓글