Spring 02 (23.04.07)

Jane·2023년 4월 7일
0

IT 수업 정리

목록 보기
100/124

1. Spring MVC Controller - View

1-1. 테스트

TestController.java

package edu.global.ex.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TestController {

	@GetMapping("/test") // test로 진입하면
	public String test() {
		return "test"; // test.jsp 실행
	}

	@GetMapping("/test2") // test2로 진입하면
	public String test2() {
		return "test/test2"; // test 폴더 밑의 test2.jsp 실행
	}
    	
    @GetMapping("/test/test3") // test/test3로 진입하면
	public String test3() {
		return "test/test3"; // test 폴더 밑의 test3.jsp 실행
	}
    
    @RequestMapping("/test4") // test4로 진입하면
	public String test4() {
		return "test/test4"; // test 폴더 밑의 test4.jsp 실행
	}
}
  • 각 페이지에 맞춰 jsp 페이지를 만든다.
  • @GetMapping (Spring 4 버전부터 지원), @RequestMapping (초기부터 지원)

BoardController.java

package edu.global.ex.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/board")
@Controller
public class BoardController {
	
	@GetMapping("/")
	public String main() {
		return "board/main";
	}
	
	@GetMapping("/content")
	public String content() {
		return "board/content";
	}

}

  • src/webapp/WEB-INF/view/ board/ 밑에 경로에 맞게 jsp를 만든다.
  • 접속 : localhost:8282/board/(내용)

1-2. JSP에 데이터 전달하기

BoardController.java

package edu.global.ex.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/board")
@Controller
public class BoardController {

/* 이어서 작성 */

	@GetMapping("/content_view")
	public String content_view(Model model) {
		model.addAttribute("id", 30);
		model.addAttribute("pw", 1234);
		return "board/content";
	}

	@GetMapping("/reply")
	public ModelAndView model_view() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("id", 50);
		mv.setViewName("board/reply");

		return mv;
	}

}

Content.jsp (경로에 맞게 작성)


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>content</title>
</head>
<body>
	게시판 콘텐츠 페이지 입니다.<br>
	${id}<br>	${pw}<br>
</body>
</html>

2. Spring으로 폼 데이터 다루기

GradeController.java

package edu.global.ex.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/grade")
@Controller
public class GradeController {

	@GetMapping("/")
	public String kem_form() {
		return "kem_form";
	}

}

kem_form.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>KEM_Form</title>
<style>
form {
	width: 250px;
	border: 1px solid #333;
	padding: 20px;
}
</style>
</head>
<body>
	<form action="/grade/total" method="get">
		국어 : <input type="text" name="kor" /><br />
		영어 : <input type="text" name="eng" /><br />
		수학 : <input type="text" name="math" /><br />
		<button type="submit">입력</button>
		<button type="reset">취소</button>
	</form>
</body>
</html>

grade.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
총점 : ${ total }<br />
평균 : ${ avg }<br />
</body>
</html>
  • post 방식은 405 Error가 나온다!

    GradeController.java (@PostMapping 이 들어간 함수 추가)

	@PostMapping("/total")
	public String kem_form_post(HttpServletRequest request, Model model) {
		int kor = Integer.valueOf(request.getParameter("kor"));
		int eng = Integer.valueOf(request.getParameter("eng"));
		int math = Integer.valueOf(request.getParameter("math"));
		int total = kor + eng + math;
		double avg = total / 3.0;
		
		model.addAttribute("total", total);
		model.addAttribute("avg", avg);
		
		return "grade";
	}
  • form의 속성을 method="post"로 수정하고 실행해본다.

3. 데이터 커맨드 객체 다루기

  • lombok에서 제공하는 기능들
    • @Getter : Getter 함수를 만들지 않아도 컴파일할 때 Getter 함수를 만들어준다.
    • @Setter : Setter 함수를 만들지 않아도 컴파일할 때 Setter 함수를 만들어준다.
    • @NoArgsConstructor : Parameter가 없는 Default Constructor를 생성한다.
    • @AllArgsConstructor : Parameter가 모두 있는 Default Constructor를 생성한다.
    • @ToString : toString()을 만들어준다.
    • @Data : 기본적인 함수들을 제공해주는 어노테이션

3-1. 국영수 총점 평균 학점

GradeVO.java

package edu.global.ex.vo;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class GradeVO {
	private int kor;
	private int eng;
	private int math;

	public int getTotal() {
		return kor + eng + math;
	}

	public double getAvg() {
		return getTotal() / 3.0;
	}

	public char getGrade() {
		char ch = '가';
		if (getAvg() >= 90) {
			ch = '수';
		} else if (getAvg() >= 80) {
			ch = '우';
		} else if (getAvg() >= 70) {
			ch = '미';
		} else if (getAvg() >= 60) {
			ch = '양';
		} else {
			ch = '가';
		}
		return ch;

	}
}

GradeController.java

	@PostMapping("/total")
	public String kem_form_post(HttpServletRequest request, Model model) {
		int kor = Integer.valueOf(request.getParameter("kor"));
		int eng = Integer.valueOf(request.getParameter("eng"));
		int math = Integer.valueOf(request.getParameter("math"));
		
		GradeVO grade = new GradeVO(kor, eng, math);
		
		model.addAttribute("grade", grade);
		
		return "grade";
	}

grade.jsp (출력하는 결과 화면을 바꾼다.)


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
	<h2>camelCase 출력</h2>
	총점 : ${ grade.getTotal() }
	<br /> 평균 : ${ grade.getAvg() }
	<br /> toString : ${ grade.toString() }
	<br /> 학점 : ${ grade.getGrade() }
	<hr />
	<h2>parameter 출력</h2>
	총점 : ${ grade.total }
	<br /> 평균 : ${ grade.avg }
	<br /> 학점 : ${ grade.grade }
<br />
</body>
</html>
  • Grade 객체의 toString : GradeVO(kor=80, eng=70, math=90)

3-2. 더 간략화하기

GradeController.java (함수 추가)

	@PostMapping("/total2")
	public String kem_form_post2(GradeVO grade, Model model) {
				
		model.addAttribute("grade", grade);
		
		return "grade";
	}
  • Default Constructor가 없으면 에러!
profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글