스트럿츠 설치와 스트럿츠를 이용한 작업은 보통 어려운 일이 아니다.
모델2까지 작업을 해 봤다면 조금 접근하기가 쉬울지도 모르겠다.
하지만 자바 입문과 동시에 스트럿츠를 경험하려고 한다거나
오랫동안 자바를 떠났다가 스트럿츠를 해 보려고 한다면
그 설치에서 부터가 상당히 난관이다.
여기서는 원도우 베이스로 설치 및 개발 테스트를 하려고 하는
개발자들을 위해 간단 설치 버젼으로 소개하려 한다
아래는 JDK1.5, TOMCAT5.5.7, 스트럿츠1.2.8 버젼으로 진행하려 한다.
스트럿츠 1.2.8 다운로드 --> http://archive.apache.org/dist/struts/binaries/ 에서 struts-1.2.8-bin.zip 이걸 클릭하면 된다
스트럿츠 설치에 많은 에러를 만나보았고 나 역시 자바를 거의 5년만에
다시 만져보다 보니 상당히 스트럿츠 설치가 어려웠다
지난 5년동안 닷넷 진영에서 C#과 ASP.NET 개발을 해 왔으며 이전버젼의 ASP
MS-SQL, MYSQL 등 수 많은 프로젝트 개발에 참여 해 오면서
자바 진영의 설치 인터페이스 무료소스 진영에서 배포되고 있는 막대한 양의
정보를 Sun등의 기업이 책임 있게 관리와 지원을 해 나가는 모습이 있다면 어떨까 하는
생각이 들었다
위의 각 파일 중 JDK와 톰캣이 이미 설치되었다는 가정하에서 진행된다
JDK나 톰캣은 여러분이 가지고 있는 서적 또는 웹사이트에서 흔히 접할 수 있다.
그리고 스트럿츠 보다는 배경 지식이 덜 필요하기 때문에 생략하도록 하겠다.
우선 스트럿츠 어떤 버젼을 다운 받으셨던 압축을 풀면 %Struts%lib 폴더에 jar, tlb, dtd등
여러 파일들이 보여질 것이다.
첫째, jar 파일을 전부 %JAVA_HOME%\jre\lib\ext (자바를 설치한 후 JRE를 말하는 것이 아님)
JKD가 설치 된 폴더 아래 JRE 폴더가 따로 있다 거기 복사를 해야 한다 (흔히 하는 실수1)
첫째를 완료 하면 %JAVA_HOME%\jre\lib\ext 폴더 아래는 다음과 같은 파일들이 있을 것이다.
antlr.jar
commons-beanutils.jar
commons-digester.jar
commons-fileupload.jar
commons-logging.jar
commons-validator.jar
dnsns.jar
jakarta-oro.jar
localedata.jar
servlet-api.jar
struts.jar
sunjce_provider.jar
sunpkcs11.jar
둘째, 첫째에서 했던 것과 같이 jar 폴더를 전부 작업하려는 프로젝트 폴더의 WEB-INF/lib 폴더로 복사를 해야 한다.
예) 설치하려는 D:\JSPSample 이라고 한다면 d:\JSPSample\WEB-INF\lib가 되는 것이다.
둘째를 완료 하면 d:\JSPSample\WEB-INF\lib 폴더 아래는 다음과 같은 jar 파일이 있다
antlr.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-fileupload.jar
commons-logging.jar
commons-validator.jar
jakarta-oro.jar
struts.jar
이 과정에서 이렇게 똑같은 파일을 두번 카피하지 않고 classpath 설정해서 쓰는 방법이 있긴 하다
하지만 그렇게 되면 classpath를 환경설정 파일에 등록 해야 하고 상당히 지저분해 진다.
두번 카피하는 것도 오히려 프레임워크 의존적이지 않게 되기 때문에 배포가 더 쉬울것이다.
셋째, tlb, dtd 등 jar파일을 제외한 모든 파일을 개발하려고 하는 프로젝트에 /WEB-INF/tlb 폴더로 복사를 한다 (tlb 폴더가 아니라 WEB-INF에 놓아두어도 상관 없다 web.xml 파일에서 그 설정을 바꿀수 있다)
tlb 폴더를 만들었다라고 가정하면 web.xml의 태그라이브러리 부분을 다음 처럼 설정해야 한다.
아래 web.xml 파일의 파란색 부분을 참조 하자
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Struts Blank Application</display-name>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/config/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
</web-app>
물론 위 파란 부분은 없을 수도 있다.
그것은 프로젝트를 처음 시작할 때 그럴수도 있으며 모르고 있을 수도 있다
즉 위 태그라이브러리를 설정하지 않으면 스트럿츠 정의 태그를 사용하지 않을꺼라는
것과 똑같다. 즉 스트럿츠의 반쪽만 이용하는 샘이 된다.
자 위와 같이 설정 했다면 뭐 어떻게 쓰는지 jsp 파일의 예문을 보도록 하자
(아래 예문은 스트럿츠 1.2.8 버젼의 예제를 그대로 이용한 것이다.
-----index.jsp
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:redirect forward="welcome"/>
<%--
Redirect default requests to Welcome global ActionForward.
By using a redirect, the user-agent will change address to match the path of our Welcome ActionForward.
--%>
위 index.jsp 파일의 taglib의 uri 부분을 보면 파란색으로 보이는 부분과 web.xml 파일의
파란색 부분의 세번째 <taglib-uri> 부분을 확인 해 보면 동일하다는 것을 알게된다.
이런 식으로 xml 파일에서 설저된 부분은 각 JSP 서블릿 빈즈 등 스트럿츠를 사용하는 모든 부분에서
참조하게 컨테이너(여기서는 톰캣5.5.7)가 시작될 때 읽어 들이게 된다.
J2EE완경이 이미 설치된 분들은 여기까지만 따라와도 무리가 없다
하지만 다음을 계속 보자.
넷째, 고작 파일 몇개 복사하고 xml 설정 해 주고 경로 맞춰주고 한 것 뿐이다.
하지만 여기서 그 다음 내용을 보지 않는 다면 다음과 같은 에러를 만날 수도 있다.
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: javax/servlet/jsp/tagext/TagSupport
..... 이하 지면상 생락~~~이 에러난 계속 새로 고침 하다 보면 났다 안 났다 한다그래서 완료 된 건가 뭔가 다른 설정 문제가 있는 건가 하고 착각하기도 한다.위에서 문제점은 어떤 것이 나올지 정확하지는 않다.하지만 위 에러의 경우는 tagext 같은 부분은 J2EE에서 지원하는 서블릿 에러이다.이런 에러를 만났다면 걱정하지 말고 구글 검색창에 j2ee.jar 파일을 검색해서 다운 받도록 하자그리고 첫번째에서 했던것 처럼 %JAVA_HOME%/jre/lib/ext 폴더에 저장(카피)한다그리고 톰캣 재시작~그럼 정상적인 Welcome 화면을 만나게 될 것이다.여기까지 완료 했다면 당신은 Jakarta Struts를 개발할 모든 준비가 다 된 것이다.다섯째, 이런 환경을 만들면서 스트럿츠에 대한 환경변수엔 특별한 것이 없다
본인의 환경 설정 관련 정보를 오픈 하면 다음과 같다.CATALINA_HOME -> D:\ATJO\TOMCAT5.5.7
JAVA_HOME -> D:\ATJO\JDK
Path ->d:\ATJO\JDK\bin;%Path%CATALINA_HOME 같은 경우는 톰캣이 설치된 root 폴더를 지정해 주면 된다.JAVA_HOME 역시 JDK 설치 폴더를 지정해 두었다.Path 경우는 좀 특별한다. 필자의 경우는 ATJO라는 폴더 밑에 전부 존재한다.ATJO는 아파치, 톰캣, 자바(JSP) 오라클의 앞자만을 딴 것이다.C: 드라이브에 이런 저런 것들을 놔 두기 싫어하는 관계로 D드라이브를 이용하였다.이 설정은 여러분 마음대로 해도 좋지만 한곳에 모아놓길 권장한다.다시 Path가 왜 특별한지 얘기를 하면 필자의 경우는 ORACLE이 설치되어 있고스트럿츠를 이용하기 위해서 ORACLE이 가지고 있는 JAVA JAR 파일 보다 먼저 읽혀질 필요가 있었다그래서 PATH환경 변수의 제일 첫 부분에 JDK의 bin 폴더의 경로를 설정한 것이다.이 블로그엔 스트럿츠의 많은 자료들이 담겨 있다앞서간 많은 개발자들의 피땀어린 노력과 그 오픈 정신에 감사한다.
이글 서두에서도 말했지만 알고 나면 간단한 부분을 가지고개발의 문제가 아니라. 고작 프레임워크 설치 문제에 이런 시간과 정열을 소비하게만드는 것 또한 오픈 진영의 문제점이다.잘 아는 사람이 아니면(잘 모르면) 쓰지 말라는 것 처럼 보인다.개념을 더 파악하라든지, 책을 좀 보셔야 할 것 같네요등 게시판에 조롱하듯게시물에 대한 답변을 달아 놓은 몇몇을 보았다이는 MS의 소스 공개 거부나 오픈 소스라도 접근하는 경로가 찾기 어렵다는 거나뭐가 다른건지 모르겠다. 소스를 오픈하는 큰 개발자의 마인드처럼 그 오픈 소스를 이용하는개발자들 역시 그런 정신을 좀 본받을 필요가 있는 것 같다.