본문 바로가기
spring | spring boot/오류 해결

spring-화면연결오류 : ResourceHttpRequestHandler :Path with "WEB-INF" or "META-INF" ...

by socialcomputer 2022. 1. 28.
반응형
컨트롤러와 화면은 연결하고 싶어서 처음엔 ModelAndView를 사용하다 잘 안돼서 찾아보니 예전 방식이라고 하여 그럼 익숙한 문자열 형태인 jsp파일 이름을 반환하는 방식으로 바꾸기로 하였다. 
그러나 아래와 같은 에러가 나타났다. 
사실 ModelAndView객체를 이용하는 방법도 뷰 이름을 setViewName으로 지정하여 반환해주면 되지만, 뷰 파일의 위치를 어떻게 해도 해결하지 못해 방법을 바꾼 것이었다. 참고로 template아래에 위치시켜주면 된다.
ResourceHttpRequestHandler :Path with "WEB-INF" or "META-INF" ...

먼저 controller와 화면을 연결시키기 위해선 아래와 같이 application.poperties를 추가해줘야 한다.

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

또한 jsp파일이 알맞은 경로에 있도록 해야 한다. 

src/main/webapp/WEB-INF/views/파일.jsp

WEB-INF에 들어있는 파일은 브라우저로 접근할 수 없고 서버에서만 접근이 가능하다. (브라우저에서 url에 web-inf를 지나는 파일 경로를 치면 접근 불가능하다.)

 

위와 같이 해주었지만 나타난 ResourceHttpRequestHandler :Path with "WEB-INF" or "META-INF" ... 에러의 이유는 spring boot에 내장되어있는 tomcat이 있는데 이 톰캣은 jsp를 처리를 하는 jsp servlet이 없기 때문에 발생한 것이다.
스프링에선 jsp사용을 권하지 않는다나.. 

그리고 spring과 html 파일을 맵핑하고 싶은 거라면 이 방식으론 할 수 없다. 왜냐면 jsp servlet은 html을 처리하는 servlet이 없기 때문이다. 
maven에서는 아래처럼, jstl도 사용한다면 두 번째 dependecy도 추가해줘야 한다. 

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

gradle일 경우는 아래와 같다. tiles는 프론트에서 많이 쓰는 기본 프레임을 제공해준다고 한다. 
implementation('org.apache.tomcat.embed:tomcat-embed-jasper')
implementation('org.apache.tiles:tiles-jsp:3.0.4')
implementation('javax.servlet:jstl:1.2')

다른 기능이 필요하지 않은 이상, jasper만 추가해주면 된다. 

 

 

반응형

댓글