스프링 05. Service, Controller 클래스와 VIew 만들기
- 참조 : https://github.com/kwj1270
- Service 클래스 만들기
- /bookapp 위치에 service/book 폴더 생성
- BookService 클래스 생성
123456789101112131415161718192021222324252627282930313233343536package krco.moak.bookapp.service.book;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import krco.moak.bookapp.dao.book.BookDAO;import krco.moak.bookapp.dto.book.Book;@Servicepublic class BookService {@AutowiredBookDAO dao;public int insert(Book dto) {return dao.insert(dto);}public int update(Book dto) {return dao.update(dto);}public int delete(Book dto) {return dao.delete(dto);}public Book getOne(Book dto) {return dao.getOne(dto);}public List<Book> getAll() {return dao.getAll();}}
- 도서 목록 출력 : http://localhost:8080/bookapp/book
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- book_list.jsp
1234567891011121314151617<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page session="false" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>도서 목록</title></head><body>번호 도서명 가격 출판사<c:forEach items="${books}" var="book"><p> ${book.no} ${book.title } ${book.pric } ${book.publ } </p></c:forEach></body></html>
- book_list.jsp
- Controller 클래스 만들기
- /bookapp 위치에 controller/book 폴더 생성
- BookController 클래스 생성
12345678910111213141516171819202122232425262728293031package krco.moak.bookapp.controller.book;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import krco.moak.bookapp.dao.book.BookDAO;import krco.moak.bookapp.dto.book.Book;import krco.moak.bookapp.service.book.BookService;@Controllerpublic class BookController {@AutowiredBookService service;private static final Logger logger = LoggerFactory.getLogger(BookController.class);@RequestMapping(value = "/book", method = RequestMethod.GET)public String home(Model model) {model.addAttribute("books", service.getAll());return "book_list";}}
- 결과 확인 : http://localhost:8080/bookapp/book
- BookApp 프로젝트를 마우스 오른쪽 버튼 클릭 -> Run As -> Run on Server
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- 도서 자세히 보기 : http://localhost:8080/bookapp/book/201900003
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- book_detail.jsp
1234567891011121314151617<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page session="false" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>도서 자세히</title></head><body><p>번호 : ${book.no}</p><p>도서명 : ${book.title }</p><p>가격 : ${book.pric }</p><p>출판사 : ${book.publ }</p></body></html>
- book_detail.jsp
- Controller 클래스 수정
- BookController 클래스 수정
1234567891011121314151617181920212223242526272829303132333435363738394041package krco.moak.bookapp.controller.book;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import krco.moak.bookapp.dao.book.BookDAO;import krco.moak.bookapp.dto.book.Book;import krco.moak.bookapp.service.book.BookService;@Controllerpublic class BookController {@AutowiredBookService service;private static final Logger logger = LoggerFactory.getLogger(BookController.class);@RequestMapping(value = "/book", method = RequestMethod.GET)public String home(Model model) {model.addAttribute("books", service.getAll());return "book_list";}@RequestMapping(value = "/book/{no}", method = RequestMethod.GET)public String detail(@PathVariable int no, Model model) {Book vo = new Book();vo.setNo(no);model.addAttribute("book", service.getOne(vo));return "book_detail";}}
- BookController 클래스 수정
- 결과 확인 : http://localhost:8080/bookapp/book/201900003
- BookApp 프로젝트를 마우스 오른쪽 버튼 클릭 -> Run As -> Run on Server
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- 도서 등록 : http://localhost:8080/bookapp/book/register_form
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- book_register_form.jsp
12345678910111213141516171819202122<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:set var="contextPath" value="${pageContext.request.contextPath}" /><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><div class="container"><form action="${contextPath}/book/register" method="post"><input type="text" placeholder="도서명" name="title" value="" required><!-- name값과 메서드의 매개변수가 이름이 같으면 알아서 넣어줌 --><input type="text" placeholder="가격" name="pric" value="" required><input type="text" placeholder="출판사" name="publ" value="" required><button type="submit">저장하기</button></form></div></body></html>
- book_register_form.jsp
- Controller 클래스 수정
- BookController 클래스 수정
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364package krco.moak.bookapp.controller.book;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import krco.moak.bookapp.dao.book.BookDAO;import krco.moak.bookapp.dto.book.Book;import krco.moak.bookapp.service.book.BookService;@Controllerpublic class BookController {@AutowiredBookService service;private static final Logger logger = LoggerFactory.getLogger(BookController.class);@RequestMapping(value = "/book", method = RequestMethod.GET)public String home(Model model) {model.addAttribute("books", service.getAll());return "book_list";}@RequestMapping(value = "/book/{no}", method = RequestMethod.GET)public String detail(@PathVariable int no, Model model) {Book vo = new Book();vo.setNo(no);model.addAttribute("book", service.getOne(vo));return "book_detail";}@RequestMapping(value = "/book/register_form")public String register_form(Model model) {return "book_register_form";}@RequestMapping(value = "/book/register")public String register(Model model, @RequestParam("title") String title, @RequestParam("pric") String pric, @RequestParam("publ") String publ) {Book vo = new Book();vo.setTitle(title);vo.setPric(Integer.parseInt(pric));vo.setPubl(publ);int r = service.insert(vo);return "redirect:/book";}}
- BookController 클래스 수정
- 결과 확인 : http://localhost:8080/bookapp/book/201900003
- BookApp 프로젝트를 마우스 오른쪽 버튼 클릭 -> Run As -> Run on Server
- DB에 한글이 깨져서 깨저셔 저장되면 /src/main/webapp/WEB-INF/web.xml에 다음 코드를 추가
1234567891011121314<!-- 코드를 UTF-8로 통일 --><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- 도서 삭제/수정
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성
- book_detail.jsp 수정
12345678910111213141516171819202122<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page session="false" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>도서 자세히</title></head><body><p>번호 : ${book.no}</p><p>도서명 : ${book.title }</p><p>가격 : ${book.pric }</p><p>출판사 : ${book.publ }</p><p><a href="/bookapp/book/delete/${book.no }">삭제</a><a href="/bookapp/book/update_form/${book.no }">수정</a></p></body></html> - book_update_form.jsp 생성
1234567891011121314151617181920<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>도서정보 수정</title></head><body><div class="container"><form action="/bookapp/book/update" method="post"><input type="hidden" name="no" value="${book.no }">제목 : <input type="text" name="title" value="${book.title }"><br>가격 : <input type="text" name="pric" value="${book.pric }"><br>출판사 : <input type="text" name="publ" value="${book.publ }"><br><input type="submit" value="수정"></form></div></body></html>
- book_detail.jsp 수정
- Controller 클래스 수정
- BookController 클래스 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100package krco.moak.bookapp.controller.book;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import krco.moak.bookapp.dao.book.BookDAO;import krco.moak.bookapp.dto.book.Book;import krco.moak.bookapp.service.book.BookService;@Controllerpublic class BookController {@AutowiredBookService service;private static final Logger logger = LoggerFactory.getLogger(BookController.class);@RequestMapping(value = "/book", method = RequestMethod.GET)public String home(Model model) {model.addAttribute("books", service.getAll());return "book_list";}@RequestMapping(value = "/book/{no}", method = RequestMethod.GET)public String detail(@PathVariable int no, Model model) {Book vo = new Book();vo.setNo(no);model.addAttribute("book", service.getOne(vo));return "book_detail";}@RequestMapping(value = "/book/register_form")public String register_form(Model model) {return "book_register_form";}@RequestMapping(value = "/book/register")public String register(Model model, @RequestParam("title") String title, @RequestParam("pric") String pric, @RequestParam("publ") String publ) {Book vo = new Book();vo.setTitle(title);vo.setPric(Integer.parseInt(pric));vo.setPubl(publ);int r = service.insert(vo);return "redirect:/book";}@RequestMapping(value="/book/delete/{no}")public String delete(@PathVariable int no, Model model) {Book vo = new Book();vo.setNo(no);service.delete(vo);return "redirect:/book";}@RequestMapping(value="/book/update_form/{no}", method = RequestMethod.GET)public String update_form(@PathVariable int no, Model model) {Book vo = new Book();vo.setNo(no);model.addAttribute("book", service.getOne(vo));return "book/book_update_form";}@RequestMapping(value="/book/update")public String update(Model model, @RequestParam("no") String no, @RequestParam("title") String title, @RequestParam("pric") String pric, @RequestParam("publ") String publ) {Book vo = new Book();vo.setNo(Integer.parseInt(no));vo.setTitle(title);vo.setPric(Integer.parseInt(pric));vo.setPubl(publ);service.update(vo);return "redirect:/book";}}
- BookController 클래스 수정
- View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성