Spring Boot 개발 스택

     


    프로젝트 만들기

    톰켓 확인


    컨트롤러 만들기

    @RestController 사용

    url 요청을 메서드의 어노테이션으로 요청한다. @RequestMapping("/index")

    HomeController.java

    package com.webstore.web.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HomeController {
    	
    	@RequestMapping("/index")
    	public String sampleMethod() {
    		return "Hello Spring Boot";
    	}
    	
    	@RequestMapping("/gumi")
    	public String sampleMethod2() {
    		return "Hello Gumi!!";	
    	}
    }

    View - 서버 실행하기

    url 요청을 메서드의 어노테이션으로 요청 확인


    구조 만들기 - html, jsp 테스트

     

    webapp는 dynamic web project의 WebContent와 같은 기능을 한다.

    sample.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>WebStore</title>
    </head>
    <body>
    Welcome to WebStroe!
    </body>
    </html>

    실행화면


    jsp를 화면처리 하기위해서는 maven 의존성 추가(jasper) 해줘야 한다.

    저장 경로

    mvnrepository.com/

     

    Maven Repository: Search/Browse/Explore

    WebJar for hmrc-frontend Last Release on Feb 15, 2021

    mvnrepository.com

    version를 제거하면 알아서 다운로드한다.

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.4.2</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.webstore</groupId>
    	<artifactId>SpringWeb2</artifactId>
    	<version>1.0</version>
    	<name>SpringWeb2</name>
    	<description>WebStore Spring Boot Project</description>
    	<properties>
    		<java.version>11</java.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		
    		<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
    		<dependency>
    		    <groupId>org.apache.tomcat.embed</groupId>
    		    <artifactId>tomcat-embed-jasper</artifactId>
    		    <version>10.0.2</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>


    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    </body>
    </html>

    실행화면


    MVC 동작 시키기

    컨트롤러를 목적에 따라서 분리함. - 공지사항 간단한 예제

    기존의 컨트롤러는 서블릿으로 되어있어 단독으로 존재할수 없다.

    하지만 SB에서는 톰켓과 무관한 class이다.

    Model 사용하기

    @Controller 어노테이션 사용

    Model은 model2에서 커맨드

    NoticeController.java

    package com.webstore.web.controller.customer;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller									//뷰페이지를 설정하기 위한 컨트롤러
    public class NoticeController {
    	
    	@RequestMapping("/customer/notice/list")			//list, detail, edit, reg, del
    	public String list(Model model) {
    		
    		model.addAttribute("test", "Hello gumi!!");
    		return "list.jsp";								//앞의 경로가 동일한 경우는 앞부분 생략가능함.
    	}
    	
    	@RequestMapping("/customer/notice/detail")
    	public String detail() {
    		return "";
    	}
    	
    }

    list.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>공지목록 ${test }</title>
    </head>
    <body>
    
    </body>
    </html>

    model이 작동이 잘 되었다.


    구조 만들기 - WEB-INF

    jsp 경로를 변경해준다. WEB-INF/view 만들어준다.

     

    공통적인 부분을 @RequestMapping

    HomeController.java

    package com.webstore.web.controller.customer;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller									//뷰페이지를 설정하기 위한 컨트롤러
    @RequestMapping("/customer/notice/")
    public class NoticeController {
    	
    	@RequestMapping("list")			//list, detail, edit, reg, del
    	public String list(Model model) {
    		
    		model.addAttribute("test", "Hello Daegu!!");
    		return "/WEB-INF/view/customer/notice/list.jsp";								//앞의 경로가 동일한 경우는 앞부분 생략가능함.
    	}
    	
    	@RequestMapping("detail")
    	public String detail() {
    		
    		return "/WEB-INF/view/customer/notice/detail.jsp";
    	}
    	
    }


    view에 대한 리소스 경로명 줄이기 - view resolver

    중복된 부분

    설정하는 추가적인 부분 기술 application.properties

    application.properties

    spring.mvc.view.prefix=/WEB-INF/view/
    spring.mvc.view.suffix=.jsp

     

    NoticeController.java

    package com.webstore.web.controller.customer;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller									//뷰페이지를 설정하기 위한 컨트롤러
    @RequestMapping("/customer/notice/")
    public class NoticeController {
    	
    	@RequestMapping("list")			//list, detail, edit, reg, del
    	public String list(Model model) {
    		
    		model.addAttribute("test", "Hello Pusan!!");
    		return "customer/notice/list";								//앞의 경로가 동일한 경우는 앞부분 생략가능함.
    	}
    	
    	@RequestMapping("detail")
    	public String detail() {
    		
    		return "customer/notice/detail";
    	}
    	
    }


    MVC model2 방식의 변화  

     

    사용자의 요청은 tomcat이 받고 web.xml에 작성 했었다. 

    프론트 컨트롤러의 역할을 spring에서는 Dispatcher로 사용

     

    : Dispatcher(프론트 컨트롤러)를 집중화하기 전모델

     

    : Dispatcher(프론트 컨트롤러)를 집중화한 후 모델

    디스패처서블릿이 기존커맨드 처리

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading