MVC 프레임워크 7

Feb 20, 2023

5 mins read

스프링 MVC 전체 구조

  • 지금까지 직접 만들어 본 스프링 프레임워크 구조를 스프링에서 제공하는 애노테이션을 사용하여 바꿔보자.

  • (인프런 수업 듣는중)

  • 스프링 MVC 구조 springframeworkarch

1. 회원 등록 폼 StrpingMemberFormControllerV1

  • hello.servlet.web.springmvc.v1 패키지를 만들고 StrpingMemberFormControllerV1을 스프링MVC를 사용하여 만들어 본다.
  • @Controller : 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨)
    스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
  • @RequestMapping : 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
  • ModelAndView : 모델과 뷰 정보를 담아서 반환하면 된다.
package hello.servlet.web.springmvc.v1;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller //스프링이 자동으로 빈에 등록 내부로 가보면 @Component도 있음 그리고 @RequestMapping의 대상으로 인식됨.
//@Component 
//@RequestMapping //@Controller = @Componet @RequestMapping 두개를 같이 클래스 레벨로 선언한거랑 똑같이 동작.
public class StrpingMemberFormControllerV1 {

	@RequestMapping("/springmvc/v1/members/new-form")
	public ModelAndView process() {
		//뷰리졸버에서 모델이름에 맞는 뷰를 찾아줌
		return new ModelAndView("new-form");		
	}
	
}
  • 스프링 뷰 리졸버를 사용하기 위해 application.properties에 아래 코드를 추가해야 한다.
  • 뷰 리졸버 : 스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록하는데,
    이때 application.properties 에 등록한 spring.mvc.view.prefix , spring.mvc.view.suffix 설정 정보를 사용해서 등록한다.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

2. 회원 저장 폼 SpringMemberSaveControllerV1

  • hello.servlet.web.springmvc.v1 패키지에 SpringMemberSaveControllerV1을 만든다.
  • 스프링이 제공하는 ModelAndView 를 통해 Model 데이터를 추가할 때는 addObject() 를 사용하면 된다.
    이 데이터는 이후 뷰를 렌더링 할 때 사용된다.
package hello.servlet.web.springmvc.v1;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@Controller
public class SpringMemberSaveControllerV1 {
	
	private MemberRepository memberRepository = MemberRepository.getInstance();
	
	@RequestMapping("/springmvc/v1/members/save")
	public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {

		String username = request.getParameter("username");
		int age = Integer.parseInt(request.getParameter("age"));

		Member member = new Member(username, age);
		memberRepository.save(member);
		
		ModelAndView mv = new ModelAndView("save-result");
		//편하게 Member오브젝트 넣어주는 메서드
		mv.addObject("member", member);
		return mv;
	}
	
}

3. 회원 목록 폼 StringMemberListControllerV1

  • hello.servlet.web.springmvc.v1 패키지에 StringMemberListControllerV1을 만든다.
package hello.servlet.web.springmvc.v1;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import hello.servlet.web.frontcontroller.ModelView;

@Controller
public class StringMemberListControllerV1 {

	private MemberRepository memberRepository = MemberRepository.getInstance();
	
	@RequestMapping("/springmvc/v1/members")
	public ModelAndView process() {
		
		List<Member> members = memberRepository.findAll();
		
		ModelAndView mv = new ModelAndView("members");
		mv.addObject("members", members);
		
		return mv;
	}	
}
  • http://localhost:8080/springmvc/v1/members/new-form
    http://localhost:8080/springmvc/v1/members
    접속해보면 잘 동작을 하는걸 확인할 수 있다.