# 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를 사용하면 주소의 공용 부분을 효율적으로 처리할 수 있다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sysout.co.kr/web/back-end/spring-boot/spring-controller/add-jsp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
