[Spring] Spring & Egov *.do 확장자 없이 URL 접근 가능토록 하기
기존 프로젝트에서 *.do 확장자만 사용하다 API 기능을 추가해야하는 상황이 왔다. API 주소에 *.do 확장자를 사용하게 하고 사용하라고 하면 되지만.. 적절하지도 않고 크롤링도 아니고 API 인데 확장자를 *.do 를 쓰게 할 수는 없었다. 결과적으로 변경한 코드는 매우 간단했지만 꽤나 시간을 소비하였다.
webapp/WEB-INF/web.xml 파일이 존재할 것이다. 이 부분에 servlet-mapping 설정 관련이 있을 것이다. 기존의 파일의 경우 아래와 같이 *.do 일 때 설정해놓은 servlet-class 로 이동토록 하였다..
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
url-pattern 을 *.do -> /* 이렇게 변경하면 서버 구동은 되겠지만 jsp 화면이 나오지 않을 것이다. 이유는 기본적으로 *.jsp, *.js 등 servlet-mapping 이 따로 설정되어있었기 때문이다. 그렇기에 /* 로 변경하면 *.jsp 도 위 action 에 설정이 될 것이다. 그렇다면 어떻게 해야하는가? /* -> / 로 변경하면 된다.
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
위와 같이 하면 화면은 보이겠지만 img 등은 보이지 않을 것이다. 이유는 url-pattern 을 / 으로 설정하여 기존에 있던 기본 servlet 을 우리가 덮어 사용하였기 때문이다. 여러 파일을 제대로 불러와주기 위해서는 아래와 같은 추가적인 servlet-mapping 이 필요하다. (출처)
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.ico</url-pattern>
<url-pattern>*.swf</url-pattern>
</servlet-mapping>
위 방법 말고 다른 방법은 dispatcher-servlet.xml 에 <mvc:default-servlet-handler /> 추가해주면 된다. 당연히 이 방법이 간단하고 명료하다.
<mvc:default-servlet-handler />
이와 같이 설정하게 되면 기존에 *.do 확장자를 사용하던 것도 동작하며 *.do 이 아닌 URL 을 생성하여도 호출이 잘 되는 것을 확인할 수 있다.
댓글
댓글 쓰기