검색결과 리스트
글
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 18
인프런 강의 35일차.
- 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 1 (김영한 강사님)
- 서블릿, JSP, MVC 패턴
- 서블릿으로 1차 구현
-> 서블릿으로 구현했을 때 불편한 점 개선을 위해 JSP로 2차 구현
-> JSP로도 불편한 점을 개선하기 위해 MVC 패턴으로 3차 구현
3. 스프링 MVC - 구조 이해
3.8 스프링 mvc 시작하기
> 스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작해서, 매우 유연하고 실용적이다.
> @RequestMapping 스프링은 애노테이션을 활용한 매우 유연하고, 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다. 과거에는 스프링 프레임워크가 MVC 부분이 약해서 스프링을 사용하더라도 MVC 웹 기술은 스트럿츠 같은 다른 프레임워크를 사용했었다.
> 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping, RequestMappingHandlerAdapter 이다.
- RequestMappingHandlerMapping
- RequestMappingHandlerAdapter
> 지금 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어댑터이다.
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
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
- web.springmvc.v1.SpringMemberFormControllerV1
- @Controller : 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component로 정의되어있음)
- @RequestMapping : 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
- ModelAndView : 모델과 뷰 정보를 담아서 반환하면 된다
- @Controller 대신 @Component + @RequestMapping으로 직접 컴포넌트 스캔을 타도록 지정해도 된다.
package hello.servlet.web.springmvc.v1;
import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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");
mv.addObject("member", member); //mv.getModel().put("member", member); //멤버 모델에 저장
return mv;
}
}
- web.springmvc.v1.SpringMemberSaveControllerV1
- 기본적인 패턴은 동일하나 mv.getModel.put이 아닌 addObject로 간편하게 모델에 추가가 가능하다.
package hello.servlet.web.springmvc.v1;
import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
import java.util.Map;
public class SpringMemberListControllerV1 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/springmvc/v1/members/save")
public ModelAndView process(Map<String, String> paramMap) {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members); //mv.getModel().put("members", members); //members 리스트로 저장
return mv;
}
}
- web.springmvc.v1.SpringMemberListControllerV1
- Save와 동일하게 addObject로 멤버를 추가한다.
> 위 로직은 뷰 리졸버 동작방식으로 동작한다.
'Spring 정리' 카테고리의 다른 글
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 20 (0) | 2022.04.03 |
---|---|
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 19 (0) | 2022.04.03 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 17 (0) | 2022.02.02 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 16 (0) | 2021.12.07 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 15 (0) | 2021.12.06 |