Spring MVC
Spring MVC는 Spring Framework의 일부로서 웹 애플리케이션을 개발하기 위한 프레임워크입니다.
MVC는 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나입니다.
이 패턴은 애플리케이션의 논리를 쉽게 이해하고, 개발하고, 유지보수하게 해주는 유용한 구조를 제공합니다.
Spring의 View Rendering
Spring의 View 렌더링하는 방법을 알아보겠습니다.
먼저 모델을 생성하고 채웁니다.
이 과정에서 애플리케이션에서 사용할 데이터를 수집하고 구성합니다
@Controller
public class MyController {
@RequestMapping("/somePath")
public String handleRequest(Model model) {
// ... populate the model
model.addAttribute("attributeName", attributeValue);
return "viewName";
}
}
View Resolution을 위해 ViewResolver
가 사용 됩니다
ViewResolver
는 컨트롤러가 반환한 논리적 뷰 이름을 가져와 특정 뷰 인스턴스로 해석합니다.
앞선 MyController에서 return "viewname"
부분이 논리적 뷰이죠
컨트롤러에서 문자열로 된 view 이름을 반환하면, ViewResolver가 보고 뷰를 반환합니다
가장 일반적으로 사용되는 ViewResolver
는 미리 정의된 특정 디렉토리의 JSP 페이지에 뷰 이름을 매핑하는 InternalResourceViewResolver
입니다.
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
}
마지막으로 View 렌더링 에서는 ViewResolver에서 맵핑 해준 view를 렌더링합니다
이 때 모델의 데이터를 사용하여 HTML과 같은 출력을 생성합니다.
JSP의 경우 여기에는 모델 데이터(EL 표현식을 통해 액세스 가능)를 JSP 템플릿과 병합하는 작업이 포함됩니다
<html>
<body>
<h1>Welcome ${attributeName}!</h1>
</body>
</html>
Spring MVC의 자료 구조
Spring MVC는 데이터를 모델에 저장할 때, 기본적으로 java.util.Map
인터페이스를 사용합니다.
이는 자료구조에서 키-값 쌍을 나타내는데 사용되며, 흔히 java.util.HashMap
구현을 사용합니다.
Spring MVC 컨트롤러에서는 Model
인터페이스를 통해 뷰로 데이터를 전달합니다.
Model
인터페이스는 내부적으로 Map
을 사용하여 데이터를 관리하며, 키-값 쌍으로 데이터를 추가하거나 검색할 수 있습니다.
다음은 Model
을 사용하여 데이터를 추가하는 예입니다:
@RequestMapping("/example")
public String example(Model model) {
model.addAttribute("message", "Hello, Spring MVC");
return "exampleView";
}
위의 예에서, "message"
라는 키와 "Hello, Spring MVC"
라는 값을 모델에 추가합니다.
이후 뷰("exampleView"
)는 이 모델 데이터를 사용하여 내용을 생성할 수 있습니다.
그러나 이외에도, Spring은 모델 데이터를 다루는 데 더 많은 유연성을 제공합니다.
@ModelAttribute
어노테이션을 사용하면, 직접적으로 Model
객체를 사용하지 않고도 모델 데이터를 관리할 수 있습니다.
또한, 컨트롤러 메서드가 객체를 반환하면, Spring은 이 객체를 자동으로 모델에 추가합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
Servlet의 상태 정보 저장 (0) | 2023.05.19 |
---|---|
Servlet (0) | 2023.05.19 |
Java 런타임에 매개변수 이름 얻는 방법 (0) | 2023.05.19 |
Spring의 코드 분리 (0) | 2023.05.18 |
Spring Response와 Request (0) | 2023.05.13 |