요청 처리시 사용된 컴포넌트
org.springframework.web.servlet.ModelAndView
- ModelAndView는 Controller의 처리 결과를 보여줄 view와 view에서 사용할 값을 전달하는 클래스이다.
@Configuration
자바컨피그파일이구나 하면서 알려줌
annotation-driven
-> 해당 어노테이션을 인식하라는 설
-> bean 등록
-> ex )
<tx:annotation-driven transaction-manager="transactionManager" />
@Controller
이 클래스가 Controller인지 알려줌.
맵핑을 위해 @RequestMapping 어노테이션을 클래스나 메소드 위에 사용.
요청이 들어왔을때 어떤 URL로 들어온 요청인지를 알아내서
실제로 controller가 처리해야할 내용이 무엇인지 그 컨트롤러에서 구현하고있는메소드가 무엇인지 알아내야함
HTTP요청과 이를 다루기 위한 Controller의 메서드를 연결하는 어노테이션
@RequestMapping("url")
클라이언트 요청(url)에 맞는 클래스 or 메서드를 연결 시켜주는 어노테이션
@RequestMapping("/meber") : ("/member") 라는 url로 POST 방식으로 요청이 들어왔다
실제 URL
[위치에 따른 해석]
- 클래스 레벨 : 공통 주소(프론트 컨트롤러 패턴 지정)
- 메서드 레벨 : 공통 주소 외 나머지 주소
단, 클래스레벨에 @RequestMapping이 존재하지 않는다면
- 메서드 레벨 : 단독 요청 처리 주소
[작성법에 따른 해석]
1) @RequestMapping("url")
-> 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리
2) @RequestMapping(value = "url", method = RequestMethod.GET | POST)
-> 요청 방식에 따라 요청 처리
** 메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우 **
@GetMapping("url") / @PostMapping("url") 사용하는 것이 일반적
(메스드 레벨만 작성 가능!)
@RequestParam
@RequestParam("name속성값") 자료형 변수명
- 클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장
-> 어떤 파라미터를 변수에 저장할지는 "name속성값"을 이용해 지정
[속성]
value : input 태그의 name 속성값 (속성을 하나도 적지 않은 경우의 기본값)
@RequestParam("inputEmail") == @RequestParam(value="inputEmail")
required : 입력된 name 속성값이 필수적으로 파라미터에 포함되어야 되는지를 지정
required=true / required=false (기본값 true)
required = flase일 때 파라미터가 없으면 null
defaultValue : required가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정
** @RequestParam을 생략하지만 파라미터를 얻어오는 방법 **
-> name 속성 값과
파라미터를 저장할 변수 이름을 동일하게 작성!
1
2
3
4
5
6
7
8
9
10
|
@PostMapping(path = "/plus")
public String plus(@RequestParam(name = "value1", required = true) int value1,
// URL 주소가 "/plus" 인 곳에서 파라미터 name이 value1 인 값을 int value1 변수에 넣어줄거다.
@RequestParam(name = "value2", required = true) int value2, ModelMap modelMap)
//파라미터 name이 value2 인 값을 int value2 변수에 넣어줄거다. { int result = value1 + value2;
modelMap.addAttribute("value1", value1);
modelMap.addAttribute("value2", value2);
modelMap.addAttribute("result", result);
return "plusResult";
|
cs |
ModelMap
ex ) Model 등 여러가지 객체가 있다
데이터를 맵 형식(K:V) 형태로 담아 전달하는 용도의 객체
request, session을 대체하는 객체
== req.setAttribute("loginMember", loginMember);
@ModelAttribute
@ModelAttribute VO타입 변수명
-> 파라미터 중 name 속성 값이 VO의 필드와 일치하면
해당 VO 객체의 필드에 값을 세팅
*** @ModelAttribute 를 이용해서 객체에 값을 직접 담는 경우에 대한 주의사항 ***
반드시 필요한 내용!
- VO 기본 생성자
- VO 필드에 대한 Setter
Getter는 JSP - EL 사용 시 반드시 필요!
@PathVariable("value")
URL 경로에 포함되어 있는 값을 변수로 사용할 수 있게하는 역할
-> 자동으로 request scope에 등록됨 -> jsp에서 ${value} EL 작성 가능
요청 자원을 식별하는 경우 사용
- @RequestMapping의 path에 변수명을 입력받기 위한 place holder가 필요함
- place holder의 이름과 PathVariable의 name 값과 같으면 mapping 됨
- required 속성은 default true 임
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Controller
public class GoodsController {
@GetMapping("/goods/{id}")
public String getGoodsById(@PathVariable(name="id") int id,
//id라는 name으로 넘어온 값을 int id변수에 받겠다 @RequestHeader(value="User-Agent", defaultValue="myBrowser") String userAgent,
HttpServletRequest request,
ModelMap model
) {
String path = request.getServletPath();
System.out.println("id : " + id);
System.out.println("user_agent : " + userAgent);
System.out.println("path : " + path);
|
cs |