지금까지 spring mvc를 사용하면서 다음과 같은 구조로 프로젝트를 진행했다.
project - WEB-INF/jsp
와 같이 jsp 파일을 WEB-INF에 두고 다음과 같이 설정해 사용했다.
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="2" />
</bean>
WEB-INF에 jsp를 두는 이유는 보안상 WEB-INF 디렉토리에 외부에서 직접 접근할 수 없기 때문에 보안상 좋기 때문이다. 위와 같은 구조로 개발할 때는 이슈가 없었다.
그런데 이번 학기에 수업을 하면서 JSP 파일을 웹 기본 디렉토리에서 관리했다. 그랬더니 다음과 같은 이슈가 생겼다. 분명 Controller에 "/"에 대한 설정을 했음에도 불구하고 http://localhost:8080와 같이 접근했을 때 Controller에 직접 접근하지 않고 index.jsp에 직접 접근하는 현상이 발생했다. 처음에 이 이슈 때문에 약간의 삽질한 경험이 있다.
일단 해결책으로 index.jsp가 아니라 home.jsp와 같이 다른 파일로 이름을 변경한 후 해결하기는 했다. 다른 해결책이 있을 것으로 생각하는데 아직까지 찾지 못했다. 수업 중에 사용한 설정은 다음과 같다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web-app [...]>
[...]
<servlet>
<servlet-name>next</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>next</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:order="2" p:prefix="/" p:suffix=".jsp" />
혹시 비슷한 이슈 때문에 삽질하고 있는 개발자가 있다면 jsp 위치를 WEB-INF/jsp와 같이 다른 경로로 변경하거나 index.jsp가 아닌 다른 이름을 사용해 해결할 수 있다. 가장 추천하는 방법은 jsp를 가능하면 WEB-INF에서 관리할 수 있다.
이외에 다른 해결책을 찾아봐도 좋겠다.
0개의 의견 from FB
2개의 의견 from SLiPP
spring context에서 해당 request를 처리하지 않았다는 이야기는 서블릿 컨테이너(톰캣)에서 먼저 선 처리하고 response를 준 것 같은데요? 즉, web.xml등 서블릿 설정에서 filter가 필요하지 않을까요?
늦게 다는거 같긴 하지만, web.xml의 welcome TAG를 찾으셔서 웰컴 파일을 바꿔봐 주세요
아 위에 장윤기님이 벌써 쓰셧네요 하핫
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.