728x90
반응형
이전 실습에서는 각각의 어노테이션이나 설정 파일들이 어떤 의미를 가지는지 살펴봤다면,
이번 실습에서는 실제로 컨트롤러가 어떻게 사용되는지 살펴보기
Controller작성 실습 1/3
- 웹 브라우저에서 http://localhost:8080/mvcexam/plusform 이라고 요청을 보 내면 서버는 웹 브라우저에게 2개의 값을 입력받을 수 있는 입력 창과 버튼이 있는 화면을 출력한다.
- 웹 브라우저에 2개의 값을 입력하고 버튼을 클릭하면 http://localhost:8080/mvcexam/plus URL로 2개의 입력값이 POST방식으로 서버에게 전달한다. 서버는 2개의 값을 더한 후, 그 결과 값을 JSP에게 request scope으로 전달하여 출력한다.
jsp file 생성
/src/main/java/webapp/WEB-INF/views에 생성
1. plusFrom.jsp : 입력 2개를 받는 내용
전달할 내용을 request scope에 넣음
<body>
<!-- form 태그로 url과 action을 지정하면 이 url로 서버에 요청 -->
<form method="post" action="plus">
value1 : <input type="text" name="value1"><br>
value2 : <input type="text" name="value2"><br>
<input type="submit" value="확인">
</form>
</body>
2. plusResult.jsp : plus 요청을 받았을 때 처리할 jsp 파일
request scope에서 해당 내용을 가져옴
<body>
${value1} 더하기 ${value2} (은/는) ${result} 입니다.
</body>
3. plusController.java
패키지 생성
경로 /src/main/java
이름 kr.or.connect.mvcexam.controller
package kr.or.connect.mvcexam.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PlusController {
// 1. plusfrom 요청에 대해 - GET - @GetMapping
@GetMapping(path="/plusform")
public String plusform() {
return "plusForm";
}
// 현재는 간단한 내용만 뷰로 보여주기 때문에 뷰가 아닌 뷰 이름만 넘길 거라 String 으로 리턴
// 그 이름이 getInternalResourceViewResolver()로 가서 전체 경로를 완성하게 됨
}
4. 중간 테스트
/plusform 경로 실행해보면 plusForm.jsp 내용이 뜸
5. plusController.java 에 추가
// 2. plus 요청에 대해 - POST - @PostMapping
@PostMapping(path="/plus")
public String plus(@RequestParam(name = "value1", required = true) int value1,
@RequestParam(name = "value2", required = true) int value2, ModelMap modelMap) {
// ModelMap 객체 : HttpServletRqeust에서 request scope에 setattribute하면 거기에 종속됨
// 그래서 Spring이 제공하는 이 객체에 넣어줌
// Spring이 이 부분을 알아서 request scope에 맵핑 시켜줌
// 이 객체 외에도 Model, ModelAndView 객체 등 다양하게 사용 가능
int result = value1 + value2;
modelMap.addAttribute("value1", value1);
modelMap.addAttribute("value2", value2);
modelMap.addAttribute("result", result);
return "plusResult"; // view resolver에 의해 plusResult.jsp 뷰로 이어짐
}
6. 테스트
프로젝트 우클릭 -> Run on Server
앞으로 다루게 될 것들은 빨간색으로 표시
Spring MVC가 지원하는 Controller메소드 인수 타입
- javax.servlet.ServletRequest
- javax.servlet.http.HttpServletRequest
- org.springframework.web.multipart.MultipartRequest
- org.springframework.web.multipart.MultipartHttpServletRequest
- javax.servlet.ServletResponse
- javax.servlet.http.HttpServletResponse
- javax.servlet.http.HttpSession
- org.springframework.web.context.request.WebRequest
- org.springframework.web.context.request.NativeWebRequest
- java.util.Locale
- java.io.InputStream
- java.io.Reader
- java.io.OutputStream
- java.io.Writer
- javax.security.Principal
- java.util.Map
- org.springframework.ui.Model
- org.springframework.ui.ModelMap
- org.springframework.web.multipart.MultipartFile
- javax.servlet.http.Part
- org.springframework.web.servlet.mvc.support.RedirectAttributes
- org.springframework.validation.Errors
- org.springframework.validation.BindingResult
- org.springframework.web.bind.support.SessionStatus
- org.springframework.web.util.UriComponentsBuilder
- org.springframework.http.HttpEntity<?>
- Command 또는 Form 객체
Spring MVC가 지원하는 메소드 인수 애노테이션
- @RequestParam
- @RequestHeader
- @RequestBody
- @RequestPart
- @ModelAttribute
- @PathVariable
- @CookieValue
자주 사용하게 될 어노테이션 살펴보기
@RequestParam
- Mapping된 메소드의 Argument에 붙일 수 있는 어노테이션
- @RequestParam의 name에는 http parameter의 name과 맵핑
- "HTML form 태그에 input 상자 속 name" 과 맵핑되어 지정된 name에 있는 값을 꺼냄
- @RequestParam(name = "value1", required = true) int value1
- @RequestParam의 required 속성은 필수인지 아닌지 판단
@PathVariable
- URL path에 "?변수명=값" 형태로 넘어온 값을 받기 위한 어노테이션
- @RequestMapping의 path에서 변수명을 입력받기 위한 place holder가 필요함
- place holder의 이름과 PathVariable의 name 값과 같으면 mapping 됨
- required 속성은 default true 임
- 사용자가 넣어준 이름에 따라 Spring이 대신 알아서 맵핑해주기에
- 넣어준 이름하고, 메소드 파라미터에 넣은 변수명이 일치해야 값이 채워짐
@RequestHeader
- 요청 정보의 헤더 정보를 읽어들 일 때 사용
- @RequestHeader(name="헤더명") String 변수명
String 대신 리턴할 수 있는 것들
Spring MVC가 지원하는 메소드 리턴 값
- org.springframework.web.servlet.ModelAndView
- org.springframework.ui.Model
- java.util.Map
- org.springframework.ui.ModelMap
- org.springframework.web.servlet.View
- java.lang.String
- java.lang.Void
- org.springframework.http.HttpEntity<?>
- org.springframework.http.ResponseEntity<?>
- 기타 리턴 타입
728x90
반응형
'Web > Java+Spring' 카테고리의 다른 글
Layered Architecture (0) | 2021.06.07 |
---|---|
Spring MVC - Controller 작성 실습 3 (0) | 2021.06.07 |
Spring MVC - Controller 작성 실습 1 (0) | 2021.06.07 |
Spring MVC (0) | 2021.06.04 |
Spring JDBC - DTO/DAO (0) | 2021.06.02 |