Spring 입문 강의, Schedule
아래 사진은 짤린 부분만 따로 올린 것입니다.
오늘은 0단계인 erd와 api를 만드는 것까지만 했습니다.
DispatcherServlet : Spring의 프론트 컨트롤러View : 인터페이스로 구성되어 있다, 확장성을 가지고 있다.Spring MVC의 핵심 기능
Spring MVC는 DispatcherServlet 코드의 변경 없이 기능변경 및 확장이 가능
기능들이 대부분 Interface로 만들어져 있기 때문
Controller Interface를 implements 하여 구현하게 되면 개발자가 원하는 Controller(Handler)를 사용할 수 있음
package com.example.springbasicmvc.controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
// Spring Bean 이름을 URL로 설정
@Component("/example-controller")
public class ExampleController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("example-controller가 호출 되었습니다.");
return null;
}
}http://localhost:8080/example-controller 로 HTTP 요청을 하게 되면 응답결과가 반환Handler Mapping, Handler Adapter가 해당 컨트롤러(핸들러)가 호출되도록 만들어줌
Handler Mapping을 통해 찾은 핸들러를 실행할 수 있는 Handler Adapter가 필요
→ Controller Interface를 실행할 수 있는 Handler Adapter를 찾고 실행
Spring Boot를 사용하면 이미 구현되어 있음
HandlerMapping, HandlerAdapter 모두 우선순위대로 조회
HandlerMapping
@RequestMapping에 사용HandlerAdapter
@RequestMapping에서 사용❕ @RequestMapping 은 가장 높은 우선순위의 HandlerMapping인 RequestMappingHandlerMapping 과 가장 높은 우선순위의 HandlerAdapter인 RequestMappingHandlerAdapter 두가지를 사용하며 현대에 사용하는 Annotation 기반의 컨트롤러를 지원
반환된 ModelAndView 객체를 알맞은 View로 전달하기 위해 DispatcherServlet에서 ViewResolver를 호출하여 View 정보를 설정하는 역할을 수행
package com.example.springbasicmvc.controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
// Spring Bean 이름을 URL로 설정
@Component("/view-controller")
public class ViewController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("view-controller가 호출 되었습니다.");
// "test"는 논리적인 ViewName이다. ViewResolver가 물리적인 이름으로 변환해야 한다.
return new ModelAndView("test");
}
}
webapp/WEB-INF/form.JSP<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>블로그 포스트 작성 페이지</title>
</head>
<body>
<h1>블로그 글쓰기</h1>
<form action="save" method="post">
title: <input type="text" name="title" placeholder="제목" />
content: <input type="text" name="content" placeholder="내용" />
<button type="submit">저장</button>
</form>
</body>
</html>spirng.mvc.view.prefix=/WEB-INF/views/
spirng.mvc.view.suffix=.jsplocalhost:8080/view-controller 호출Spring Boot를 사용하면 자동 등록되는 ViewResolver가 있음
아래 두 가지 이외에도 많은 ViewResolver가 존재
// 아래 코드를 자동으로 해주는것과 마찬가지이다.
@Bean
InternalResourceViewResolver internalResourceViewResolver() {
return new InternalResourceViewResolver("/WEB-INF/views", ".jsp");
}
오늘 드디어 Spring 입문 강의를 6주차까지 들었다. 와 마지막 실습 부분이 새로운 문법들이 또 나와서 익히느라 스트레스 좀 받았다.. 그리고 과제를 들어갔다. 대충 이해했다고 생각했는데 혼자 만들어보려고 하니 계속 막혔다. 내일은 실습 부분을 참고해서 하는 것으로 작전 변경해야 겠다. 괜히 혼자 해보려다가 머리만 아프네.. /(ㄒoㄒ)/~~