본문으로 바로가기

Spring Boot - (2) Controller 생성 및 JSP 연동

category Backend/Spring 2020. 11. 14. 17:29

이전 포스팅에서 Spring Boot의 기본 세팅을 해봤다.

이번에는 Controller 생성 및 JSP를 연동할 것이다.

최상위 패키지

예) com/example/demo/DefaultApplication.java

@SpringBootApplication
// @SpringBootApplication
// => @EnableAutoConfiguration + @ComponentScan + @Configuration
// 해당 annotation을 설정한 클래스가 있는 package를 최상위 패키지로 인식하고 ComponentScan을 수행
public class DefaultApplication {

    public static void main(String[] args) {
        SpringApplication.run(DefaultApplication.class, args);
    }
}
  • 만약 새로운 파일을 메인 경로와 다른곳에 위치한다면 에러가 난다.

예) com/example/DefaultApplication.java
com/new/TestController.java

  • 에러가 나는 이유는 최상위 패키지가 위치한 경로를 시작으로 전체 ComponentScan을 하기 때문에

    다른 폴더에 있는 Component 들은 스캔하지 못하여 파일을 찾을 수 없다고 뜬다. Not Found Page

    - 새로운 파일을 생성할 때는 꼭 최상위 패키지와 같은 위치의 폴더를 생성하거나 하위에 생성하자.

예) com/example/DefaultApplication.java

 com/example/board/BoardController.java

 com/example/TestController.java

Controller 생성

@Controller
public class TestController {

    @GetMapping("/home")
    // Spring 4.3 이후 간략하게 가능
    // => RequestMapping(value="/home", method=@RequestMethod.GET)
    public String home() {
        return "index.html";
    }

    @ResponseBody
    // => 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할
    @GetMapping("/test1")
    public String valueTest() {
        String value = "test1";
        return value;
    }

}

테스트 페이지 확인

resource/static/index.html 생성하여 다음과 같이 테스트 페이지 작성
(static 안에는 jsp 파일을 넣어도 읽을 수가 없다. 이에 대해 아래에서 따로 작성)

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <div id="test">
            <h1></h1>
        </div>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script>
            $(function () {
                $.ajax({
                    type: "GET",
                    url: "/test1",
                    success: (data) => {
                        console.log(data);
                        $("#test h1").html(data);
                    },
                });
            });
        </script>
    </body>
</html>

test1 실행 결과

link -> localhost:8080

만약 Rest 처리만 하는 경우 다음과 같은 컨트롤러를 생성하면 된다

@RestController
// @Controller + @ResponseBody
// 전역 메서드에 @ResponseBody 이 기본적으로 활성화 되어있다
public class TestRestController {

    @GetMapping(value = "/test3")
    public String getMethodName() {
        String val = "test3";
        return val;
    }

}

JSP 연동 설정 및 테스트

pom.xml 에서 다음을 추가

<!-- jasper (JSP 구동 라이브러리) -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

<!-- jstl 라이브러리 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

application.yml 에서 jsp 경로 설정 (application.properties 에서 확장자 yml로 수정)
(확장자 선택은 본인 자유)

spring:
  mvc:
    view:
      prefix: /WEB-INF/sources/jsp/
      suffix: .jsp

jsp 경로 설정 (src/main/webapp/WEB-INF/sources/jsp) 폴더가 없으면 생성

글쓴이 경로는 이렇다.

index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <h1>${name}</h1>
    </body>
</html>
@GetMapping(value = "/main.do")
public ModelAndView home(Model model) throws Exception {
    model.addAttribute("name", "jeffrey");

    return new ModelAndView("client/index");
}

test2 테스트 결과

link -> localhost:8080/main.do

Previous Chapter

Next Chapter