지금까지 스프링의 전반적이고
기본적인 내용에 대해서 살펴 보았습니다
이제부터 웹 애플리케이션 제작을 위한
스프링 MVC에 대해서 학습하겠습니다
우선 위의 그림에 대해서는
프로젝트를 만들어보면서 알아보겠습니다
Spring MVC 프로젝트를
생성하기 위해서는 추가 설치가 필요합니다
기존에 설치한 것으로는 MVC 프로젝트가 안보일꺼예요
Eclipse Marketplace에 들어갑니다
(지난 번에 해보았죠?^^)
Spring Tools 3 Add-On for Spring Tools를
(그림에서 맨 위)
설치하고 Eclipse를 재시작합니다
자 이제 전에 안보이던 Spring Legacy Project를 생성합니다
그러면 다음 그림과 같이 MVC가 보입니다
이제 쭉쭉 진행해서 생성을 완료합니다
먼저 컨트롤러(Controller)를 살펴보겠습니다
최초 클라이언트(Client)로부터 요청이 들어오면
컨트롤러로 진입하게 되고
컨트롤러는 요청에 대한 작업을 처리한 후
뷰(View)로 데이터를 전달합니다
컨트롤러 클래스를 제작하는 순서는
아래와 같습니다
1. HomeController.java
package com.example.pracmvc;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
생성된 프로젝트에 HomeController 클래스와
위의 제작 과정을 비교해보겠습니다
먼저 HomeController 클래스에
@Controller 어노테이션이 있고
@RequestMapping도 보이네요~
@RequestMapping 어노테이션에 value = "/"가 있고
home 메소드는 home을 반환합니다
아래의 코드를 보겠습니다
2. servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.example.pracmvc" />
</beans:beans>
위의 코드에서 아래쪽에
prefix와 suffix를 지정하는데
@RequestMapping 어노테이션의
"/"는 바로 prefix를 의미하고
반환된 home에 surffix를 붙이는데
결국 /WEB-INF/views/home.jsp를 의미합니다
자 이제 Model 객체를 이용한
데이터 전달을 살펴보겠습니다
HomeController 클래스에 파라미터에
Model이 보이고 addAttribute() 메소드를 통해
값을 세팅하고 있으며
아래의 코드에 home.jsp에서
세팅된 값을 이용하고 있습니다
3. home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
</body>
</html>
지금까지 MVC 프로젝트를 생성하고
MVC에 대해 간단히 살펴봤습니다
오늘의 학습은 이것으로 마치고
다음 시간에 이어서 학습하겠습니다
그럼 이만-_-
'Java' 카테고리의 다른 글
[Java] 스프링(Spring) JDBC(Java Database Connectivity)와 트랜잭션(Transaction) (0) | 2020.10.02 |
---|---|
[Java] 스프링(Spring) 폼(Form) 데이터와 Validator 검증 (0) | 2020.09.29 |
[Java] 스프링(Spring) AOP(Aspect-Oriented Programming) (0) | 2020.09.24 |
[Java] 스프링(Spring) 컨테이너(Container)와 빈(Bean)의 생명 주기(Life Cycle) 및 범위(Scope) (0) | 2020.09.24 |
[Java] 스프링(Spring) DI(Dependency Injection)과 IOC 컨테이너(Container) (0) | 2020.09.23 |