Spring Framework에서 URL은 웹 애플리케이션의 라우팅을 처리하는 중요한 역할을 하고 있는데요?
클라이언트의 요청을 적절한 메서드로 매핑하는 기능을 수행하게 됩니다.
개념
1. RequestMapping 어노테이션
-Spring에서는 @RequestMapping 어노테이션을 사용하여
특정 URL 패턴에 대한 HTTP 요청을 Java메서드에 매핑합니다.
2. HTTP 메서드 지정
- @ReQuestMapping에서는 HTTP 메서드를 지정하는 속성도 있습니다.(method=RequesyMethod.GET)
하지만 Spring 4.3부터는 보다 명확하게 표현하기 위해 @GetMapping, @PostMapping, @PutMapping등의
어노테이션이 도입되었습니다. 오늘 예시 코드는 4.3이하로 준비했으므로 참고해주세요.
3. URL 패턴 매칭
- Spring MVC는 URL 패턴 매칭에 유연성을 제공합니다.
- Ant스타일: /example/*, /example/**,/example?
- 정규식: {spring: [a-z]+}
- 플레이스 홀더: {name}
4. Redirect와 Forward
- Redirect: return "redirect:/url"
- Fowarding: return "forward:/url"
위와 같은 방법들로 스프링(Spring)에서는 복잡한 웹 애플리케이션의
요구사항과 유지보수를 잘 처리 할 수 있도록 도와줍니다.
.
이 URL를 테스트할 수 있는 프로그램도 있는데요?
바로 포스트맨입니다. 아래 링크 달아 두겠습니다.
https://www.postman.com/downloads/
Download Postman | Get Started for Free
Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
URL방법
1. @RequestMapping 어노테이션
@Controller
@RequestMapping("/home")
public class HomeController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello Spring MVC");
return "hello";
}
}
- 위 예제는 가장 기본적인 방법으로, "/home/hello" URL로 요청하면 hello메서드가 실행됩니다.
@RequestMapping("/request02")
public void request02(HttpServletRequest req) {
HttpSession session = req.getSession();
}
@RequestMapping("/request03")
public void request03(HttpSession session) {
//session을 한번에 불러올 수 있다.
}
@RequestMapping 어노테이션를 사용하는 이유
1. request의 데이터를 추출하기 위해서
2. 여기에는 IP 혹은 URL에 대한 정보 또한 담겨있다.
2. session을 가져오기 위해서
3. method의 변수가 깔끔해보인다.
2. @PathVariable 어노테이션
- @PathVariable 어노테이션은 URL 경로의 일부를 메서드 파라미터로 캡처하는데 사용되는 어노테이션입니다.
▼Controller.java
@RequestMapping("/request06/{id}/{name}")
public String pathVariable02(@PathVariable Long id, @PathVariable(value = "name") String nm) {
System.out.println("id: " + id);
System.out.println("name: " + nm);
return "study/study03";
}
▼study/study03.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Huiyeon 블로그</title>
</head>
<body>
${id} 와 ${name}입니다.
</body>
</html>
- http://localgost:{포트번호}/request06/{id}/{name} URL를 요청하면 study03.jsp(View)가 실행되는 것을
확인하실 수 있습니다.
- @PathVariable 어노테이션을 통해 {id}부분은 Long id파라미터로, {name}부분은 String nm파라미터로 값을 전달하게 됩니다.
3. @RequestParam 어노테이션
//mapping: /request10?id=1000
@RequestMapping("/request10")
public String requestParam01(@RequestParam Long id) {
//만약 id의 request값을 없애면 어떻게 될 것인가?
//requestParam변수를 사용시, 변수값이 존재하지 않으면 400 error가 발생된다.
System.out.println("id: " + id);
return "study/study03";
}
@RequestMapping("/request11")
public String requestParam02(@RequestParam(required = false) String name) {
//requestParam의 null을 허용하기 위해서는 required를 false로 정의하면 된다.
//required는 생략이 가능하다
//required가 생략이 될 경우, true로 설정이 된다.
System.out.println("name" + name);
return "study/study03";
}
- @RequestParam 어노테이션은 쿼리 파라미터를 메서드 파라미터로 바인딩하는데 사용됩니다.
- 만약 "/request10" URL에 "id" 쿼리 파라미터가 없다면 400에러가 발생합니다.
- 하지만 "/request11" URL에 "id" 쿼리 파라미터가 없더고 400에러가 발생하지 않고 false값으로 대체됩니다.
감사합니다🐇