스프링 mvc 프로젝트에 tiles 프레임워크를 설정하는중 에러가 발생했다.
InternalResourceViewResolver 를 통해서 페이지를 호출했을때는 화면이 정상적으로 표시되는데 tiles를 적용하면 다음과 같은 에러가 발생했다.
SEVERE: 경로 [/프로젝트명]의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께,
예외 [Request processing failed; nested exception is org.apache.tiles.definition.DefinitionsFactoryException: XML error reading definitions.]을(를) 발생시켰습니다.
org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 19; Document is invalid: no grammar found.
tiles 를 정의하는 xml 상단 dtd 를 누락해서 생긴 에러였다.
아래는 잘못된 코드 예시이다.
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
...
아래와 같이 상단에 dtd 를 정의하면 해당 에러가 해결됨을 확인할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
...
에러나 오타가 없고 올바르게 정의했는데도 위와 같은 에러가 발생한다면 상단의 dtd 구문을 확인해보면 좋을 것 같다.
아래의 아파치 tiles 홈페이지를 참고했다.
Apache Tiles - Framework - Creating Tiles Pages