저번 시간에 web.xml 파일의 매핑 유형을 수정하는 방식으로 문제를 해결했었는데, 이럴 경우 또다른 문제가 발생하게 된다.
컨트롤러와 뷰가 분리되어 있을 경우에는 두 개를 따로 요청할 수 있는 것이 아니라 무조건 컨트롤러만 요청할 수 있도록 해야하는데, 저번 시간처럼 할 경우 사용자가 컨트롤러를 건너뛰고 뷰를 요청해버리는 일이 발생할 수 있다.
따라서 사용자가 위처럼 뷰 페이지를 직접 요청할 수 없도록 해야하는데, 그 방법은 다음과 같다.
WEB-INF 폴더는 사용자가 접근할 수 없는 영역이므로 요청 또한 막힐 것이다. 따라서 뷰 페이지를 구현한 jsp 파일을 해당 폴더 안에 집어넣음으로써 사용자의 요청을 제한할 수 있다.
파일을 숨기기 위해 WEB-INF 폴더 안에 또다른 폴더를 하나 생성한 뒤, 해당 폴더로 기존에 있던 jsp 파일을 옮겨주었다.
이렇게 하면 사용자의 요청은 거절되며, 컨트롤러에서의 요청은 받아들이게 된다. 이에 맞게 컨트롤러의 코드도 적절한 경로로 수정해준다.
만약 아래와 같이 <bean> 태그의 id 속성을 변경하면 어떻게 될까?
우리는 현재 aa라는 폴더도 갖고 있지 않지만 위처럼해도 오류가 발생하지 않는다. 그 이유는 id 속성은 그저 이름으로써의 역할을 수행하기 때문이다. 때문에 위와 같이 이름을 바꾼다면 우리는 다음과 같이 페이지를 요청할 수 있다.
이와 별개로 url를 자세히 보면 프로젝트 명이 포함된 것을 확인할 수 있다. 이 부분도 수정해주기 위해 다음의 설정을 수행한다.
현재 프로젝트를 우클릭한 뒤, Properties -> Web Project Settings로 이동하여 Context Root를 '/'로 변경하고 적용시킨다.
이후 이전처럼 컨트롤러 파일을 열어서 실행시키면 뷰 페이지가 나오지 않게 된다. 따라서 약간의 편법을 사용하기 위해 'index'라는 이름의 빈 파일을 webapp 폴더 안에 만들어주었다.
이제 방금 생성한 index 파일을 열어 실행시켜보면 뷰 페이지가 출력되는 것이 확인할 수 있다.
이런 현상이 발생하는 이유는, 이클립스는 webapp 루트에 있는 특정 파일을 선택한 뒤 실행하면 해당 파일의 이름을 브라우저 경로에 작성해준다. 즉, 우리는 'index'라는 파일을 선택해 실행하였기 때문에 브라우저 경로에 자동으로 '/index'라는 구문이 들어가게 되고 해당 경로는 컨트롤러에 뷰 페이지를 요청할 때 사용하는 이름과 동일하기 때문에 이처럼 작동하는 것이다.
우리는 위에서 뷰 페이지를 사용자로부터 숨기기 위해 폴더를 따로 생성하여 옮기는 작업을 수행하였다.
그렇다면 만약 생성되는 폴더가 많아지고 경로가 길어지게 되면 컨트롤러에서 뷰 페이지를 찾기 위한 구문이 복잡해지는 경우가 발생하게 된다.
이를 해결하기 위해 사용하는 것이 ViewResolver이다. 설정을 위해 dispatcher-servlet.xml 파일에 코드를 추가해준다.
이후 컨트롤러 클래스로 돌아와 경로를 다음과 같이 설정해준다.
이렇게 하면 우리는 경로를 'index'로만 지정해줘도 ViewResolver에 의해 자동으로 앞에는 '/WEB-INF/view/'가 뒤에는 '.jps'가 붙여져 완전한 경로가 완성될 것이다.
이후 실행하여 잘 작동하는지 확인해본다. 참고로 위에서 생성한 index 파일에서 실행해야 한다.
추가 사항
글을 작성하고 검토하다 보니 브라우저 경로에서 프로젝트 명이 그대로 보이고 있는 것을 확인하였음.
다음 방법을 통해 해결할 수 있음.
이클립스 Servers 탭에서 현재 사용중인 서버를 더블 클릭하여 설정 창을 띄운 뒤, Modules 탭으로 이동하여 요소를 클릭하고 'Edit' 버튼을 통해 path를 '/'로 수정하고 저장
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 14. 컨트롤러 추가 및 페이지 모듈 분리 (0) | 2022.04.21 |
---|---|
[Java / Spring] 13. 정적 파일 서비스하기 (0) | 2022.04.20 |
[Java / Spring] 11. Dispatcher Servlet 라이브러리 설정하기 (0) | 2022.04.18 |
[Java / Spring] 10. 메이븐을 이용한 기본 웹 프로젝트 생성하기 (0) | 2022.04.17 |
[Java / Spring] 0. 메이븐 프로젝트 생성시 pom.xml 오류 해결 (0) | 2022.04.17 |