> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/back-end/spring-boot/spring-controller/add-jsp.md).

# JSP 연동

## JSP 연동

Controller에서 프로그래밍 로직을 수행한 뒤 JSP 화면으로 포워드(forward) 되도록 설정할 수 있다. Spring Legacy에서는 JSP가 표준이므로 기본 설정되어 있으나 Spring Boot는 View 초기 설정이 존재하지 않는다.&#x20;

Spring Boot에서는 여러 종류의 View 설정이 가능하며, 이 문서에서는 JSP 설정 방법을 살펴본다.

## 의존성 추가

JSP를 사용하기 위해서는 다음 의존성이 필요하다.

* javax.servlet.jstl
* org.apache.tomcat.embed.tomcat-embed-jasper

<mark style="color:blue;">`pom.xml`</mark>의 <mark style="color:blue;">`<dependencies>`</mark>에 다음과 같이 추가한다.

```markup
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
```

## JSP 생성

Spring Boot에서는 <mark style="color:red;">`WEB-INF`</mark>, <mark style="color:red;">`META-INF`</mark> 등의 기존 폴더들을 초기 생성하지 않는다. 따라서 필요한 경우 수동으로 생성해야 한다. <mark style="color:blue;">`JSP`</mark>의 경우 사용자의 직접 접근을 차단하고 컨트롤러와 연결된 경우만 접근이 가능하도록 <mark style="color:red;">`WEB-INF`</mark> 폴더 내부에 보관하는 것이 일반적이다.

Spring Legacy의 기본 JSP 경로와 동일한 위치에 JSP를 보관할 수 있는 폴더를 생성한다.

<div align="left"><img src="/files/FXOZrTsLsQ1DkmvcyXWq" alt=""></div>

생성 메뉴에서 JSP가 보이지 않는다면 다음 문서를 참고하여 플러그인 설치를 해야한다.

{% content-ref url="/pages/T3lYTbj9WkeP0V2eTQnB" %}
[\* JSP 생성불가 문제](/web/back-end/spring-boot/spring-controller/add-jsp/jsp-select-wizard-issue.md)
{% endcontent-ref %}

생성한 폴더에 연결될 JSP 파일을 생성한다(<mark style="color:blue;">`welcome.jsp`</mark>)

<div align="left"><img src="/files/gSb3ol34Fv5S91Bc6DCh" alt=""></div>

## 컨트롤러 매핑 작성

컨트롤러에 다음 코드를 추가한다.

{% code title="HomeController.java" %}

```java
@RequestMapping("/welcome")
public String welcome(){
    return "/WEB-INF/views/welcome.jsp";
}
```

{% endcode %}

<div align="left"><img src="/files/uA0mbSekUJhLjfQ2W6wH" alt=""></div>

<mark style="color:red;">`@ResponseBody`</mark>를 사용하지 않으면 반환되는 값이 View의 경로로 처리된다. 따라서 welcome 메소드 실행 후 welcome.jsp로 이어진다. 이를 **포워드(Forward)**&#xB77C;고 한다. 내부적으로는 DispatcherServlet에서 처리해주며 구조는 다음과 같다.

<div align="left"><img src="/files/oIU18ukIJRtmbGR63nW1" alt=""></div>

## 접속 확인

Spring Boot App이 실행중인지 확인하고 브라우저에서 다음 주소에 접속한다.

{% embed url="<http://localhost:8888/boot02/welcome>" %}

<div align="left"><img src="/files/nE04CjV1MXmIy4h5i62r" alt=""></div>

설정이 잘 되었다면 위와 같이 연결된 JSP 화면이 나오며, 오타 등 코드에 문제가 발생한 경우 다음과 같이 404 Error 화면이 나온다.

<div align="left"><img src="/files/zbYnAW640YEvyIxivDgs" alt=""></div>

## View Resolver 설정

JSP를 <mark style="color:blue;">`/WEB-INF/views`</mark> 폴더에 계속 생성할 예정이므로 앞으로 생성될 컨트롤러의 반환 주소는 반드시 <mark style="color:blue;">`/WEB-INF/views/???.jsp`</mark> 형태가 된다. 반복적이고 비효율적인 작업을 피하기 위해 앞부분의 접두사 <mark style="color:red;">`/WEB-INF/views/`</mark>와 뒷부분의 접미사 <mark style="color:red;">`.jsp`</mark>를 자동 입력되도록 설정할 수 있다.

설정하는 방법은 여러 가지가 있으며, <mark style="color:blue;">`application.properties`</mark>에 설정하는 방법으로 진행한다.

{% code title="application.properties" %}

```properties
#view resolver
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
```

{% endcode %}

`/` 혹은 `.` 등을 누락하면 오류가 발생하므로 정확하게 작성해야 한다.

위와 같이 설정을 하고 나면 Controller에서 반환하는 주소에 자동으로 접두사(prefix)와 접미사(suffix)가 추가되므로 주소를 변경해야 한다.

{% code title="HomeController.java" %}

```java
@RequestMapping("/welcome")
public String welcome() {
	return "welcome";
}
```

{% endcode %}

View Resolver를 사용하면 주소의 공용 부분을 효율적으로 처리할 수 있다.
