반응형

💡 @RequestParam

쿼리스트링 방식으로 변수에 값을 저장해서 다른 페이지로 전달하는 Annotation 입니다.

  • 파라미터 이름으로 바인딩
  • name 속성이 파라미터 이름으로 사용
사용법 : 함수명(Model model, @RequestParam 자료형 변수명) {}
url?변수명=값 (웹 브라우저 주소창 입력)

📌 코드작성해보기

📂 ParamController.java

@Controller
public class ParamController {

    @GetMapping("/exam02/hello-name")
    public String HelloName(Model model
            ,@RequestParam(defaultValue = "") String name) {
        model.addAttribute("greeting", "안녕하세요 " + name);
        return "exam02/hello.jsp";
    }

}

여기서

@RequestParam(defaultValue = "") String name)

defaultValue 부분은 생략이 가능합니다.

만약 defaultValue 부분을 생략하고 주소창에 값을 넘겨주지 않을 경우 오류가 발생하게 됩니다.

즉, 옵션을 생략할 경우 반드시 값을 넘겨줘야합니다!

  • 위의 코드는 HelloName 메서드에 @RequestParam 어노테이션을 사용하여 name 값이 전달이 안될 경우 빈문자열로 기본값을 설정하였습니다.

 

📂 hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO : JSTL 표현식 사용을 위한 import--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%--    TODO 부트스트랩 CSS CDN --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <h2>매개변수(파라메터) 전달받아 출력하기</h2>
<%--    TODO : el(Experssion language) 표현식 : ${변수명} --%>
    <p>${greeting}</p>
</div>
</body>
</html>

📌 실행결과

기본 값일 경우 위의 코드처럼 빈 문자열로 출력됨

 

웹 페이지 주소창에 url?변수명=값을 넘겨 실행하면 name 변수에 있는 이순신이 출력됩니다.

✅ URL 매개변수를 2개를 각각 키이름으로 전달하기

위의 예제는 매개변수를 1개를 전달하는 방법이였습니다. 이번에는 매개변수 2개를 전달하는 방법에 대해 알아보겠습니다.

📂 MultiParamController.java

@Controller
@RequestMapping("/exam03")
public class MultiParamController {

//    TODO : 예제 1) URL 매개변수 2개를 각각 키이름으로 전달
//     URL TEST ) http://localhost:8000/exam03/hello-name-id?name=junyeok&id=junyeoke
    @GetMapping("/hello-name-id")
    public String setHelloNameId (Model model,
                                  @RequestParam(defaultValue = "")String name,
                                  @RequestParam(defaultValue = "")String id)
    {
        model.addAttribute("attrName","이름 : " + name);
        model.addAttribute("attrId","아이디 : " + id);
        return "exam03/hello_name_id.jsp";
    }
  • setHelloNameId 메서드에 @RequestParam 어노테이션이 두 개 사용된 것을 알 수 있습니다.

📂 example01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO : JSTL 표현식 사용을 위한 import--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%--    TODO 부트스트랩 CSS CDN --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <h2>URL 매개변수를 각각 키이름으로 전달</h2>
    <p>${dno}</p>
    <p>${dname}</p>
    <p>${loc}</p>
</div>
</body>
</html>

 

📌 실행결과

  • URL TEST 주소는 http://localhost:8000/exam03/hello-name-id?name=junyeok&id=junyeoke 이며 매개변수가 2개 이상일 경우 &을 사용하여 입력합니다.

 

💡 @RequestMapping

요청(Request) URL을 어떤 method가 처리할지 mapping 해주는 Annotation 입니다.

즉, 자주쓰는 공통 URL를 생략할수 있게 해주는 어노테이션이라 생각하시면 됩니다.

@RequestMapping("/공통url") : 공통 url을 함수의 url과 합쳐져서 사용됨
예) @RequestMapping("/exam02") + @GetMapping("/hello-name")
=> url : /exam02/hello-name

컨트롤러 클래스 위에 @RequestMapping 어노테이션을 사용합니다.

package com.example.controllerexam.controller.exam02;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/exam02")
public class ParamController {

    @GetMapping("/hello-name")
    public String HelloName(Model model
            ,@RequestParam(defaultValue = "") String name) {
        model.addAttribute("greeting", "안녕하세요 " + name);
        return "exam02/hello.jsp";
    }

....
}

📖 연습문제

//  TODO: 연습 1) url : /exam02/hello-dname
//               jsp : exam02/example01.jsp
//               문제 : dname(Sales)의 값을 url 쿼리스트링으로 전달해서
//                example01.jsp 에 출력해 보세요
//               결과 : 부서명 : Sales

📂 ParamController.java

@GetMapping("/exam02/hello-dname")
public String HelloDname(Model model, @RequestParam(defaultValue = "") String dname) {
    model.addAttribute("greeting", "부서명 : " + dname);
    return "exam02/example01.jsp";
}

📂 example01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO : JSTL 표현식 사용을 위한 import--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%--    TODO 부트스트랩 CSS CDN --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <h2>dname(Sales)의 값을 url 쿼리스트링으로 전달해서 출력하기</h2>
    <%--    TODO : el(Experssion language) 표현식 : ${변수명} --%>
    <p>${greeting}</p>
</div>
</body>
</html>

📌 실행결과

url?dname=Sale 를 추가하면 부서명에 Sales가 출력됩니다.

 

//  TODO: 연습 2) 숫자로 url 매개변수를 전달해서 화면에 출력해 보세요.
//         url : /exam02/hello-no
//         jsp : exam02/example02.jsp
//         결과 : 20

 

📂 ParamController.java

    @GetMapping("/exam02/hello-no")
    public String HelloNo(Model model, @RequestParam(defaultValue = "0") int no) {
        model.addAttribute("greeting", + no);
        return "exam02/example02.jsp";
    }

📂 example02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO : JSTL 표현식 사용을 위한 import--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%--    TODO 부트스트랩 CSS CDN --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <h2>숫자로 url 매개변수를 전달해서 화면에 출력하기</h2>
    <%--    TODO : el(Experssion language) 표현식 : ${변수명} --%>
    <p>${greeting}</p>
</div>
</body>
</html>

📌 실행결과

 

TODO: 연습 1) URL 매개변수로 dno=10, dName=Accounting 받았다. 아래 결과를 화면에 출력하세요.
url : /example01
jsp : exam03/example01.jsp
<결과>
부서번호 : 10
부서명 : Accounting
위치 : NewYork
url 테스트 : http://localhost:8000/exam03/example01?dno=10&dname=Accounting&loc=NewYork

📂 MultiParamController.java

@GetMapping("/example01")
public String setDnoDname (Model model,
                           @RequestParam(defaultValue = "0")int dno,
                           @RequestParam(defaultValue = "")String dname,
                           @RequestParam(defaultValue = "")String loc){
    model.addAttribute("dno","부서번호 : " + dno);
    model.addAttribute("dname","부서명 : " + dname);
    model.addAttribute("loc","위치 : " + loc);
    return "exam03/example01.jsp";
}

📂 example01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO : JSTL 표현식 사용을 위한 import--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%--    TODO 부트스트랩 CSS CDN --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <h2>예제 2번 문제</h2>
    <p>${dno}</p>
    <p>${dname}</p>
    <p>${loc}</p>
</div>
</body>
</html>

📌 실행결과

반응형

'Spring Boot > 스프링부트 예제' 카테고리의 다른 글

객체 형태로 변환하는 어노테이션  (0) 2023.10.05
JSP의 조건문  (1) 2023.10.05
URL 매개변수를 ArrayList 형태로 View에 전달  (0) 2023.10.05
Model  (0) 2023.10.04
Hello SpringBoot!  (0) 2023.10.04

+ Recent posts