무작정 개발.Vlog

[Spring Boot] 스프링 부트에서 JSP 사용하기(JSP파싱)

by 무작정 개발
반응형

이번 글에서는 Spring Boot에서 JSP를 사용하는 방법에 대해 정리할 것이다.

추가로 Spring Boot + JSP를 사용해서 게시판을 작성할 것이다.

해당 글 상단부에서는 SpringBoot에서 JSP 사용하는 방법에 대해 다룰 것이고, 하단부에서는 Spring Boot + JSP 게시판 구현에 대해 다룰 것이다.

 

★ 맨 하단에 해당 글에 관련된  GitHub 링크 첨부

 

최초 작성일 : 2022.03.31(68일 차)
최근 수정일 : 2023.02.15

 

Spring Boot에서 JSP 사용하기 시작(설정 방법)

 

Spring Framework에서는 템플릿 엔진(View)에서 JSP를 사용한다.

하지만 Spring Boot에서는 하단의 공식 문서에도 나와 있듯이 JSP를 사용하는 것을 권장하지 않고, 다른  템플릿 엔진을 추천하고 있다.

스프링 부트 공식문서

또한 spring-boot-starter-web에 포함된  톰캣(tomcat)은 JSP 엔진을 포함하고 있지 않다.

따라서 JSP 파일은 Spring Boot의 templates 폴더 안에서 동작하지 않아 JSP를 사용하고 위해 아래와 같은 의존성을 추가해야 한다.

 

(1) - 의존성 추가 - (Maven & Gradle)

 

빌드 도구를 Maven(메이븐)을 사용한다면 [ pom.xml ]에 아래와 같이 의존성을 추가한다.

 

[ pom.xml ]

  • jasper는 Spring Boot에서 JSP 템플릿 엔진을 사용할 수 있도록 해주는 라이브러리이다.
  • 기본적으로 Spring Boot는 내장 톰캣을 가지고 있지만, JSP 템플릿 엔진이 존재하지 않기에, JSP 라이브러리인 JSTL 또한 사용할 수 있게 추가해야 한다.
<!-- jstl -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>
		
<!-- tomcat-embed-jasper -->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

 

빌드 도구를 Gradle(그레이들)을 사용한다면 [ build.gradle ]에 아래와 같이 의존성을 추가한다.

 

[ build.gradle ]

dependencies {
	implementation 'javax.servlet:jstl'
    implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
}

 

(2) - View 경로 수정 및 프로젝트 구조 수정

위에서 말했듯이 Spring Boot는 JSP 템플릿 엔진을 기본적으로 지원하지 않기에 아래와 같은 정보를 application.properties 혹은 application.yml에 설정해서 Spring Boot에게 JSP 뷰의 경로를 알려줘야 한다.

 

[ application.properties ]

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

위와 같이 View 이름, predix, suffix에 붙는 것들을 설정할 수 있다.

prefix, suffix는 파일 확장자명이며, 밑에 Controller(컨트롤러)에서 return 값을 반환할 때 연결되게 한다.

JSP 뷰 경로를 작성했는데 위의 경로를 예를 들면 webapp/WEB-INF/views/main.jsp 이고, views라는 디렉토리는 내가  임의로 만들어준 폴더이다.

 

반응형

 

이제 View 경로 수정이 끝났으니 프로젝트 구조를 수정할 것이다.

  • [src] - [main] 하위에 [webapp] 디렉토리를 만들어야 한다.
  • application.properties에 지정한 경로에 맞게 디렉토리를 생성했다.

스프링부트 + JSP 사용하기
스프링부트 + JSP 사용하기


Spring Boot + JSP 게시판 구현하기

 

1. 스프링 부트 프로젝트 생성

1. 스프링 부트 프로젝트 생성1. 스프링 부트 프로젝트 생성
1. 스프링 부트 프로젝트 생성

먼저 사용할 것들을 체크해 준다.

 

사용할 lib 체크사용할 lib 체크
사용할 lib 체크

 

프로젝트를 생성하면 위의 사진처럼 파일 구조가 생긴다.

스프링 부트에서 JSP파일을 사용하려면 기존 스프링 부트 파일 구조와 다르게 만들어야 한다.

죄측 : 스프링 부트에 JSP 사용 프로젝트 구조 / 우측 : 기존 스프링 부트 프로젝트 구조죄측 : 스프링 부트에 JSP 사용 프로젝트 구조 / 우측 : 기존 스프링 부트 프로젝트 구조
죄측 : 스프링 부트에 JSP 사용 프로젝트 구조 / 우측 : 기존 스프링 부트 프로젝트 구조

위의 사진처럼 파일 구조를 만들 것이다. 좌측이 스프링 부트에서 JSP을 사용하는 프로젝트 구조이다.

기존 스프링 부트와 다르고 스프링에서의 파일 구조와 유사하다. 대부분의 파일은 기존에 만든 

프로젝트에서 가져올 것이다.

 

2. Maven으로 lib(라이브러리) 추가

[pom.xml]

  • 여기서 필요한 lib를 작성해 줘서 추가를 한다.
  • jasper는 스프링 부트에 JSP를 파싱 시켜주는 기능을 갖고 있다.
		<!-- jstl -->
		<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>jstl</artifactId>
		</dependency>
		
		<!-- tomcat-embed-jasper -->
		<dependency>
    		<groupId>org.apache.tomcat.embed</groupId>
    		<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>

 

3. application.properties 작성 - (스프링 부트의 환경 설정 파일)

#은 여기서는 주석으로 인식된다.

#http port
server.port=8080

#db Connection(Oracle)
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=suzi
spring.datasource.password=a123

#thymeleaf auto refresh
spring.thymeleaf.cache=false

#mybatis mapping
mybatis.type-aliases-package=com.spring.boot.mapper

#mapper.xml location
mybatis.mapper-locations=/mybatis/mapper/**/*.xml

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

이전 스프링 부트 게시판과 대부분 유사하며 맨 하단 2줄이 다르다.

prefix , suffix는 jsp의 경로를 고정적으로 지원해 준다.

prefix는 폴더를, suffix는 파일 확장자명이며 밑에 Controller(컨트롤러)에서 return값을 반환할 때 연결되게 한다.

 

4. BoardController 작성

기존에 만들었던 스프링 부트 게시판 BoardController를 그대로 가져와서 필요한 부분만 변경해 준다.

따라서 변경된 부분만 정리할 것이다.

//@RestController 이거는 boot에서 html을 사용해주는 것이다.
//하지만 부트에 jsp를 파싱할때는 @Controller로 바꿔줘야한다.@@
@Controller
public class BoardController {
	
	@Resource
	private BoardService boardService; //얘를 호출하면 BoardServiceImpl이 딸려들어옴

	@Autowired
	MyUtil myUtil; //@Service로 구현된 MyUtil을 불러온것
	
	@RequestMapping(value = "/")
	public ModelAndView index() throws Exception{
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("index"); //jsp(html)로 갈때는 setViewName // class로 갈때는 setView
		
		return mav;
	}

BoardController 클래스 상단 부분을 한번 보자.

기존 스프링 부트에서는 @RestController 어노테이션을 사용했지만, 스프링 부트에서 JSP파일을 사용하기 위해서는

스프링에서 사용하던 @Controller 어노테이션을 사용해서 객체 생성을 해준다.

나머지 ModelAndView 방식은 동일하고, 넘어가는 경로 부분은 prefix와 suffix에서 설정해 줬다.

 

 

Spring boot - JSP 게시판 실행 화면
Spring boot - JSP 게시판 실행 화면

 

주소는 이전 스프링 부트 게시판과 동일하다.

이전 스프링 부트 게시판과 다른 점 위주로 정리하였는데 전체 소스 코드를 하단 GitHub 링크 참고

https://github.com/chaehyuenwoo/SpringBoot/tree/main/SpringBootBoardJSP

 

GitHub - chaehyuenwoo/SpringBoot: SpringBoot_Study

SpringBoot_Study. Contribute to chaehyuenwoo/SpringBoot development by creating an account on GitHub.

github.com

프로젝트 명 : SpringBootBoardJSP

 


벌써 3월 말이라니.. 수료는 5월 말 시간이 참 빠르다. 아직 부족한 게 많지만 차분히 차곡차곡 실력을

쌓아 나갈 예정이다. 어차피 회사에서 다시 배우고, 국비과정에서 배운 내용들은 다시 한번 쭉 복습을 할 예정이다. 

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기