반응형
# Spring WEB MVC 프로젝트_01버전_01 Spring WEB MVC 프로젝트 생성
## Spring 프로젝트 생성.
- File > New > Spring Legacy Project 클릭 후 아래 입력 및 선택. > Next > kr.narp.myapp 이름으로 생성 예정
Project name : SpringMVC01
Templates : Spring MVC Project
- 초기 생성 시 API도 다운로드된다. Maven으로 만들어진 Spring 프로젝트.
## Context 등록
- Servers 탭 > 톰캣 우 클릭 > Add and Remove > 신규로 생성한 springMVC01 등록 후 Finish.
- http://localhost:8081/myapp/ 접속하여 연결 확인.
# Spring WEB MVC 프로젝트_01버전_02 기존 MVC를 Sprong WEB MVC로 변형
- 기존 HandlerMapping에 의해 들어온 요청에 따라 각 개별로 처리 진행. (요청에 따라 각 POJO 보유, 해당 POJO에서 처리.)
- 현재는 요청에 따라 요청에 맞는 POJO가 개별로 진행하던 부분을 하나의 컨트롤러에서 메서드를 이용하여 진행될 수 있도록 변형.
## 문제점
- 요청이 들어왔을 때 어떤 메서드를 사용해야 할지 모르기 때문에.. HandlerMapping이 큰 의미가 없어진다.
- Spring에서는 @RequestMapping(); 를 이용하여 해당 문제 해결 가능.
## MemberController
- 기존 아래의 POJO들의 기능을 MemberController에 메서드로 구현.
MmeberContentController.java
MemberDeleteController.java
MemberInsertController.java
MemberListController.java
MemberRegisterController.java
MemberUpdateController.java
- MemberController에서 위 POJO 기능을 모두 처리할 수 있도록 메서드 추가.
- Spring에서는 자체적으로 HandlerMapping이 존재 @RequsestMapping에 따른 처리가 만들어져 있기 때문에 에러가 발생하지 않지만, 해당 코드는 MVC04를 변형하여 해당 어노테이션이 없기 때문에 에러발생.
package kr.bit.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
// 기존 6개의 POJO가 해야할 일들을 1개의 POJO로 처리.
public class MemberController { // implements Controller 인터페이스 미사용.
// memberContentController
@RequsetMapping("/memberContent.do");
public String memberContent(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int num = Integer.parseInt(request.getParameter("num"));
MemberDAO dao = new MemberDAO();
MemberVO vo = dao.memberContent(num);
// 객체 바인딩
request.setAttribute("vo", vo);
// ViewResolver 사용을 위해 논리경로만 남기기.
// return "/WEB-INF/member/memberContent.jsp";
return "memberContent";
}
// memberDelete
@RequsetMapping("/memberDelete.do");
public String memberDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Context Path 가져오기
String ctx = request.getContextPath(); // MVC04가 옴
int num = Integer.parseInt(request.getParameter("num"));
MemberDAO dao = new MemberDAO();
int cnt = dao.memberDelete(num);
String nextPage = null;
if (cnt > 0) {
nextPage = "redirect:" + ctx + "/memberList.do"; // Context Path 추가
} else {
throw new ServletException("not delete");
}
return nextPage;
}
// memberInsertController
@RequsetMapping("/memberInsert.do");
public String memberInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Context Path 가져오기
String ctx = request.getContextPath(); // MVC04가 옴
// 1. 파라미터 수집(VO)
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String phone = request.getParameter("phone");
// 파라미터 수집(VO)
// MemberVO vo = new MemberVO(id, pass, name, age, email, phone);
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPass(pass);
vo.setName(name);
vo.setAge(age);
vo.setEmail(email);
vo.setPhone(phone);
//System.out.println("vo : " + vo); // vo.toString() 이 생략되어있는 것.
// Model과 연동하는 부분
MemberDAO dao = new MemberDAO();
int cnt = dao.memberInsert(vo);
// PrintWriter out = response.getWriter();
String nextPage = null;
// 가입 성공
if ( cnt > 0 ) {
//out.println("insert success");
// 다시 회원 리스트 보기로 가야함.
// response.sendRedirect("/MVC04/memberList.do");
nextPage = "redirect:" + ctx + "/memberList.do"; // Context Path 추가
// 가입 실패 -> 예외 객체를 만들어서 WAS에게 던지자.
} else {
throw new ServletException("not insert");
}
return nextPage;
}
// memberListController
@RequsetMapping("/memberList.do");
public String memberList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// POJP가 해야할 일
// 1. model과 연동
MemberDAO dao = new MemberDAO();
List<MemberVO> list = dao.memberList();
// 2. 객체 바인딩
request.setAttribute("list", list); // 객체 바인딩
// list를 member/memberList.jsp 로 전달해줘야 함.
// 3. 다음 페이지 정보를 FrontController에게 넘겨주는 일
// 다음 페이지 (View Page 정보)
// return "/WEB-INF/member/memberList.jsp";
return "memberList";
}
// memberRegisterController
@RequsetMapping("/memberRegister.do");
public String memberRegister(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// return "/WEB-INF/member/memberRegister.jsp";
return "memberRegister";
}
// memberUpdateController
@RequsetMapping("/memberUpdate.do");
public String memberUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Context Path 가져오기
String ctx = request.getContextPath(); // MVC04가 옴
request.setCharacterEncoding("utf-8");
// 1. 파라미터 수집(VO)
int num = Integer.parseInt(request.getParameter("num"));
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String phone = request.getParameter("phone");
MemberVO vo = new MemberVO();
vo.setNum(num);
vo.setAge(age);
vo.setEmail(email);
vo.setPhone(phone);
MemberDAO dao = new MemberDAO();
int cnt = dao.memberUpdate(vo);
String nextPage = null;
if (cnt > 0) {
nextPage = "redirect:" + ctx + "/memberList.do"; // Context Path 추가
} else {
throw new ServletException("not update");
}
return nextPage;
}
}
## Spring에서 제공해주는 것
- FrontController
- HandlerMapping
- ViewResolver
## Spring으로 변형되면서 바뀌는 점
- 기존에는 요청 발생 시 요청에 따른 POJO가 존재하여 해당 요청을 처리, Spring에서는 단일 컨트롤러에서 @RequestMapping() 어노테이션을 이용하여 요청에 따른 메서드를 실행하여 처리.
반응형
'인프런 강의 학습 > MVC 프레임워크_나프2탄' 카테고리의 다른 글
인프런 나프_2탄 18일차 : Spring WEB MVC_01버전_04~05 DataBase 연결 (0) | 2021.07.03 |
---|---|
인프런 나프_2탄 17일차 : Spring WEB MVC_01버전_03 POJO 개수 줄이기 (0) | 2021.07.01 |
인프런 나프_2탄 15일차 : MVC07_12~14 업로드 한 파일 삭제하기, 업로드한 파일 수정하기, 정리 (0) | 2021.06.30 |
인프런 나프_2탄 14일차 : MVC07_11 파일 다운로드(한글깨짐 방지) (0) | 2021.06.29 |
인프런 나프_2탄 13일차 : MVC07_07~10 Ajax를 이용한 파일 업로드(화면 구현, Ajax를 이용한 파일 업로드, 파일업로드 DataBase에 저장, 회원리스트에 이미지 보이기 ) (0) | 2021.06.28 |