ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링 입문] Section 2.스프링 웹 개발 기초
    강의 기록/스프링 입문(김영한) 2021. 3. 16. 14:06

    Section 2

    • 정적 컨텐츠
    • MVC와 템플릿 엔진
    • API

    정적컨텐츠 (spring-Static Content)

    서버에서 하는 거 없이 파일을 웹브라우저에 내려주는 컨텐츠

     

    기본적으로 리소스는 /**에 매핑

    spring.mvc.static-path-patten 속성으로 조정 가능

    // 모든 리소스를 /resorces/**
    spring.mvc.static-path-pattern=/resources/**

    resources/static/hello-static.html

    <!DOCTYPE HTML>
    <html>
    <head>
     <title>static content</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    정적 컨텐츠 입니다.
    </body>
    </html>


    MVC와 템플릿 엔진

    MVC: Model, View, Controller

    템플릿 엔진(jsp, php 등)

    서버에서 변경을해서 동적으로 바꿔주는 컨텐츠

     

    model 1: view에서 모든걸 다하고 View와 Controller가 분리되어있지 않은 형식( 예전 방식)

    model 2: MVC 사용

     

    View는 보여지기만 하는 화면으로 사용하는 것이 좋음

     

    resources/templates/hello-template.html

    <html xmlns:th="http://www.thymeleaf.org">
    <body>
    <p th:text="'hello ' + ${name}">hello! empty</p>
    </body>
    </html>

    ${}안의 값은 model에서 꺼내 값을 치환해서 웹브라우저에서 띄운다.

    timeleaf의 장점. 정보가 없이 주소창에 파일 위치를 입력해서 열었을 경우 hello! empty만 띄움

     

    hello.hellospring.controller/HelloController.java

    package hello.hellospring.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    public class HelloController {
    	
    	@GetMapping("hello-mvc")
    	public String helloMvc(@RequestParam(value = "name", required = true) String name, Model model) {
    		model.addAttribute("name", name);
    		
    		return "hello-template";
    	}
    }
    


    API

    보통 서버끼리 통신할 때 사용

    hello.hellospring.controller/HelloController.java

    @Controller
    public class HelloController {
    
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
    	
    	@GetMapping("hello-string")
    	@ResponseBody
    	// http body부에 이 데이터를 직접 넣어주겟다.
    	public String helloString(@RequestParam("name") String name) {
    		return "hello " + name; // "hello spring" 문자 리턴
    	}
        
    	static class Hello {
    		private String name;
    
    		public String getName() {
    			return name;
     		}
    
    		public void setName(String name) {
    			this.name = name;
    		}
    	}	
    }

    xml: 복잡.무거움

    json: 심플. 형식으로 반환. 현재는 거의 json 방식으로 통일

     

     

    getter setter:  접근자 프로퍼티. getter(획득자), setter(설정자)

    getter,setter 단축키(Ctrl + Shift + S + R)

    private는 밖에서 꺼낼 수 없음. getter로 꺼낼 수 있게 만들어줌 (프로퍼티 접근 방식)

     

    @ResponseBody 를 사용

    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter 가 동작 (StringBoot 기능)
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
      (잭슨과 구글의 gson도 있지만 Spring은 jackson 사용)
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
      => {name: spring}

    정리

    정적 컨텐츠 MVC와 템플릿 엔진 API
    파일을 그대로 고객한테 전달 서버에서 변형해서 html을 바꿔 제공 json 등 데이터 포맷으로 클라이언트에 전달하여 객체를 반환

     

Designed by Tistory.