반응형

# 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() 어노테이션을 이용하여 요청에 따른 메서드를 실행하여 처리. 

반응형

+ Recent posts