application/x-www-form-urlencoded는 html의 form의 기본 Content-Type

요즘은 자주 사용하지 않지만 여전히 사용하는 경우가 종종 존재합니다.

(요즘은 application/json 많이 사용)

 

jsonx-www-form-urlencoded 차이

- application/json : {key: value}의 형태로 전송

- application/x-www-form-urlencoded : key=value&key=value의 형태로 전송

 

예시

    @Test
    @DisplayName("/posts 요청시 Hello world를 출력한다.")
    void test() throws Exception {
        //expection
        mockMvc.perform(post("/posts")
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                        .param("title","글제목입니다")
                        .param("content", "글 내용입니다")
                ) //application/json
                .andExpect(status().isOk()) // 통신이 정상일때
                .andExpect(content().string("Hello World"))
                .andDo(print()); // 요청한 로그 보기 위해
    }

 

 

해당 api 통신을 통해 값 가져오는 방법

 

1. @RequestParam String titile

@PostMapping("/posts")
public String post(@RequestParam String title, @RequestParam String content) {
        log.info("title ={} content={}", titie, content);
        return "Hello World";
        }

 

2. @RequestParam Map<String, String>

	@PostMapping("/posts")
    public String post(@RequestParam Map<String, String> params) {
        log.info("params ={}", params);
        String title = params.get("title");
        return "Hello World";
        }​

 

3. @ModelAttribute

    @PostMapping("/posts")
    public String post(@ModelAttribute PostCreate params) {
        log.info("params ={}", params.toString());
        return "Hello World";
    }

문제설명

양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.



예시

입출력예 #1
예제 1번의 n은 7로 홀수입니다. 7 이하의 모든 양의 홀수는 1, 3, 5, 7이고 이들의 합인 1 + 3 + 5 + 7 = 16을 return 합니다.
입출력 예 #2

예제 2번의 n은 10으로 짝수입니다. 10 이하의 모든 양의 짝수는 2, 4, 6, 8, 10이고 이들의 제곱의 합인 22 + 42 + 62 + 82 + 102 = 4 + 16 + 36 + 64 + 100 = 220을 return 합니다.

 

 

문제 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i=1;i<=n;i++){
            if(n%2!=0&&i%2!=0){
                answer += i;
            }else if(n%2==0&&i%2==0){
                answer += i*i;
            }
        }        
        
        return answer;
    }
}

a.jsp에 import 되어있는 b.jsp를 수정하여도 a.jsp를 불러와도 반영되지 않아 해당 문제로 시간이 좀 걸렸다.

문제로는 동적 바인딩으로 import 되어 있어서였다.

해당 문제로 정적 바인딩과 동적 바인딩에 대해 알아 보았다.

 

우선 바인딩이란 무엇인가 ?

 

 

정적 바인딩

사용할 시점 : 컴파일 시점에 클래스 로드

실행 이전에 값이 확정되면 정적 바인딩이라고 한다.

컴파일 타임에 호출될 함수가 결정 되는 것으로, 함수는 기본적으로 정적 바인딩 된다

 

<%@ page import="sys_top.jsp" %>

정적으로 해당 a.jsp를 수정하지 않고 sys_top.jsp만 수정할 경우 수정한 내용이 반영되지 않는다

반영되게 하려면 a.jsp도 다시 컴파일을 해야 반영된다.

 

동적 바인딩

사용할 시점 : 런타임 시점에 클래스 로드

실행 이 후에 값이 확정되면 동적 바인딩이라고 한다

런타임에 호츨될 함수가 결정되는 것

 

<jsp:include file page=" sys_top .jsp" flush="true">

flush="true"일 겨우 강제로 컴파일하여 sys_top.jsp만 수정하여도 a.jsp가 바로 컴파일 되면서 반영됨

유연하게 변경된다는 장점이 있지만,

단점으로는 sys_top.jsp만 따로 컴파일이 돌게 되는 것으로 import를 해당 파일에 다 따로 선언해줘야한다.

-문제 설명

정수 number n, m이 주어집니다. number n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.

 

-입출력 예

입출력 예 #1

  • 60은 2의 배수이면서 3의 배수이기 때문에 1을 return합니다.

입출력 예 #2

  • 55는 5의 배수이지만 10의 배수가 아니기 때문에 0을 return합니다.

- 문제 풀이

false일 경우를 기본 값으로 주어 성공시에만 값이 변경해주었다.

class Solution {
    public int solution(int number, int n, int m) {
        int result = 0;
        if(number % n == 0 && number % m == 0 ){
             result = 1;
         }
        return result;
    }
}

 

- 다른 사람 문제 풀이

class Solution {
    public int solution(int number, int n, int m) {
        return number % n == 0 && number % m == 0 ? 1 : 0;
    }
}

 

+ Recent posts