실습 코드 참조
moonhy7/SpringFramework: Spring Framework 실습 코드 정리 (github.com)
3.1절 비즈니스 컴포넌트 사용
1. DAO 클래스 교체하기
2. AOP 설정 적용하기
3. 비즈니스 컴포넌트 의존성 주입하기
에러난 이유 그림
3.2절 비즈니스 컴포넌트 로딩
1. 2-Layered 아키텍처
2. ContextLoaderLister 등록
3. 스프링 컨테이너의 관계
package com.springbook.view.board;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.springbook.biz.board.BoardService;
import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;
@Controller
//board로 model 저장된 객체가 있으면 HttpSession 데이터 보관소에서 동일한 키 값(board)로 저장
@SessionAttributes("board")
public class BoardController {
@Autowired
private BoardService boardService;
//@ModelAttribute : 1. Command 객체 이름 지정
// 2. View(JSP)에서 사용할 데이터 설정
@ModelAttribute("conditionMap")
public Map<String, String> searchConditionMap() {
Map<String, String> conditionMap = new HashMap<String, String>();
conditionMap.put("제목", "TITLE");
conditionMap.put("내용", "CONTENT");
//리턴 값은 ReqeustServlet 데이터 보관소에 저장
//conditionMap이라는 키 값으로 데이터가 저장
return conditionMap;
}
@RequestMapping(value="/insertBoard.do")
//Command 객체 : 사용자가 전송한 데이터를 매핑한 VO를 바로 생성
// 사용자 입력 값이 많아지면 코드가 길어지기 때문에 간략화 가능
// 사용자 입력 input의 name 속성과 VO 멤버변수의 이름을 매핑해주는 것이 중요
public String insertBoard(BoardVO vo) {
System.out.println("글 등록 처리");
/*
* //1. 사용자 입력정보 추출(insertBoard.jsp에서 전송된 정보 추출) String title =
* request.getParameter("title"); String writer =
* request.getParameter("writer"); String content =
* request.getParameter("content");
*
* //2. DB 연동 처리(BoardDAO의 메소드 호출) BoardVO vo = new BoardVO();
* vo.setTitle(title); vo.setWriter(writer); vo.setContent(content);
*/
boardService.insertBoard(vo);
//화면 네비게이션(게시글 등록 완료 후 게시글 목록으로 이동)
return "redirect:getBoardList.do";
}
//ModelAttribute로 세션에 board라는 이름으로 저장된 객체가 있는지 찾아서 Command객체에 담아줌
@RequestMapping(value="/updateBoard.do")
public String updateBoard(@ModelAttribute("board") BoardVO vo) {
System.out.println("글 수정 처리");
System.out.println("일련번호 : " + vo.getSeq());
System.out.println("제목 : " + vo.getTitle());
System.out.println("작성자 이름 : " + vo.getWriter());
System.out.println("내용 : " + vo.getContent());
System.out.println("등록일 : " + vo.getRegDate());
System.out.println("조회수 : " + vo.getCnt());
boardService.updateBoard(vo);
return "redirect:getBoardList.do";
}
@RequestMapping(value="/deleteBoard.do")
public String deleteBoard(BoardVO vo) {
System.out.println("글 삭제 처리");
boardService.deleteBoard(vo);
return "redirect:getBoardList.do";
}
@RequestMapping(value="/getBoard.do")
public String getBoard(BoardVO vo, Model model) {
System.out.println("글 상세 조회 처리");
//Model 객체는 RequestServlet 데이터 보관소에 저장
//RequestServlet 데이터 보관소에 저장하는 것과 동일하게 동작
//request.setAttribute("board", boardDAO.getBoard(vo)) == model.addAttribute("board", boardDAO.getBoard(vo))
model.addAttribute("board", boardService.getBoard(vo));
return "getBoard.jsp";
}
@RequestMapping(value="/getBoardList.do")
//@RequestParam : Command 객체인 VO에 매핑값이 없는 사용자 입력정보는 직접 받아서 처리
// value = 화면으로부터 전달된 파라미터 이름(jsp의 input의 name속성 값)
// required = 생략 가능 여부
public String getBoardList( /*
* @RequestParam(value="searchCondition", defaultValue="TITLE", required=false)
* String condition,
*
* @RequestParam(value="searchKeyword", defaultValue="", required=false) String
* keyword,
*/
BoardVO vo, Model model) {
System.out.println("글 목록 검색 처리");
model.addAttribute("boardList", boardService.getBoardList(vo));
return "getBoardList.jsp";
}
}
'👨💻 2. 웹개발_Back end > 2-6 Spring' 카테고리의 다른 글
[Spring] 5장 파일 업로드 (0) | 2021.11.01 |
---|---|
[Spring] 4장 검색 기능 추가 구현 (0) | 2021.11.01 |
[Spring] 2장 어노테이션으로 게시판 프로그램 구현하기 (0) | 2021.11.01 |
[Spring] 넷째 날 1장 어노테이션 기반 MVC 개발 - POJO 스타일을 고려한 어노테이션 설정(@Controller , @RequestMapping) 및 Command 객체를 이용하여 코드 간략화 (0) | 2021.11.01 |
[Spring] 6~7장 Spring MVC 적용 - .do 요청이 동작할 수 있도록HandlerMapping 적용하기 및 직접적인 JSP 호출 차단을 위한 ViewResolver 적용하기 (0) | 2021.10.29 |
댓글