スプリングMVC-4

5074 ワード

<ソース>
Spring MVC 1編-バックエンドWeb開発キーテクノロジー/インフラ講座/金栄漢
5.スプリングMVC-構造-スプリングMVC-起動について
5.スプリングMVC-構造-集積スプリングMVC-コントローラの理解
5.スプリングMVC-構造-スプリングMVC-実用方法を理解する
5.スプリングMVC-構造の理解と整理
関連コード
https://github.com/sunghoonking/spring-mvc-inflearn/tree/main/src/main/java/hello/servlet/web
スプリングMVC-起動
スプリングが提供するコントローラはシミュレーションに基づいており、非常に柔軟で実用的です.過去、Java言語ではプレゼンテーションも行われておらず、Springも最初からこのような柔軟なコントローラを提供していなかった.




スプリングMVC-コントローラ統合
SpringMemberControllerV2
package hello.servlet.web.springmvc.v2;
import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 클래스 단위 -> 메서드 단위
 * @RequestMapping 클래스 레벨과 메서드 레벨 조합
 */
 
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {

 private MemberRepository memberRepository = MemberRepository.getInstance();
 
 @RequestMapping("/new-form")
 public ModelAndView newForm() {
 return new ModelAndView("new-form");
 }
 
 @RequestMapping("/save")
 public ModelAndView save(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 mav = new ModelAndView("save-result");
 mav.addObject("member", member);
 return mav;
 }
 
 @RequestMapping
 public ModelAndView members() {
 
 List<Member> members = memberRepository.findAll();
 ModelAndView mav = new ModelAndView("members");
 mav.addObject("members", members);
 return mav;
 }
}

スプリングMVC-実用方法실무에서 사용하는 방식
package hello.servlet.web.springmvc.v3;

import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;

/**
 * v3
 * Model 도입
 * ViewName 직접 반환
 * @RequestParam 사용
 * @RequestMapping -> @GetMapping, @PostMapping
 */
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
    
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")
    public String newForm() {
        return "new-form";
    }
  
    @PostMapping("/save")
    public String save(
            @RequestParam("username") String username,
            @RequestParam("age") int age,
            Model model) {
        Member member = new Member(username, age);
        memberRepository.save(member);
        model.addAttribute("member", member);
        return "save-result";
    }
  
    @GetMapping
    public String members(Model model) {
        List<Member> members = memberRepository.findAll();
        model.addAttribute("members", members);
        return "members";
    }
}

整理する
'1. HTTP 요청이 오면 Dispatcher Servlet에게 온다 2. 핸들러 매핑에서 핸들러 조회를 한다 (スプリングガイドにより複数のハンドルが登録され、順番にそれらを検索してHandlerマッピングで処理可能なハンドルを検索します)3. 찾아서 핸들러 어댑터 목록에 떤져주고 핸들러 어댑터는 처리할 수 있다고 하면 핸들러 어댑터를 통해서 실제 핸들러를 호출하고 ModelAndView를 반환 한다 4.그리고 ViewResolver를 호출해서 실제 View를 찾는다 5. View가 렌더가 되면서 실제 고객에게 HTTP 응답이 나가게 된다