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;
}
...
}
'IT > Spring' 카테고리의 다른 글
ViewResolver 적용하기 (0) | 2022.05.30 |
---|---|
포워드(Forward)와 리다이렉트(Redirect) 차이 (0) | 2022.05.26 |
Java Framework - Spring(3) : JDBC (0) | 2022.05.18 |
Java Framework - Spring (2) : DI / AOP (0) | 2022.05.18 |
Java Framework - Spring (1) : 컨테이너 / IoC (0) | 2022.05.16 |
댓글