본문 바로가기

프레임워크/Struts2

스트럿츠2 설치시 에러


<BASE target="_son">
스트럿츠2 (Struts2) 를 테스트하고 있었는데 계속 다음과 같은 에러가 나오고 실행이 안되는겁니다.
톰켓을 실행할 때 표시되는 내용:
 
org.apache.catalina.core.StandardContext start
심각: Error filterStart
org.apache.catalina.core.StandardContext start
심각: Context [/strutsTest] startup failed due to previous errors
 
localhost.log 파일에는 이런 식으로 표시되죠.
org.apache.catalina.core.StandardContext filterStart
심각: Exception starting filter struts2
Unable to load configuration. - bean - jar:file: .../WEB-INF/lib/struts2-core-2.1.2.jar!/struts-default.xml:46:178
 
톰켓 버전에 따라서 XML validation disabled 라는 메시지도 표시되는 경우가 있는 것 같습니다.
 
web.xml 에서 필터 부분을 해석해주지 못하니까 에러를 발생시키고 스트럿츠2 실행을 못하는 현상입니다. 구글에서 이렇게 저렇게 찾아봤는데 처음에는 xml 파일을 UTF-8 로 인코딩 선언했는데 파일을 UTF 로 저장할 때 BOM 이 생겼기 때문이라는 글을 봤습니다. web.xml 과 struts.xml 파일을 검사해봤는데 이상 없었습니다.
 
엄청나게 헤맨 끝에 결국 답을 찾았습니다. 스트럿츠2 실행을 위해서 필요한 최소한의 라이브러리가 잘못되어 있었던겁니다. 제가 본 책이나 웹 사이트에는,
 
commons-logging-1.0.4.jar
freemarker-2.3.12.jar
ognl-2.6.11.jar
struts2-core-2.1.2.jar
xwork-2.1.1.jar
 
이 정도만 있으면 스트럿츠2 처음 공부할 때 나오는 HelloWorld 나 튜토리얼 실행 가능하다고 써있지만 이것만으로는 위의 경우같은 에러가 생깁니다. 이를 해결하려면
 
commons-fileupload-1.2.1.jar
 
를 추가해주어야 합니다. 결국 알고보면 별 것 아니었는데 이것때문에 많은 시간을 소비했네요.
jar 파일들의 버전은 사용하는 톰켓과 스트럿츠2 버전에 따라서 달라지겠죠. 제가 마지막 테스트에 사용한 버전은,
 
tomcat-6.0.18
jdk 1.6.0_06
struts-2.1.2 (beta)
 
 
 덧붙여서, 스트럿츠2 테스트 할 때 struts-2.x.x-all.zip 을 받았을 경우 그 안에 들어있는 lib 폴더의 모든 파일들을 라이브러리로 사용해도 문제가 생깁니다. 플러그인 관련 라이브러리들 때문에 생기는 문제니까 자신이 사용하는 목적에 맞는 라이브러리만 선택해서 사용하세요. 테스트라면 위에 나온 정도로 충분합니다.
 
===============================================================================
Error filterStart 가 발생하는 또 다른 경우:
잘 돌아가던 프로그램이 자바와 톰캣의 버전을 변경하면서 안되는 경우가 있습니다.
그런데, 에러메시지는 Error filterStart 외에 별다른 사항이 없어서 사람을 혼란스럽게 만드는 경우도 생깁니다.
 
JDK 1.5 와 Tomcat 5.5 를 쓰는 경우
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
라는 에러가 발생할 수 있습니다.
 
톰캣설치폴더/common/endorsed 안에
 
xercesImpl.jar
xml-apis.jar
 
두 개의 파일이 같이 있는 경우 생기는 에러이며 해결책은 xml-apis.jar 를 지우면 됩니다.
 
struts2 필터 설정의 문제가 아니니 스트럿츠를 탓하지 맙시다...