Spring_0817 수업

인삼주·2023년 8월 17일
0

spring

목록 보기
3/22
package kr.or.ddit.book.web;

import java.util.Map;

import javax.inject.Inject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.book.service.IBookService;

/*
 *  @Controller 어노테이션이 있는 클래스는 스프링이 브라우저의 요청(request)을 받아들이는 컨트롤러라고 인지해서
 *  자바 빈(Java Bean)으로 등록해서 관리한다.
 */

@Controller
@RequestMapping("/book")
public class BookInsertController {
	
	//컨트롤러는 페이지를 리턴한다. 어떤 기능이 필요하다면 서비스에게 요청한다.
	//중급프로젝트때까지는 싱글톤패턴을 이용해 getInstance() 사용했지만 이제는 사용하지 않는다.
	//의존성주입 	@Autowired 또는 @Inject 을 사용하면 알아서 해준다. 백신~!~!~
	
	@Autowired
	private IBookService service;
	
	/*
	 *	@RequestMapping
	 * - 요청 URL을 어떤 메소드가 처리할 지 여부를 결정
	 * 
	 *  method 속성은 http요청 메소드를 의미한다.
	 *  일반적인 웹 페이지 개발에서 GET 메소드는 데이터를 변경하지 않는 경우에,
	 *  POST 메소드는 데이터가 변경될 경우 사용된다.
	 *  
	 *  ModelAndView는 컨트롤러가 반환할 데이터를 담당하는 모델(Model)과 화면을 담당하는 뷰(View)의 경로를 합쳐놓은 객체다.
	 *  ModelAndView는 생성자에 문자열 타입 파라미터가 입력되는 뷰의 경로라고 간주한다.
	 *  
	 *  뷰의 경로를 'book/form'과 같은 형태로 전달하는 이유는 요청(request)에 해당하는 url이 mapping되는 화면의 경로 값을
	 *  ViewResolver라는 녀석이 제일 먼저 받는다. 받아서, suffix와 prefix 속성에 의해서 앞에는 '/WEB-INF/views/'를 붙이고
	 *  뒤에는 '.jsp'를 붙여 최종 위치에 해당하는 jsp파일을 찾아준다.
	 *  
	 *  suffix와 prefix 속성은 spring의 servlet-context.xml에서 확인할 수 있다.
	 */
	
	//Model= 데이터  View= 화면 > 데이터와 화면을 가용
	@RequestMapping(value="/form.do", method= RequestMethod.GET)
	public ModelAndView bookForm() {
		//WEB-INF/views/book이라는 폴더안의 form.jsp
		return new ModelAndView("book/form");
	}
	
	/*
	 * 데이터의 변경이 일어나므로 http 메소드는 POST 방식으로 처리
	 * @RequestParam은 HTTP 파라미터를 Map 변수에 자동으로 바인딩한다.
	 * Map 타입의 경우는 @RequsetParam을 붙여야만 HTTP 파라미터의 값을 map안에 바인딩해준다.
	 */
	
	@RequestMapping(value="/form.do", method= RequestMethod.POST)
	public ModelAndView insertBook(@RequestParam Map<String, Object> map) {
		ModelAndView mav = new ModelAndView();
		
// 		이때까지 이렇게 데이터를 받아왔었지만 이제 이렇게 쓰지 않는다~ 
//		String title = request.getParmeter("title");
//		이제는 파라미터에 map생성하면 자동 바인딩해서 넘어온다. (단, @RequestParam을 앞에 꼭 적어야한다)
		
		return mav;
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="${pageContext.request.contextPath}/resources/css/bootstrap.min.css" rel="stylesheet"/>
<title>책 생성하기</title>
</head>
<body>
	<div class="jumbotron">
		<div class="container">
			<h2 class="display-4">책 생성하기</h2>
		</div>
	</div>
	<div class="container">
		<form action="" method="post">
			<div class="row">
				<div class="col-md-12 mb-2">
					<div class="row">
						<div class="col-md-2">
							<label for="title" class="col-form-label">제목</label>
						</div>
						<div class="col-md-10">
							<input type="text" class="form-control" name="title" id="title"/>
						</div>	
					</div>
				</div>
				<div class="col-md-12 mb-2">
					<div class="row">
						<div class="col-md-2">
							<label for="category" class="col-form-label">카테고리</label>
						</div>
						<div class="col-md-10">
							<input type="text" class="form-control" name="category" id="category"/>
						</div>	
					</div>
				</div>
				<div class="col-md-12 mb-2">
					<div class="row">
						<div class="col-md-2">
							<label for="price" class="col-form-label">가격</label>
						</div>
						<div class="col-md-10">
							<input type="text" class="form-control" name="price" id="price"/>
						</div>	
					</div>
				</div>
				<button type="submit" class="btn btn-warning">등록</button>
				<a href="/book/list.do" class="btn btn-primary">목록</a>
			</div>
		</form>
	</div>
</body>
</html>

0개의 댓글