강의 따라가던 중에 기억하고 싶은 것이 있어서 남긴다.
작동은 다음과 같다.
/plusform
으로 요청하면 숫자 두개를 제출할 수 있는 화면을 출력한다.plusform.jsp
에 있다. 컨트롤러에서 이름을 넘겨서 그 jsp 파일을 뷰로 보여준다./plus
URL로 POST 방식으로 서버에 전달한다.PlusController.java
의 @PostMapping(path = "/plus")
이거 밑의 메소드 plus
에서 처리가 된다.자세한 것은 주석참고
plusform.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="plus">
<!-- POST 방식으로 /plus URL에 보냄 -->
value1 : <input type="text" name="value1"><br>
value2 : <input type="text" name="value2"><br>
<input type="submit" value="확인">
</form>
</body>
</html>
PlusController.java
package kr.or.connect.mvcexam.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
// 컨트롤러의 경우 애노테이션 필수~~
@Controller
public class PlusController {
// 겟매핑, 포스트매핑
@GetMapping(path = "/plusform")
public String plusform() {
return "plusForm";
// 이름을 WebMvcContextConfiguration 의 뷰리졸버한테 넘김
// 뷰리졸버에서 이름가지고 "이름".jsp 이거를 뷰로 보여줌.
}
@PostMapping(path = "/plus")
public String plus(@RequestParam(name = "value1", required = true) int value1,
@RequestParam(name = "value2", required = true) int value2, ModelMap modelMap) {
// @RequestParam : 리퀘스트 스코프의 변수라는 거
// plusForm.jsp에서 넘어온 "value1"이름이라는 거를 int value1에 넣어주자. 이런뜻
int result = value1 + value2;
// request scope에 넣어서 넘겨줌. required 이거는 필수인지아닌지 여부
modelMap.addAttribute("value1", value1);
modelMap.addAttribute("value2", value2);
modelMap.addAttribute("result", result);
// 바로 setAttiribute 할수도 있지만, 종속을 피하기 위해 Spring의 modelMap 객체를 받아서 거기에 넣음
// modelMap 이 알아서 넣어줌. 이외에는 Model객체, ModelandView 등등 있음.
// 맵이니까 파라미터가 키, 밸류 이렇게 되는거임.
return "plusResult";
}
}