Web/Java+Spring

Spring MVC - Controller 작성 실습 2

WakaraNai 2021. 6. 7. 19:43
728x90
반응형

이전 실습에서는 각각의 어노테이션이나 설정 파일들이 어떤 의미를 가지는지 살펴봤다면,

이번 실습에서는 실제로 컨트롤러가 어떻게 사용되는지 살펴보기

 

Controller작성 실습 1/3

  1. 웹 브라우저에서 http://localhost:8080/mvcexam/plusform 이라고 요청을 보 내면 서버는 웹 브라우저에게 2개의 값을 입력받을 수 있는 입력 창과 버튼이 있는 화면을 출력한다.
  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