: 웹 브라우저에서 들어온 사용자 요청을 구현된 메서드에서 처리하고 그 결과를 뷰에 전달하는 스프링의 빈 객체 => 웹 요청을 전달받아 내용 해석 후 요청 처리 가능한 메서드 호출 => 요청 처리 후 사용자에게 결과 반환
스프링 MVC => 사용자 요청(<-웹) => 디스패처 서블릿 => Controller(실제 처리)
(사-URL 요청)http://localhost:8080/BookMarket/books => DispatherServlet =@RequestMapping(value="/books", ...)=> BookController
요청 URL => /books
@Controller --> 컨트롤러 정의
@RequestMapping("/books") --> 요청 매핑 경로 설정
public class BookController { --> 요청 처리 메서드 구현
@Autowired
private BookService bookService;
@GetMapping
public String requestBookList(Model model) {
List<Book> list = bookService.getAllBookList();
model.addAttribute("bookList", list);
return "books"; --> 뷰[&모델] 반환
}
=> 웹 브라우저
컨트롤러 - 일반 자바 X, 웹 브라우저 요청 처리 메서드 포함한 특정 자바 클래스 => @Controller
import org.springframework.stereotype.Controller;
.
.
@Controller
스프링MVC는 컨트롤러 역할 자바 클래스 여러 개 => 디스패처 서블릿이 @Controller 선언된 컨트롤러 전부 스캔
=> 디스패처 서블릿이 인식 가능하도록 컨트롤러, 컨트롤러와 의존 관계인 자바 클래스들 => 스프링 MVC 설정 파일(servlet-context.xml)에 빈 객체로 하나씩 직접 등록해야 함 - 다 하려면 번거로움(Controller--RepositoryImpl--ServiceImpl--...)
==> 컴포넌트 스캔 (<context:component-scan) 사용해서 자동 등록 되도록!
<context:component-scan base-package="패키지 이름" />
<context:component-scan base-package="com.springmvc.*" /> --> 패키지 하위에 있는 컨트롤러 및 의존 관계에 있는 자바 클래스 검색 => 빈 객체로 자동 등록
=> 컨트롤러와 의존 관계에 있는 클래스의 프로퍼티에 선언된 @Autowired(의존 관게에 있는 클래스의 멤버 변수에 대해 Setter() 메서드 대신 선언하는 애너테이션) 인식 X => 프로퍼티의 Setter()메서드도 모두 작성해야 함
forward -> jsp
redirect -> 경로
public class EmployeeController {
// 제어의 역전 IoC(Inversion of Control)
// 의존성 주입 DI(Dependency Injection)
@Autowired
EmployeeService employeeService;
/*
요청URI : /employee/create
요청파라미터 :
요청방식 : get
create.jsp를 forwarding해줘야 함
*/
@RequestMapping(value="/employee/create", method= RequestMethod.GET)
public ModelAndView create() {
// prefix : /WEB-INF/views/employee/create
// suffix : ~~~.jsp
ModelAndView mav = new ModelAndView();
mav.setViewName("employee/create");
return mav;
}
/*
요청URI : /employee/create
요청파라미터 : {eName=개똥이,eAddress=대전,eTelno=010-123-1234,
ePosition=과장,eDept=개발부}
요청방식 : post
EmployeeVO 타입의 employeeVO 매개변수로 파람미터를 받아서 log 출력
*/
@RequestMapping(value="/employee/create",method=RequestMethod.POST)
public ModelAndView createPost(EmployeeVO employeeVO, ModelAndView mav) {
//EmployeeVO(eEmpno=null, eName=1, eAddress=2, eTelno=3
//, ePosition=사원, eDept=개발부)
log.info("createPost->employeeVO : " + employeeVO);
int result = this.employeeService.createPost(employeeVO);
//EmployeeVO(eEmpno=E001..
log.info("createPost->result : " + result);
mav.setViewName("redirect:/employee/detail?eEmpno="+employeeVO.geteEmpno());
return mav;
}
}
타일즈(Tiles)
: 반복되는 부분들을 한 곳에서 관리할 수 있게 도와주는 템플릿 프레임워크