일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다형성
- 형변환
- Login with OAuth Authentication
- 추상클래스
- Random
- 상속예제
- 전체
- full text indexing
- 상속
- 전체텍스트
- angular2
- 자바 야구게임
- 페이징
- 25가지 효율적인 sql작성법
- 가변인자
- 로또
- 자바
- 단축키
- 전자정부
- 이클립스
- 스프링
- 야구게임
- Full text
- jquery
- IBatis procedure
- 다운캐스팅
- Validations
- while
- 업캐스팅
- Today
- Total
nalaolla
@Controller 본문
패키지: org.springframework.stereotype
버전: spring 2.5
spring MVC의 Controller 클래스 선언을 단순화시켜준다. 스프링 컨트롤러, 서블릿을 상속할 필요가 없으며, @Controller로 등록된 클래스 파일에 대한 bean을 자동으로 생성해준다.
Controller로 사용하고자 하는 클래스에 @Controller 어노테이션을 명시하면 component-scan으로 자동 등록된다.
<context:component-scan base-package="com.*"/> | cs |
package com.test; import org.springframework.stereotype.Controller; @Controller public class SpringTest { //... } | cs |
컨트롤러 메서드의 파라미터 타입
파라미터 타입 | 설명 |
HttpServletRequest, HttpServletResponse, HttpSession | Servlet API |
java.util.Locale | 현재 요청에 대한 Locale 정보 |
InputStream, Reader | 요청 컨텐츠에 직접 접근할 때 사용 |
OutputStream, Writer | 응답 컨텐츠를 생성할 때 사용 |
@PathVariable 어노테이션 적용 변수 | URL 템플릿 변수에 접근할 때 사용 |
@RequestParam 어노테이션 적용 변수 | HTTP 파라미터와 매핑 |
@RequestHeader 어노테이션 적용 변수 | HTTP 헤더 매핑 |
@CookieValue 어노테이션 적용 변수 | HTTP 쿠키 매핑 |
@RequestBody 어노테이션 적용 변수 | HTTP RequestBody에 접근할 때 사용. HttpMessage Converter를 이용해 RequestBody 데이터를 해당 타입으로 변환한다. |
Map, Model, ModelMap | 뷰에 전달할 모델 데이터를 설정할 때 사용 |
커맨드 객체 | HTTP 요청 파라미터를 저장한 객체, 기본적으로 클래스 이름을 모델명으로 사용. |
Errors, BindingResult | HTTP 요청 파라미터를 커맨드 객체에 저장한 결과. 커맨드 객체를 위한 파라미터 바로 다음에 위치한다. |
SessionStatus | 폼 처리를 완료 했음을 처리하기 위해 사용. @SessionAttribute를 명시한 session 속성을 제거하도록 이벤트를 발생시킨다. |
컨트롤러 메서드의 파라미터 타입 사용 예시 보기
컨트롤러 메서드의 리턴 타입
리턴 타입 | 설명 |
ModelAndView | 뷰 정보 및 모델 정보를 담고 있는 ModelAndView 객체 |
Model | 뷰에 전달할 객체 정보를 담고 있는 Model을 리턴한다. 이때 뷰 이름은 요청 URL로부터 결정된다. (RequestToViewNameTranslator를 통해 뷰 결정) |
Map, ModelMap | 뷰에 전달할 객체 정보를 담고 있는 Map 혹은 ModelMap을 리턴한다. 이때 뷰 이름은 요청 URL로부터 결정된다. (RequestToViewNameTranslator를 통해 뷰 결정) |
String | 뷰 이름을 리턴한다. |
View 객체 | View 객체를 직접 리턴. 해당 View 객체를 이용해서 뷰를 생성한다. |
void | 메서드가 ServletResponse나 HttpServletResponse 타입의 파라미터를 갖는 경우 메서드가 직접 응답을 처리한다고 가정한다. 그렇지 않을 경우 요청 URL로부터 결정된 뷰를 보여준다. (RequestToViewNameTranslator를 통해 뷰 결정) |
@ResponseBody 어노테이션 적용 | 메서드에서 @ResponseBody 어노테이션이 적용된 경우, 리턴 객체를 HTTP 응답으로 전송한다. HttpMessageConverter를 이용해서 객체를 HTTP 응답 스트림으로 변환한다. |
ModelAndView 객체
View와 Model 정보를 모두 포함한 객체를 리턴하는 경우
@RequestMapping(params = "param=addView") public ModelAndView addProductView() { ModelAndView mnv = new ModelAndView("/jsp/product/productForm.jsp"); // mnv.setViewName("/jsp/product/productForm.jsp"); mnv.addObject("product", new Product()); return mnv; } | cs |
Map, ModelMap
Web View로 전달할 데이터만 리턴하는 경우
@RequestMapping("/productList.do") public Map getProductList() { List productList = productService.getProductList(); ModelMap map = new ModelMap(productList); //productList가 "productList"라는 이름으로 저장됨. return map; } | cs |
여기서 View에 대한 정보를 명시적으로 리턴하지는 않았지만, 내부적으로 View name은 RequestToViewNameTranslator에 의해서 입력된 HTTP Request를 이용하여 생성된다. 예를 들어 DefaultRequestToViewNameTranslator 는 입력된 HTTP Request URI를 변환하여 View name을 다음과 같이 생성한다.
http://localhost:8080/test/display.do -> 생성된 View name: 'display'
http://localhost:8080/test/admin/index.do -> 생성된 View name: 'admin/index'
위와 같이 자동으로 생성되는 View name에 'jsp/'와 같이 prefix를 붙이거나 '.jsp' 같은 확장자를 덧붙이고자 할 때는 아래와 같이 속정 정의 XML(xxx-servlet.xml)에 추가하면 된다.
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"> <property name="prefix" value="jsp/"/> <property name="suffix" value=".jsp"/> </bean> | cs |
Model
Web View로 전달할 데이터만 리턴하는 경우Model 은 Java-5 이상에서 사용할 수 있는 인터페이스이다. 기본적으로 ModelMap과 같은 기능을 제공한다. Model 인터페이스의 구현클래스에는 BindingAwareModelMap 와 ExtendedModelMap 이 있다. View name은 위에서 설명한 바와 같이 RequestToViewNameTranslator에 의해 내부적으로 생성된다.
@RequestMapping("/productList.do") public Model getProductList() { List productList = productService.getProductList(); ExtendedModelMap map = new ExtendedModelMap(); map.addAttribute("productList", productList); return map; } | cs |
String
View name만 리턴하는 경우:
@RequestMapping(value = {"/addProduct.do", "/updateProduct.do" }) public String updateProduct(Product product, SessionStatus status) throws Exception { return "/listProduct.do"; } | cs |
void
메서드 내부에서 직접 HTTP Response를 직접 처리하는 경우. 또는 View name이 RequestToViewNameTranslator에 의해 내부적으로 생성되는 경우:
@RequestMapping("/addView.do") public void addView(HttpServletResponse response) { // 중략 // response 직접 처리 } @RequestMapping("/addView.do") public void addView() { // 중략 // View name이 DefaultRequestToViewNameTranslator에 의해서 내부적으로 'addView'로 결정됨. } | cs |
@ResponseBody
메서드에서 @ResponseBody 어노테이션이 적용된 경우 해당 값을 HTTP ResponseBody로 전송한다. HttpMessageConverter를 이용해서 객체를 HTTP 응답 스트림으로 변환한다.
'SPRING' 카테고리의 다른 글
@RequestParam (0) | 2016.05.31 |
---|---|
@ModelAttribute (0) | 2016.05.31 |
@RequestMapping (0) | 2016.05.31 |
Spring Framework: annotation 정리 (0) | 2016.05.31 |
spring batch framework reference자료 (0) | 2016.05.26 |