10강. URL Mapping
@RequestMapping 어노테이션으로 요청 주소 처리 가능하다!
[Servlet/JSP URL 주소]
-URL: 사용자가 서버에 접속해서 서비스를 받기 위해 입력하는 주소
-URL 주소는 여러 의미 갖는 값들로 구성됨
[URL 주소]
-[프로토콜] : 서버와 클라이언트 간 통신을 위한 약속 (생략 시 http)
-[IP주소]=도메인 주소
: IP 주소는 같은 네트워크 망에서 컴퓨터 구분 위해 제공되는 숫자, 고유 주소, 인터넷 망에 연결된 컴퓨터는 전 세계에서 유일한 주소 할당 받고 공유기 등에 연결된 커뮤터는 공유기 안에서 유일한 주소를 할당 받는다. 그러나 숫자는 사람이 외우기 어려워 도메인 주소라는 걸 따로 만들어서 제공함. 도메인 주소는 IP 주소로 변환되어 컴퓨터 찾을 수 있도록 한다.
-[포트번호]: 1부터 65535 번까지 구성된 숫자.
:컴퓨터 내 프로그램 구분 위해 사용 (단, 생략 시 기본 80)
-[경로1/경로2/경로3...]
: 여기서부터는 서버/개발 방식이나 분야에 따라 다르게 해석된다. Servelt/JSP 에서는 첫 경로는 Context Path 라고 부른다. 하나의 서버에서 각 웹 애플리케이션 구분 위해 지정되는 이름이며 폴더의 이름이 Context Path가 된다. 그 이후 경로는 하위 경로가 된다.
[SpringMVC에서의 주소]
-Spring MVC에서는 /Context Path/의 다음 주소를 실제 물리적 경로와 다르게 지정 O
[하위 경로]
@Controller public class Sub1Controller { //sub1폴더의 하위 경로 매핑 @RequestMapping(value = "/sub1/test3", method = RequestMethod.GET) public String sub1Test3() { return "sub1/test3"; } @RequestMapping(value = "/sub1/test4", method= RequestMethod.GET) public String sub1Test4() { return "sub1/test4"; } } |
[하위 경로 통합]
-즉, 하위 경로들 사이에 중복되는 경로에 대해서는 메소드 위에서 통합하여 묶어주고 나머지 주소를 각 메소드 위의 매핑값으로 줄 수도 있다.
@Controller @RequestMapping("/sub2") //공통 경로를 묶어 매핑 public class Sub2Controller { @RequestMapping(value="/test5", method=RequestMethod.GET) public String test5() { return "sub2/test5"; } @RequestMapping(value="/test6", method=RequestMethod.GET) public String test6() { return "sub2/test6"; } } |
(주의) src/main/webapp (체크표시 누르고) ->configure에서 maven으로 변경하고 -> 프로퍼티에서 서버(톰캣 9.0 연결) + 자바 1.8 버전 변경 후 -> 정상 작동 가능 |
[서버 연결 결과 영상]
[요청 주소 매핑 결과 영상]
11강. 요청방식
[요청 방식 지정하기]
-Spring MVC는 요청 주소별로도 메소드 정의할 수 O
같은 주소에 대해서도 요청방식에 따라 메소드 정의할 수 O
-GET/POST/PUT/DELETE/PATCH 에 대해 처리 할 수 있다.
[@RequestMapping]
-@RequestMapping 어노테이션: 요청 주소 세팅 뿐만 아니라 요청 방식도 설정 가능
[요청 어노테이션] : @GetMapping() / @PostMapping()
-@Get/PostMapping() 사용 시, 요청별로 제공되는 어노테이션 사용할 수도 있음 (따로따로)
@GetMapping("/test6") public String test6() { return "test6"; } @PostMapping("/test6") public String test6() { return "test6"; } |
[요청 어노테이션 동시에 설정]
-@RequestMapping 으로 요청 방식 동시에 설정 가능
@RequestMapping(value = "/test7", method= {RequestMethod.GET,RequestMethod.POST} ) public String test7() { return "test7"; } |
<GET 방식과 POST 방식 차이>
[HTTP] -웹 상에서 클라이언트 – 서버 간 데이터 주고 받을 수 있는 프로토콜 -클라이언트가 HTTP 프로토콜 통해서 서버에 요청 보내면, 서버는 요청에 맞는 응답을 클라이언트에게 전송. *[GET 방식] -클라이언트가 서버로 데이터 요청하기 위해 사용하는 Method ex. [http://localhost:3000/login?id=admin&pw=1234] URL 뒤에 쿼리 스트링(key와 value) 붙이고 내용을 투명하게 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청함 ex. ID/PW 보안 문제. 따라서 단순 데이터 조회 시 사용 多 *[POST 방식] -클라이언트가 서버로 데이터를 전송해 리소스를 추가/생성하기 위해 사용하는 Method -POST 방식은 GET 방식과 다르게 데이터들이 URL에 표시 X -HTTP 패킷 Body에 담겨서 서버로 데이터가 전송된다. -ex. [http://localhost:3000/login] |
12강. 파라미터 추출하기
[파라미터 추출하기]
-클라이언트 요청 발생 시 전달하는 파라미터 데이터를 손쉽게 주입받을 수 있도록 다양한 방식을 제공하고 있다.
-Spring MVC는 Servlet/JSP처럼 요청 방식에 따라 파라미터 추출 방식이 달라지지는 않음
▶[HttpServletRequest 사용하기]
-Spring MVC는 필요한 객체/데이터 주입받아 사용함
-Servlet/JSP에서 파라미터 데이터 추출할 때 HttpServletRequest 타입을 통하여 받는데,
Spring MVC에서 이 객체를 주입받아 사용할 수 있다.
-파라미터 추출 뿐 아니라, HttpServletRequest 객체가 필요할 경우 사용 O
@GetMapping("/test1") public String test1(HttpServletRequest request) { String data2 = request.getParameter("data2"); String data3 = request.getParameter("data3"); . . . } |
▶[WebRequest 사용하기]
-HttpServletRequest 클래스를 확장한 클래스이다.
-기능이 확장된 HttpServletRequest 클래스라고 생각하면 된다.
@GetMapping("/test3") public String test3(WebRequest request) { String data1 = request.getParameter("data1"); String data2 = request.getParameter("data2"); String [] data3 = request.getParameterValues("data3"); ... return "result"; } |
▶[@PathVariable]
-데이터가 요청 주소에 있을 경우 값을 주입받을 수 있는 어노테이션.
-Restful API 서버 프로그래밍할 때 多 사용 방식
- 요청주소/값1/값2/값3
ex. [ http://test.com/sub1/sub2/sub3 ]
@GetMapping("/test4/{data1}/{data2}/{data3}") public String test4(@PathVariable String data1, @PathVariable String data2, @PathVariable String data3) { System.out.println("data1:" + data1); System.out.println("data2:" + data2); System.out.println("data3:" + data3); return “result”; } |
▶[@RequestParam]
-파라미터 데이터를 직접 주입받을 수 O
-지정된 변수의 이름과 파라미터 이름이 같을 경우 값을 주입받음
-가능한 경우, 형 변환도 처리해줌
-value 설정: 파라미터 이름과 변수의 이름이 다를 경우, 파라미터 이름을 직접 지정해줌 -required 설정 : false 설정 시 ->지정된 이름의 파라미터 없을 경우 null 주입됨 -defaultValue 설정: 넘어오는 값 없어도 기본적으로 기본값 설정 가능 |
<1> 기본 : 지정변수 = 파라미터 이름 같을 경우, 단순히 값만 주입
@GetMapping("/test5") public String test5(@RequestParam int data1, @RequestParam int data2, @RequestParam int[] data3) { System.out.println("data1: " + data1); System.out.println("data2: " + data2); for(int a1: data3) { System.out.println("data3: " + a1); } return "result"; } |
<2> value 지정 : 지정변수 != 파라미터 이름 다른 경우, 직접 파라미터 이름 지정함
@GetMapping("/test6") public String test6(@RequestParam (value="data1") int value1, @RequestParam (value="data2")int value2, @RequestParam (value="data3") int [] value3) { . . . return "result"; } |
<3> required 설정 :존재하지 않는 파라미터에 대해 오류 발생하지 않고 null 주입
@GetMapping("/test7") public String test7(@RequestParam (required = false) String data1) { ... return “result”; } |
<4> defaultValue 설정 : 넘어오는 파라미터 없을 경우, 기본값 세팅
@GetMapping("/test7") public String test7(@RequestParam (defaultValue = "0") int data1) { . . . return "result"; } |
-> 변수로 파라미터 주입받을 경우, 다량의 데이터 한 번에 받기가 어려움 -> 객체로 한 번에 받기
13강. 객체로 파라미터 주입받기
[Map으로 주입받기]
-클라이언트가 전달하는 모든 파라미터 데이터를 한번에 Map으로 받기
-단 동일명으로 전달되는 2개 이상의 파라미터에 대해서는 여러 값 중 하나만 담게 됨
-따라서 동일명으로 전달되는 파라미터 2개 이상일 경우, List로 주입받아야 함
@GetMapping("/test1") public String test1(@RequestParam Map<String , String> map, @RequestParam List<String> data3){ . . . return "result"; } |
[@ModelAttribute]
-@ModelAttribute 사용하면 파라미터를 빈 객체로 자동 주입받을 수 O
-전달되는 파라미터 이름과 동일한 파라미터에 자동 주입됨
-이 어노테이션은 생략 가능 O
-이러한 객체를 ‘커맨드 객체(Command Object)’ 라고 부름
@GetMapping("/test2") public String test2(@ModelAttribute DataBean bean1) { . . . return "result"; } |
14강. ViewResolver
[ViewResolver]
-컨트롤러에서 전달받은 View의 이름 토대로 jsp 찾아 선택하고 jsp 데이터 분석해 응답결과 만들어 전달하는 요소이다.
-본 과정에서는 ViewResolver가 사용할 View의 이름 지정 방법과 jsp 통해 응답결과 만들 때 필요한 데이터 전달 방법에 대해 살펴본다.
▶[HttpServletRequest]
-Spring MVC는 jsp 처리할 때 HttpServletRequest객체를 jsp 쪽으로 전달한다.
-ViewResolever는 이를 이용해 JSP 작업 시 데이터를 사용할 수 O
▶[Model 객체]
-Model 객체를 주입받아 세팅하면 HttpServletRequest 객체에 담겨 이를 JSP로 전달 가능O
@GetMapping("/test3") public String test3(Model model) { . . . } |
▶[ModelAndView]
ModelAndView는 Model에 값을 세팅하는 기능과 View 이름 지정하는 기능을 갖고 있다.
@GetMapping("/test4") public ModelAndView test4(ModelAndView mv) { //(1) Model에 값을 세팅 mv.addObject("data1", 500); mv.addObject("data2", 200); // (2) - View 이름 지정하는 기능 mv.setViewName("test4"); return mv; } |
[학습정리]
-ViewResolver에 의해 JSP가 실행되고 응답결과가 만들어진다.
-Controller에서 View 지정할 때 ViewResolver가 사용할 데이터를 Request 영역에 저장O
[참고] - 만들면서 배우는 Spring MVC 5 |
'Web(웹)_관련 공부 모음 > [강의] SpringMVC' 카테고리의 다른 글
[Spring] Controller, Service를 분리 작성해야 하는 이유 (0) | 2022.12.06 |
---|---|
Spring MVC의 다양한 기능들-(2) (0) | 2022.04.03 |
Spring MVC 소개 및 프로젝트 세팅 (0) | 2022.02.22 |