[ MVC servlet-context.xml 태그 이용 Mapping ]
- @Mapping 방식을 사용하기 이전의 방식
- 단점이 많다.
[ Mapping 과정 ]
사용자가 특정 URL로 요청 => Dispatcher Servlet("/")이 받아서 servlet-context.xml 참조
=> handlerMapping ( 마치 HashMap처럼 어떤 key 값 ("/url") 이 들어오면 어떤 Controller 로 연결시킬지 저장해둠 )
=> 해당 Controller(servlet)에서 요청에 대한 처리를 한 후
=> ModelAndView / handleRequest 모델에 응답을 담음 ( addObject / setViewName )
=> return mv 응답
[ web.xml ]
: 전반적인웹 환경설정
( MVC 한정이 아닌 전반적인 web 설정 )
< - DispatcherServlet >
URL pattern "/"
=> 모든 요청 일단 "/" 에서 받음
- 대문 역할해주는 firstController
- 사용자의 모든 요청을 이 대문 Controller 에서 받아서
=> servlet-context.xml 로 넘김
[* servlet-context.xml ]
: Spring MVC 관련 설정파일 ( 위치 : webapp - web inf - spring - appservlet - servlet-context.xml )
=> handlerMapping / component-scan / viewResolver /
- viewResolver
: /web-inf/views/ 경로 + .jsp 붙여줌
=> 파일명만 return 하면 되게끔
< HandlerMapping >
: URL <=> Controller 맵핑
1. 먼저, 컨트롤러들을 bean 으로 등록시켜둔다.
<beans:bean id="hello" class="springMVC.HelloController"></beans:bean>
<beans:bean id="list" class="springMVC.ListController"></beans:bean>
2. 핸들러맵핑
<beans:bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mappings">
<beans:props>
<beans:prop key="/hello">hello</beans:prop>
<beans:prop key="/list">list</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
: /hello URL이 들어오면 => /hello.jsp 파일로 맵핑하겠다.
=> 대충 이런 과정을 거치는 xml 방식 맵핑이었는데 단점ㅡ한계가 너무 컸다.
[[ MVC xml태그 이용의 한계 (servlet-context.xml) ]]
(1) View Model을 같이 보내야 한다.
(2) 하나의 URL 요청당 하나의 Controller 가 필요하다.
(3) 그 Controller 는 매개변수로 HttpServletRequest/Response 를 취해야해서
다른 매개변수를 취하지 못한다.
(4) Handler url 하나하나 맵핑해야됨
=====================================================================
[[ Spring MVC 등장 ]]
=> @어노테이션Mapping 방식으로 단점들을 해결할 수 있다.
@Controller
public class A {
@GetMapping("/a")
LoginDTO m1(){ }
@PostMapping("/b")
String c2(String s){ }
}
[[ @GetMapping @PostMapping ]] (4.버전부터 사용가능)
==
@RequestMapping(value="/login", method=RquestMethod.GET)
@RequestMapping(value="/login", method=RquestMethod.POST)
- 하나의 Controller 안에서
타입, 매개변수 자유로운 메소드로 몇개든지 맵핑해주는 메소드를 만들 수 있다.
- servelt-context.xml <context:componenet-scan> 설정은 필요
( 패키지 여러개일 때, base-package 바꿔서 추가 / 너무 많을시 속도 느려짐 )
[ Spring MVC - URL요청에 대한 Controller Mapping 순서 ]
[ URL ]
- Spring MVC 에서는 파일명을 직접 URL로 사용하지 못하는게 규칙
- View 파일은 WEB-INF/views 에 넣어놓는게 MVC 규칙
1. @GetMapping( " /url " ) / @PostMapping( " /url " )
- 요청 : 정해둔 Mapping URL 로 받음
2. ViewResolver
- 응답 : return "VIEW파일명" 으로 응답 ( URL 은 Mapping URL 유지됨 )
'Back to the Spring' 카테고리의 다른 글
[ 파일 업로드 ] MultipartFile 사용 => transferTo / UUID 파일명 중복방지 (0) | 2022.08.24 |
---|---|
@Mapping 사용법 ( @RequestParam / @ModelAttribute / @PathVariable ) (0) | 2022.08.18 |
[DI] xml 방식 / Componenet - Scan 방식 (0) | 2022.08.18 |
Dependency Injection => Inversion Of Control (0) | 2022.08.18 |
[Spring] Spring MVC 의 등장 (0) | 2022.08.18 |