kenzi

스프링 mvc 수업정리(RESTful?url-pattern? 경로?) 본문

Spring

스프링 mvc 수업정리(RESTful?url-pattern? 경로?)

kenzi 2022. 4. 7. 18:24

mvc흐름 

1. 클라이언트의 요청이 DispatcherServlet에 전달 

2. DispatcherServlet는 HandlerMapping을 사용해서 클라이언트의 요청이 전달될 Controller객체를 구한다 

3. DispatcherServlet는 Controller객체의 hanldeRequest()메서드를 호출해서 클라이언트의 요청을 처리한다 

4. Controller.handleRequest()메서드는 처리결과 정보를 담은 ModelAndView객체를 리턴한다 

5. DispatcherServlet는 ViewResolver로부터 처리결과를 보여줄 View를 앞뒤에 경로를 붙여서 구한다 

6. View는 클라이언트에 전송할 응답을 생성한다

 

 

 

 

처리 방법 

1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml파일에 설정한다 

2. 요청 URL과 Controller매핑 방식을 설정 

3. 처리 결과를 어떤 View로 보여줄지 결정하는 ViewResolver로 설정 

4. Controller 작성 

5. EL과 JSTL로 View영역 코드 작성  


 

 

 

 

 

 

 


 

web.xml에서 서블릿 매핑하는 방법

1) 스프링 컨테이너를 xml로 할거면 param-value에 xml경로

2) annotation으로 할거면 param-value에 컨테이너로 쓸 클래스(bean) 경로 - 패키지.클래스명

 

1-1)xml에 viewResolver 로 prefix, suffix 설정해주기 

2-2)컨테이너로 쓸 클래스에 InternalResourceViewResolver 설정하기 

 

 

흐름 : view에서 url 요청 - url패턴에 맞는 서블릿을 찾아서 서블릿 탐 - 컨테이너 타서 빈 객체로 등록된 컨트롤러 탐 - 컨트롤러에서 작업 후 viewResolver에 의해서 - view.jsp파일을 보내줌 

 

 

서블릿 매핑을 2) annotation으로 한 버전 ↓(url패턴 확장자방식으로 했음) 

=> *.do2의 url요청은 dispatcher2 서블릿을 타서 init-param에 의해 container2에 있는 MVCStart.class 컨테이너를 탐 

=>MVCStart컨테이너는 annotation방식의 컨테이너이므로 @Configuration 과 @EnableWebMvc 사용 

@Bean으로 ViewResolver, controller등의 빈 객체 등록 

 

 


Q1) RESTful방식?

RESTful은 REST의 원리를 따르는 시스템을 의미한다

 

그렇다면 REST는 뭔가?

RESTRepresentational State Transfer 의 약자로 

자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고

HTTP Method(POST, GET, PUT, DELETE)를 통해 

해당 자원(URI)에 대한 CRUD Operation을 적용하는 것이다 

 

- REST 어떻게 구성되어있는가?

  • 자원(Resource) - URI
  • 행위(Verb) - HTTP Method (GET, PUT, POST, DELETE등등)
  • 표현(Representations)

- 특징

  1. Server-Client(서버-클라이언트 구조)
  2. Stateless(무상태)
  3. Cacheable(캐시 처리 가능)
  4. Layered System(계층화)
  5. Uniform Interface(인터페이스 일관성)

-장점 

HTTP표준 프로토콜을 따르는 모든 플랫폼에서 사용가능

REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다 

서버와 클라이언트의 역할을 명확하게 분리한다 

 

 

 

REST API란?

REST원리를 따르는 API를 의미하며 이를 설계하기 위해서는

URI에 

1) 명사, 소문자를 사용하기를 권장 (동사, 대문자x)

2) 마지막에 /를 포함하지 않는다 

3) _대신 -를 사용한다 

4) 파일 확장자(~~.jpg, ~~.png)를 포함하지 않는다 

5) 행위를 포함하지 않는다 (http://~~~~/insert-image/1) 

 

그렇다면 RESTful하다는 건? 

REST의 규칙을 올바르게 지킨 API를 사용한 시스템을 RESTful하다고 말할 수 있다 

 

RESTful하지 않은 예 

ex) CRUD 기능을 모두 POST로만 처리하는 API
ex) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

 

 

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

Q2) url-patteren 확장자 방식? path방식?

url-patteren이란 실제 서블릿 매핑 이름을 말한다 

왜 사용하는가? 주소에 서블릿의 경로가 노출되면 보안에 좋지 않기 때문에 매핑 이름을 적어주는 것 

클라이언트가 브라우저에서 요청할 때 사용되며 반드시 슬래시/로 시작 

패턴의 종류에는 3가지가 있다 

1) path방식 2) 확장자(.do)방식  

 

https://lng1982.tistory.com/97

 

web.xml url-pattern / 와 /* 의 차이점

[*.do에서 /* 로 바꾸게 된 이유] 스프링 3.1 샘플 프로젝트의 web.xml(DD) 구성 시 url-pattern을 *.do와 같이 설정하였다. 이유는 단순하다. 프로젝트를 진행할 때 항상 *.do를 사용했기 때문이다. 하지만 RE

lng1982.tistory.com

 

 

Q3) 절대경로? 상대경로?

/ == 현재경로에서 실행해라 

백에서는 /안 적어주면 기본값으로 / 들어간다 = 백엔드는 / 안 적어줘도 된다. 상대경로로 적어줘도 된다

프론트에서는 절대경로(<%=request.getContextPath() %>사용) 로 경로를 다 적어줘야함 

'Spring' 카테고리의 다른 글

@Component? @Controller?  (0) 2022.04.13
@ModelAttribute와 model.addAttribute  (0) 2022.04.08
스프링 mvc흐름  (0) 2022.04.07
스프링 MVC  (0) 2022.04.06
AOP의 order란? & expression표현은 다양하다  (0) 2022.04.06
Comments