Spring MVC (5) 지원 모듈, 웹 페이지 작성 실습 3

Minkyeong Kim·2021년 12월 1일
0

[boostcourse] Web-Backend

목록 보기
41/55

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
    • Mapping된 메소드의 Argument에 붙일 수 있는 어노테이션
    • @RequestParam의 name에는 http parameter의 name과 멥핑
    • @RequestParam의 required는 필수인지 아닌지 판단
  • @RequestHeader
    • 요청 정보의 헤더 정보를 읽어들 일 때 사용
    • @RequestHeader(name="헤더명") String 변수명
  • @RequestBody
  • @RequestPart
  • @ModelAttribute
  • @PathVariable
    • @RequestMapping의 path에 변수명을 입력받기 위한 place holder가 필요함
    • place holder의 이름과 PathVariable의 name 값과 같으면 mapping 됨
    • required 속성 default값은 true
  • @CookieValue

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<?>
  • 기타 리턴 타입

실습

1) plusForm.jsp, plusResult.jsp 파일 생성

저번에 만들어두었던 src/main/webapp/WEB-INF/views 경로에 생성

plusForm.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>plus form</title>
</head>
<body>
<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>
</html>

plusResult.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>plus result</title>
</head>
<body>
${value1 } 더하기 ${value2 } 는  ${result } 입니다.
</body>
</html>

2) Controller 생성

kr.or.connect.mvcexam.controller 패키지 생성 후 PlusController 클래스 생성

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() { // view name을 넘겨주어야 함
		return "plusForm"; //요청이 들어왔을때 view name을 viewResolver에 넘김
	}
	
	@PostMapping(path = "/plus")
	public String plus(@RequestParam(name="value1", required= true) int value1, @RequestParam(name = "value2", required = true) int value2, ModelMap modelMap) {
		//@RequestParam에서 name과 일치하는 input의 value를 매핑
		
		// 값 2개를 받아 더함
		int result = value1+value2;
		
		//request scope에 값들을 넣어 jsp로 전달
		modelMap.addAttribute("value1", value1);
		modelMap.addAttribute("value2", value2);
		modelMap.addAttribute("result", result);
	
		// view name을 viewResolver에게 보내 jsp 보여짐
		return "plusResult";
	}
	
}

표현식이 동작하지 않는다면?

web.xml 상단부를 다음과 같이 수정

<!-- servlet 버전 3.1으로 바꿔줌 -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

0개의 댓글