Spring MVC-TIL (8)


[参考講座]金英漢のSpring MVC 1編-バックエンドWeb開発キーテクノロジー

💡 スプリングMVC-構造を知る


▼▼スタートスプリングMVC


@RequestMapping
Springは@requestmappingプレゼンテーションを使用した非常に柔軟で実用的なコントローラを作成しました.
@RequestMapping
  • RequestMappingHandlerMapping
  • RequestMappingHandlerAdapter
  • 最も優先度の高いHandlerマッピングとHandlerアダプタは、requestMappingHandlerマッピング、requestMappingHandler Adapterです.
    これが、現在スプリングで主に使用されているアニメーションベースのコントローラをサポートするHandlerマッピングとアダプタです.実務でも使う.

    SpringMemberFormControllerV 1-会員登録フォーム

    @Controller
    public class SpringMemberFormControllerV1 {
    
        @RequestMapping("/springmvc/v1/members/new-form")
        public ModelAndView process() {
            return new ModelAndView("new-form");
        }
    }
  • @Controller:
  • スプリングは自動的にスプリングシートとして登録される.(内部に@Component Anotationがあり、素子スキャンに使用可能)
  • はSpring MVCにおいてノイズベースのコントローラと考えられる.
  • @RequestMapping
    マッピング
  • 要求情報.URLを呼び出すと、このメソッドが呼び出されます.
  • @ModelAndView
  • モデルとビュー情報を含んで戻ってください.
  • SpringMemberSaveControllerV 1-メンバーの保存

    @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");
            mv.addObject("member", member);
            return mv;
        }
    }
  • mv.addObject("member",member)
    スプリングで提供されるModelAndViewでモデルデータを追加する場合はaddObject()を使用できます.このデータは、後続のビューをレンダリングするために使用されます.
  • SpringMemberListControl-V 1-メンバーリスト

    @Controller
    public class SpringMemberListControllerV1 {
    
        private final 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;
        }
    }

    ▼▼コントローラ統合


    SpringMemberControllerV2

    @Controller
    @RequestMapping("/springmvc/v2/members")
    public class SpringMemberControllerV2 {
    
        private final 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 mv = new ModelAndView("save-result");
            mv.addObject("member", member);
            return mv;
        }
    
        @RequestMapping
        public ModelAndView members() {
            List<Member> members = memberRepository.findAll();
            ModelAndView mv = new ModelAndView("members");
            mv.addObject("members", members);
    
            return mv;
        }
    }
    クラスレベルに@RequestMappingを配置すると、メソッドレベルと組み合わせられます.
    ex)
    クラスレベル@requestmapping("/springmvc/v 2/members")
    メソッドレベル@requestmapping("/new-form")
    最終組み合わせ:/springmvc/v 2/members/new-form

    ▼▼▼▼実用的な方法


    SpringMemberControllerV3

    @Controller
    @RequestMapping("/springmvc/v3/members")
    public class SpringMemberControllerV3 {
    
        private final 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";
        }
    }
    モデルパラメータ
    save()、members()を表示すると、パラメータとして受け入れモデルを決定できます.
    View Nameに直接戻る
    ビューの論理名を返すことができます.
    @RequestParamの使用
    Springは、HTTP要求パラメータ@RequestParamを受信することができる.
    @RequestParam("username")はrequestです.getParameter(「username」)とほぼ同じコードと見なすことができます.