Spring Framework 3.0 MVC(1) 공부하는 것/Spring Framework2012. 4. 29. 15:12
스프링 프레임크를 사용하기 시작한지는, 만 5년 정도 된것 같다. 아니 정확하게 이야기하면 알기 시작한지 5년이다. 그 동안 몇개의 프로젝트에는 적극적으로 사용해왔고, 사용하려고 했었다.
솔루션을 위한 내부의 기반 프레임워크를 개발하기에도, 그 자체만으로도 스프링은 너무 훌륭하기 때문에, Application의 공통 부분을 위한 기능들만을 최적화하고, 정의하는 것 만으로도 노력대비 좋은 결과들을 낼수 있었다. 다 로드존슨 아저씨가 많은 시간을 들여서 갈고 닦고, 발전시킨 노력의 결과들이다.
시간이 흐를수록 큰 조직에서는 코드와 PC와 씨름하기 보다는 수 많은 회의와 씨름을 하는 일이 많아진다. 더군다나 같이 협업하는 사람들이 많아지면, 본인이 원치 않아도 관리자의 길에서 뛰고 있는 모습을 보게된다. 딱 지금의 나의 모습니다.
공부하지 않고, 적절하게 판단하고 선택하고 방향에 대해서 이야기 할 수 있을까?
많은 고민을 하지만, 역시 시간이 절대적으로 부족하다.
요즘은 코드를 보기가 힘들정도로, 공부할 여유가 별로없다.
하지만, 사둔 책이 아깝다는 이유이든, 공부의 재미를 알았다는 이유이든 개발자로 살아가는 한은
꾸준히 배워야한다.
스프링 3.1은 또 다른 변호들을 이야기 할지는 모르겠다. 이전에 책을 보면서 정리한 내용인데 일단 올려놓는다.
[Spring Framework 3.0 - MVC]
· 스프링은 DespatcherServlet과 7개의 Strategy를 기반한 MVC 프레임워크를 제공한다.
· 이중 DespatcherServlet는 가장 기본적이면서도 SpringMVC의 필수적인 기본 Servlet 역할과 스프링의 특징중의 하나인 Light-weight 컨테이너의 역할을 수행한다.
1. @RequestMapping 핸들러 매핑
o @MVC는 메소드 레벨에서 컨트롤러를 작성할 수 있다.
o Annotation은 타입(클래스, 인터페이스)레벨뿐 아니라 메소드 레벨에도 적용 가능함.
o @MVC 핸들러 매핑을 위해서는 DefaultAnnotationHandlerMapping이 필요하다.
o DefaultAnnotationHandlerMapping은 기본 핸들러 이므로 다른 Handler Mapping bean이 명시적으로 등록이 되지 않았다면, 기본으로 사용이 가능하다.
o 만약, 다른 핸들러 매핑 빈이 등록이 되었다면, DefaultAnnotationHandlerMapping 도
명시적으로 등록을 해주어야 사용이 가능하다.
2. Class/Method 결합 Mapping 정보
o DefaultAnnotationHandlerMapping
· @RequestMapping 애노테이션을 활용해서 타입레벨과 메소드 레벨 지원하며
타입레벨을 기본으로 삼고, 메소드 레벨의 어노테이션 정보는 타입레벨의 매핑을 세분화 하는데 사용한다.
o @RequestMapping Annotation
· Spring[] value(): URL 패턴
1. String 배열 타입으로 URL 패턴을 지정해서 사용
2. URL 패턴은 ANT 스타일과 와일드카드를 사용이 가능하다.
· @RequestMapping("/hellow")
· @RequestMapping("/admin/**/user")
· @RequestMapping("/hellow", "/hi")
3. "{ }"를 사용할때는, "{ }"의 위치에 해당하는 내용을 컨트롤러 Method에서 파라메터로 전달받을 수 있다. "{ }"에 들어가는 변수를 "path variable"이라고 부른다.
· @RequestMapping("/user/{userid}")
· RequestMethoe{} method(): HTTP Request Method
1. Request Method는 GET, HEAD, POST, PUT, DELET, OPTIONS, TRACE의 7개의 HTTP 메소드가 정의되어 있다
2. HTTP 메소드를 추가하면 요청 메소드에 따라 다른 메소드를 매핑해 줄 수 있다.
· @RequestMapping(value="/user/add", method=RequestMethod.GET)
3. 정의된 메소드 이외의 사용시 "HTTP 405 - Method Not Allowed"를 받음.
4. 타입레벨에서 URL을 주고 HTTP 요청 메소드를 지정할 경우 URL 생략가능.
· @RequestMapping(method=RequestMethod.GET)
· String[] params(): Request Parameter
1. 이것은 요청 Parameter와 그 값을 비교해서 매핑해 주는 것이다.
2. 같은 URL을 사용하지만, Parameter값에 따라 다른 작업을 할 때 사용한다.
· @RequestMapping(value="/user/edit", params="type=admin")
3. 특정 Parameter 값이 존재하지 않아야 한다는 조건을 둘 경우 사용
· @RequestMapping(value="/user/edit", params="!type")
· String[] header(): HTTP 헤더
1. Header 정보에 따라 매핑이 가능하다.
· @RequestMapping(value="/view", headers = "content-type="text/*")
o Type level 매핑과 Method level 매핑의 결합
· 타입(클래스오 인터페이스)레벨에 붙는 @RequestMapping은 타입내의 모든 매핑용 메소드의 공통 조건을 지정할대 사용한다.
· 메소드 레벨의 매핑은 클래스 레벨의 매핑을 상속한다.
- 컨트롤러가 각각 /user/add, /user/edit, /user/delete URL에 매핑
@RequestMapping("/user")
public class UserController{
@RequestMapping("/add") public String add(){ }
@RequestMapping("/edit") public String edit(){ }
@RequestMapping("/delete") public String delete(){ }
}
2. 타입 레벨의 URL패턴에 *나 **를 사용하여 매핑 가능
· /user/*
· /user/**
· 타입레벨에서 공통의 매핑을 정의하고, 메소드 별로 세분화 해서 사용
o Method 레벨 단독 매핑
· 공통 매핑 조건이 없을 경우, 조건을 주지 않고 메소드 레벨에 정의해서 사용.
· 이렇게 정의하지 않는다면, 클래스 자체가 매핑이 되지 않는다.
· 만약, @Controller 애노테이션을 붙여서 자동 빈 스캔을 사용할 경우는, 클래스 레벨의 @RequestMapping을 생략할 수 있다.
o Type 레밸 단독 매핑
· 클래스 레벨의 URL 패턴이 /*로 끝나는 경우, apthem 레벨의 URL 패턴으로 메소드 이름을 사용할 수 있음.
· 아래는 /user/add와 /user/edit 로 각각 매핑
@RequestMapping("/user/*")
Public class UserController {
@RequestMapping public String add( ) { }
@RequestMapping public String edit( ) { }
}
'공부하는 것 > Spring Framework' 카테고리의 다른 글
Spring RestController 사용시, RequestHeader값 가져오기 (1) | 2019.01.15 |
---|---|
Spring 3.0.0 Release Candidate 1 Released (0) | 2009.09.26 |
SpringSource Tool Suite is Now Free! (0) | 2009.05.10 |
Spring의 Roo Alpha 2에 대하여... (0) | 2009.05.04 |
Spring Dynamic Modules 1.1.3 Released (0) | 2009.02.16 |