본문 바로가기
Spring

Spring MVC 입력 : QueryString

by 영카이브 2024. 3. 5.

사용자로부터 전달되는 값

  • QueryString : URL로 전달되는 문자열
  • POST : 사용자의 입력으로 전달되는 문자열
  • Path : 경로로 전달되는 문자열
  • Cookie : 브라우저에 보관하고 있던 문자열
  • Header : 요청 헤더로 전달되는 문자열

 

QueryString 입력받는 방법

Spring MVC의 Front Controller는 클라이언트의 요청이 들어오면 적절한 컨트롤러 메서드를 호출하면서 요청과 관련된 정보를 메서드의 매개변수로 전달한다. 이 과정에서 요청 파라미터를 얻어오는 방법에는 두 가지가 있다. 

 

1. HttpServletRequest 객체를 이용하여 요청 파라미터 얻기

  • 컨트롤러 메서드의 매개변수로 HttpServletRequest 객체를 선언하면, Front Controller는 해당 객체를 컨트롤러 메서드에 주입
  • getRequestParameter() 메서드를 사용하여 파라미터 값을 직접 추출함

2. 요청 파라미터를 메서드의 매개변수로 직접 받기

  • 컨트롤러 메서드의 매개변수로 요청 파라미터의 이름을 정확히 지정하면, Front Controller는 해당 파라미터의 값을 추출하여 메서드에 주입
  • Front Controller에서 값을 전달받는 것이 아니라 자동으로 주입하는 것 

* 요청 파라미터 : 클라이언트가 서버에게 전달하는 데이터로 "key=value"형태

ex ) p=1일때 key는 p, value는 1이다.

 

 

http://localhost:8080/customer/notice/list?p=1 을 하였다. 

 

1번 적용

@Controller
@RequestMapping("/customer/notice/")
public class NoticeController {
	
	
	@Autowired
	private NoticeService noticeService; 
	
    // HttpRequest request 입력도구 사용
	@RequestMapping("list")
	public String list(HttpServletRequest request) throws ClassNotFoundException, SQLException {
		String p = request.getParameter("p"); 
		System.out.println(p);
		//List<Notice> list = noticeService.getList(1, "TITLE", ""); 
		return "notice.list"; 
	}
	
	@RequestMapping("detail")
	public String detail() {
		return "notice.detail";
	}
}

 

2번 적용

@Controller
@RequestMapping("/customer/notice/")
public class NoticeController {

	@Autowired
	private NoticeService noticeService; 
	
    // String으로 매개변수 받는 방법
	@RequestMapping("list")
	public String list(String p) throws ClassNotFoundException, SQLException {
		System.out.println(p);
		return "notice.list"; 
	}
	
	@RequestMapping("detail")
	public String detail() {
		return "notice.detail";
	}
}

 

 

출력 : 둘 다 1 

 

@RequestParam이란?

웹 요청 시 특정한 파라미터 값을 가져와서 컨트롤러에 메서드에서 사용할 때 활용된다.

  1. 기본적인 사용: @RequestParam을 사용하여 웹 요청의 파라미터 값을 메서드의 매개변수에 바인딩
  2. 기본 값 설정: 만약 요청 파라미터가 전달되지 않았을 때 기본 값을 설정할 수 있다. defaultValue 속성을 사용하여 기본 값을 설정할 수 있다.
  3. 필수 여부 지정: required 속성을 사용하여 필수 여부를 설정할 수 있다.

http://localhost:8080/customer/notice/list?page=1

	@RequestMapping("list")
	public String list(String p) throws ClassNotFoundException, SQLException {
		System.out.println(p);
		return "notice.list"; 
	}

 

출력 :  null 

	@RequestMapping("list")
	public String list(@RequestParam("page") String p) throws ClassNotFoundException, SQLException {
		System.out.println(p);
		return "notice.list"; 
	}

 

출력 : 1 

 

 

 

defaultValue 

http://localhost:8080/customer/notice/list

	@RequestMapping("list")
	public String list(@RequestParam(name = "page", defaultValue = "1") String p) throws ClassNotFoundException, SQLException {
		System.out.println(p);
		return "notice.list"; 
	}

 

출력 : 1 

 

int형으로 바꾸어도 가능하다.

public String list(@RequestParam(name = "page", defaultValue = "1") int p

*int는 null이 불가능한 정수형

*name 대신 value도 가능하다. 

 

required

기본적으로 true로 설정하며, 따라서 파라미터가 누락되면 MissingServletRequestParameterException 예외가 발생한다.만약 파라미터가 필수가 아니라면 required 속성을 false로 설정한다. 이 경우 요청에서 해당 파라미터가 누락되면 null 값으로 매핑된다.

 

public String list(@RequestParam(name = "page", required = true) Integer p)

 

public String list(@RequestParam(name = "page", required = false) Integer p)

정상 페이지 출력

 

 

 

 

참고 자료 출처 : (61~64)

https://www.youtube.com/watch?v=aBTbtFLScC0&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=61