TodayWhatILeared를 운영하며 처음 선정한 주제인 Spring Boot를 이번 기회에 제대로 공부하여 익숙해지려한다. 가능한지는 모르겠지만 최선을 다하다보면 되지 않을까 싶다.
1) 사용자가 URL을 통해 HTTP 요청을 보내면 DispatcherServlet이 요청을 받게 된다.
2) DispatcherServlet은 HandlerMapper에게 이 요청이 어떤 Controller에게 할당되어야 하는지 맡긴다.
3) HandlerMapper는 Controller를 선택하고 이를 DispatcherServlet에게 넘긴다.
4) DispatcherServlet은 어떤 Controller가 해야하는지 알기에 요청 처리를 넘긴다.
5) Controller는 요청을 처리하거나 확인하고 모델 데이터를 생성한다. 마지막으로, DispatcherServlet에게 View, Model의 이름을 반환한다.
6) DispatcherServlet은 ViewResolver에게 어플리케이션 내 어떤 View가 있는지 요청한다.
7) ViewResolver는 실제 View를 찾아 다시 반환하게 된다.
8) 따라서, View Component에 View와 Model을 보낸다.
9) View Component는 HTML에다가 View, Model을 결합해 내보내게 된다.
10) 최종적으로, Browser 환경에 HTML 결과물을 보내게 된다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
package com.example.springmvchelloworld.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {
"com.example.springmvchelloworld"
})
public class AppConfig {
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
그러나 위 3개의 Annotation을 다 포함한 것이 @SpringBootApplication이라 안써도 괜찮다.
package com.example.springmvchelloworld.model;
public class HelloWorld {
private String message;
private String dateTime;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getDateTime() {
return dateTime;
}
public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}
}
package com.example.springmvchelloworld.controller;
import java.time.LocalDateTime;
import com.example.springmvchelloworld.model.HelloWorld;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HelloWorldController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String handler(Model model) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setMessage("Hello World Example Using Spring MVC 5!!!");
helloWorld.setDateTime(LocalDateTime.now().toString());
model.addAttribute("helloWorld", helloWorld);
return "helloworld";
}
}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head><%@ page isELIgnored="false" %>
<meta charset="ISO-8859-1">
<title>Spring 5 MVC - Hello World Example | javaguides.net</title>
</head>
<body>
<h2>${helloWorld.message}</h2>
<h4>Server date time is : ${helloWorld.dateTime}</h4>
</body>
</html>
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# JSP 수정시 서버 재시작 없이 바로 적용될 수 있게 설정
server.servlet.jsp.init-parameters.development = true