|
Space Map
|
Xdoclet 사용하기Summary : 웹 애플리케이션의 구조가 점점 복잡해지면서 하나의 웹 애플리케이션을 개발하기 위하여 관리해야하는 Descriptor파일들(web.xml, taglib files, ejb-jar.xml등)이 점차 많아지고 있다. 또한 개발되는 애플리케이션에서 다른 프레임워크을 추가하는 경우라면 이 수는 더욱 증가하게 된다. 스트럿츠를 이용하기 위해서도 struts-config.xml을 따로 관리해주어야 한다. Xdoclet을 이용하여 수 많은 Descriptor파일과 소스파일 사이의 동시성을 유지하도록하는 방법에 대하여 살펴본다. 예제 실행 방법스트럿츠의 세부 항목을 살펴보기에 앞서 이 장의 Xdoclet예제를 먼저 실행해보는 것이 이 장을 이해하는데 많은 도움이 될 것이다. 따라서 이 장의 예제를 실행하는 방법에 대하여 살펴보도록 하겠다. 3장 예제의 디렉토리 구조를 살펴보면 다음과 같다. ![]() 3장 예제를 실행하기 위한 과정을 살펴보면 다음과 같다. Tomcat, ANT의 설치에 관한 자세한 내용은 부록 1을 참조하기 바란다. 다음 설명은Tomcat, ANT가 설치되어 있다는 가정하에 설명을 진행하도록 하겠다. 3장의 Xdoclet예제를 빌드하는 방법은 간단하다. 이 장에서 개발한 Xdoclet예제는 servlet, taglib, struts 3가지 설정파일을 자동생성하는 방법에 대하여 살펴보았다. 따라서 3가지 예제를 각각 실행해 보기 위하여 빌드 또한 3가지 방법으로 할 수 있도록 구현하였다. 따라서 빌드하는 과정을 3가지 방법으로 살펴보도록 하겠다. Servlet - web.xml
http://localhost:8080/chapter3/HelloWorldServlet http://localhost:8080/chapter3/HelloWorld http://localhost:8080/chapter3/hi.HelloWorld
Taglib - *.tld
Struts - struts-config.xml
기타
빌드시 주의할 점과 궁금한 점.
*2. Ant와 Xdoclet을 이용한 개발 방법* 웹 애플리케이션의 구조가 점점 복잡해지면서 하나의 웹 애플리케이션을 개발하기 위하여 관리해야하는 웹 애플리케이션의 규모가 특히 EJB를 기반으로 개발하는 웹 애플리케이션의 경우 관리해야하는 Xdoclet은 점점 더 복잡해지고, 수 많은 Descriptor파일과 소스파일 Xdoclet 사이트에서는 Xdoclet을 사용할 경우 다음과 같은 이득을 얻을 수 있다고 주장한다.
Xdoclet의 진정한 장점은 EJB를 개발할 때 발휘된다. 그러나 스트럿츠 프레임워크도 많은 *2.1 Xdoclet 설치* Xdoclet으로 web.xml, ejb-jar.xml, struts-config.xml등의 Xdoclet은 에서 Xdoclet 1.2.0 베타3 버전을 다운받는다.
이 책의 *2.2 Xdoclet 예제* Xdoclet예제는 보여주기 위하여 먼저 서블릿예제를 먼저 보도록 하자. 서블릿을 생성한 다음 웹 마지막 예제로 스트럿츠 프레임워크를 이용하여 웹 *2.2.1 서블릿 예제* 자바로 웹 애플리케이션을 개발해본 개발자들이라면 web.xml이 웹 애플리케이션의 배치 package net.javajigi.chapter3.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @web.servlet name="HelloWorldServlet" * display-name="HelloWorld Servlet" * * @web.servlet-init-param name="name" * value="${hello.servlet.name}" * * @web.servlet-mapping url-pattern="/HelloWorld/*" * @web.servlet-mapping url-pattern="*.HelloWorld" * @web.servlet-mapping url-pattern="/HelloWorldServlet" */ public class HelloWorldServlet extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } protected void process( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = this.getServletConfig(); String name = config.getInitParameter("name"); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>HelloWorld Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hih2. " + name + ". Hello Worldh2.</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } } [예제 3-1]HelloWorldServlet.java [예제 3-1]을 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app > ... <distributable/> <servlet> <servlet-name>HelloWorldServlet</servlet-name> <display-name>HelloWorld Servlet</display-name> <servlet-class> net.javajigi.chapter3.servlet.HelloWorldServlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>JavaJiGi</param-value> </init-param> </servlet> ... <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/HelloWorld/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>*.HelloWorld</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/HelloWorldServlet</url-pattern> </servlet-mapping> ... </web-app> [예제 3-2]web.xml 다음은 [예제 3-2]와 같은 결과가 어떻게 *2.2.1.1 단계 1 : 서블릿 엘리먼트를 정의하는 방법* Xdoclet을 이용하여 web.xml에 서블릿을 자동으로 매핑하기 위해서는 먼저 /** * @web.servlet name="HelloWorldServlet" * display-name="HelloWorld Servlet" ... */ public class HelloWorldServlet extends HttpServlet { 위와 같이 작성된 태그에 의하여 생성되는 web.xml은 다음과 같다.
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<display-name>HelloWorld Servlet</display-name>
<servlet-class>net.javajigi.chapter3.servlet.HelloWorldServlet</servlet-class>
...
</servlet>
생성된 web.xml을 보고 '>servlet-class/<는 어떻게 알 수 있을까?'라고 *2.2.1.2 단계 2 : 서블릿 초기 인자를 정의하는 방법* 서블릿을 개발하다보면 서블릿에 초기 인자를 전달해야 하는 경우가 발생한다. web.xml에서
#HelloWorldServlet에서 참조하고 있음. 원하는 값으로 수정할 수 hello.servlet.name=JavaJiGi *2.2.1.3 단계 3 : 서블릿 매핑을 정의하는 방법* 마지막으로 추가된 서블릿을 사용하기 위해서는 서블릿 매핑이 필요하다. 서블릿 매핑에 대해서는
위 태그는
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorld/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>*.HelloWorld</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
web.xml의 서블릿 매핑 정보는 web.servlet-mapping태그를 이용하여 2.2.1.4 단계 4 : ANT 빌드를 통하여 web.xml생성하기 단계 3까지의 과정으로 서블릿을 작성했다면 마지막 과정을 ANT를 이용하여 빌드함으로서 <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.class.path" /> Xdoclet의 Task들은 ANT에서 이미 정의 되어 있는 Task가 아니기 때문에 위와 ANT에서 webdoclet을 이용하여 web.xml을 <target name="generateDD" depends="init"> <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.class.path" /> <webdoclet destdir="${build.dir}"> <fileset dir="${src.dir}"> <include name="**/*Servlet.java" /> <include name="**/*Filter.java" /> </fileset> <deploymentdescriptor servletspec="2.3" destdir="${build.dir}/WEB-INF" > </deploymentdescriptor> </webdoclet> </target> web.xml은 최종적으로 >webdoclet/<태그의 web.xml이 생성되는 과정을 확인해 http://localhost:8080/chapter3/HelloWorldServlet http://localhost:8080/chapter3/HelloWorld http://localhost:8080/chapter3/hi.HelloWorld 위 세개의 URL모두 다음과 같은 결과를 얻을 수 있을 것이다. ![]() [그림 3-10] HelloWorldServlet을 실행한 결과 web.xml을 생성하기 위한 Xdoclet태그에 대해 더 자세한 정보는 를 참조하기 바란다. *2.2.2 커스텀 태그 예제*커스텀 태그 하나를 생성하기 위해서는 커스텀 태그 클래스를 먼저 작성해야 한다. 그 다음 생성된 커스텀 태그 정보를 가지는 tld파일을 생성해야 한다. tld파일에서 가장 많이 수정되는 부분은 커스텀 태그에 애트리뷰트가 추가, 수정, 삭제될 때이다. 개발하고 있는 웹 애플리케이션에서 많은 수의 커스텀 태그를 개발한다면 이 또한 상당한 작업 시간으로 요한다. 개발자사이에 tld파일의 동시성을 유지하는 것 또한 쉽지 않다. 따라서 커스텀 태그 tld파일을 Xdoclet을 이용하여 생성하는 과정에 대하여 살펴보도록 하겠다. package net.javajigi.chapter3.taglib; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /** * @jsp.tag name="helloWorld" */ public class HelloWorldTag extends TagSupport { private String name = null; public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); out.println("Hih2. " + name + ". Hello Worldh2."); } catch (IOException e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } /** * @jsp.attribute required="true" * rtexprvalue="true" * description="User Name" */ public String getName() { return name; } /** * @param string */ public void setName(String name) { this.name = name; } } [예제 3-3]HelloWorldTag.java [예제 3-3]의 커스텀 태그 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name> helloworld </short-name> <tag> <name>helloWorld</name> <tag-class>net.javajigi.chapter3.taglib.HelloWorldTag</tag-class> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>User Name</description> </attribute> </tag> </taglib> [예제 3-4] mytaglib.tld [예제 3-3]을 ANT를 이용하여 빌드하면 *2.2.2.1 단계 1 : 태그 이름을 정의하는 방법* 커스텀 태그 이름을 정의하기 위해서는 클래스 레벨의 Xdoclet 태그인 jsp.tag를 /** * @jsp.tag name="helloWorld" */ public class HelloWorldTag extends TagSupport { jsp.tag Xdoclet태그에 의하여 작성된 tld파일은 다음과 같다. <name>helloWorld</name> <tag-class>net.javajigi.chapter3.taglib.HelloWorldTag</tag-class> 생성된 tld파일을 보면 서블릿 예제에서 본 바와 같이 태그 이름만 정의하면 태그 클래스에 *2.2.2.2 단계 2 : 태그 애트리뷰트를 정의하는 방법* 태그를 생성할 때 가장 자주 변경되는 부분이 애트리뷰트이다. 애트리뷰트는 메써드 레벨의 /** * @jsp.attribute required="true" * rtexprvalue="true" * description="User Name" */ public String getName() { return name; } jsp.attribute 태그의 내용을 보면 tld파일의 애트리뷰트를 추가할 때 필요한 모든
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>User Name</description>
</attribute>
HelloWorldTag에 name 애트리뷰트 이외에 다른 애트리뷰트를 추가한 다음 *2.2.2.3 단계 3 : ANT빌드를 통하여 web.xml, tld파일 생성하기* Xdoclet태그를 통하여 작성된 소스코드는 서블릿과 같이 ANT를 이용하여 최종 빌드함으로서 <target name="generateDD" depends="compile"> <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.class.path" /> <webdoclet destdir="${build.dir}"> <fileset dir="${src.dir}"> <include name="**/*Tag.java" /> </fileset> <!-- web.xml을 생성하는 역할을 담당하며, web.xml에 새로 생성되는 tld파일을 추가한다. --> <deploymentdescriptor servletspec="2.3" destdir="${build.webinf.dir}" > <taglib uri="http://www.javajigi.net/mytaglib" location="/WEB-INF/tlds/mytaglib.tld" /> </deploymentdescriptor> <!-- tld파일을 생성하는 부분이다. --> <jsptaglib jspversion="1.2" destdir="${build.webinf.dir}/tlds" shortname="helloworld" filename="mytaglib.tld"/> </webdoclet> </target> tld파일을 자동적으로 생성하기 위하여 ANT의 Target을 작성할 때 두가지 사항을
<taglib>
<taglib-uri>http://www.javajigi.net/mytaglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytaglib.tld</taglib-location>
</taglib>
지금까지 작성한 예제를 테스트해보기 위하여 "ant taglib"" 실행하여 <%@page contentType="text/html; charset=euc-kr" %> <%@ taglib uri="http://www.javajigi.net/mytaglib" prefix="mytag"%> <html> <head> <title>HelloWorld Tag</title> </head> <body> <h1> <mytag:helloWorld name="JavaJiGi"/> </h1> </body> </html> [예제 3-5] mytag를 사용하고 있는 helloworld.jsp 커스텀 태그의 tld파일을 생성하기 위한 Xdoclet태그에 대해 더 자세한 정보는 *2.2.3 스트럿츠 예제*지금까지 서블릿과 커스텀 태그 소스코드에 Xdoclet태그를 추가하여 web.xml과 tld파일을 자동으로 생성하는 방법에 대하여 배웠다. 스트럿츠를 기반으로하는 웹 애플리케이션에서도 서블릿과 커스텀 태그를 작성하는 경우가 많기 때문에 지금까지 살펴본 위 예제는 계속해서 사용된다. 스트럿츠를 기반으로하는 애플리케이션은 struts-config.xml을 생성하기 위하여 지금까지 살펴본 예제들보다 훨씬 더 많은 클래스들이 관여한다. struts-config.xml이 포함하고 있는 정보들을 보면 Action, ActionForm, Exception, Plugin,Controller등 수 많은 정보들을 포함하고 있다. 이 절에서는 Xdoclet을 이용하여 struts-config.xml을 자동으로 생성하는 방법에 주안점을 두고 있기 때문에 이 중 가장 많이 사용되는 Action, ActionForm만을 살펴보도록 하겠다. 나머지 항목에 대해서는 4장부터 다루는 실전예제들에서 다루도록 하겠다. struts-config.xml이 자동으로 생성되는 과정을 보면 Xdoclet의 필요성을 다시 한번 느낄 수 있을 것이다. package net.javajigi.chapter3.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * XDoclet definition: * @struts:form name="userForm" */ public class UserForm extends ActionForm { private String password = null; private String userId = null; private String email = null; private String name = null; public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { return null; } public void reset(ActionMapping mapping, HttpServletRequest request) { password = null; userId = null; email = null; name = null; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String string) { name = string; } } [예제 3-6] UserForm.java package net.javajigi.chapter3.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.javajigi.chapter3.struts.form.UserForm; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * @struts.action * name="userForm" * path="/userInfo" * input="/user_write.jsp" * scope="request" * validate="true" * * @struts.action-forward * name="userinfo" * path="/user_info.jsp" */ public class UserAction extends Action{ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("user", (UserForm)form); return mapping.findForward("userinfo"); } } [예제 3-7] UserAction.java [예제 3-6], [예제 3-7]은 <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <!-- ========== Data Sources Definitions =================================== --> <!-- Define your Struts data sources in a file called struts-data-sources.xml and place it in your merge directory. --> <!-- ========== Form Bean Definitions =================================== --> <form-beans> <form-bean name="userForm" type="net.javajigi.chapter3.struts.form.UserForm" /> <!-- If you have non XDoclet forms, define them in a file called struts-forms.xml and place it in your merge directory. --> </form-beans> <!-- ========== Global Exceptions Definitions =================================== --> <!-- Define your exceptions in a file called global-exceptions.xml and place it in your merge directory. --> <!-- ========== Global Forward Definitions =================================== --> <!-- Define your forwards in a file called global-forwards.xml and place it in your merge directory. --> <!-- ========== Action Mapping Definitions =================================== --> <action-mappings> <action path="/userInfo" type="net.javajigi.chapter3.struts.action.UserAction" name="userForm" scope="request" input="/user_write.jsp" unknown="false" validate="true" > <forward name="userinfo" path="/user_info.jsp" redirect="false" /> </action> <!-- If you have non XDoclet actions, define them in a file called struts-actions.xml and place it in your merge directory. --> </action-mappings> <!-- Define your Struts controller in a file called struts-controller.xml and place it in your merge directory. --> <!-- Define your Struts message-resources in a file called struts-message-resources.xml and place it in your merge directory. --> <!-- Define your Struts plugins in a file called struts-plugins.xml and place it in your merge directory. --> </struts-config> [예제 3-8]struts-config.xml [예제 3-6]와 [예제 *2.2.3.1 단계 1 : Form 이름을 정의하는 방법* 스트럿츠의 Form은 DynaActionForm을 상속하는 Form이 아닐 경우에는 /** * XDoclet definition: * @struts:form name="userForm" */ public class UserForm extends ActionForm { 위 소스코드에 의하여 생성되는 struts-config.xml의 태그는 >form-bean/<태그이다.
<form-bean
name="userForm"
type="net.javajigi.chapter3.struts.form.UserForm"
/>
struts:form Xdoclet태그에 의하여 >form-bean/<태그가 생성되는 내용에 *2.2.3.2 단계 2 : Action 정보를 정의하는 방법* 하나의 Action을 정의하는 것은 Form처럼 간단하지 않다. /** * @struts.action * name="userForm" * path="/userInfo" * input="/user_write.jsp" * scope="request" * validate="true" * * @struts.action-forward * name="userinfo" * path="/user_info.jsp" */ public class UserAction extends Action{ Action클래스에서 정의해야할 Action클래스의 정보는 두가지로 나뉜다. 첫번째는 <action-mappings> <action path="/userInfo" type="net.javajigi.chapter3.struts.action.UserAction" name="userForm" scope="request" input="/user_write.jsp" unknown="false" validate="true" > <forward name="userinfo" path="/user_info.jsp" redirect="false"/> </action> UserAction클래스에서 작성된 Xdoclet의 Action정보가 그대로 *2.2.3.3 단계 3: ANT 빌드를 통하여 struts-config.xml 생성하기* 앞에서 작성한 UserForm, UserAction을 이용하여 <target name="generateDD" depends="compile"> <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.class.path" /> <webdoclet destdir="${build.dir}" mergedir="${merge.dir}" > <fileset dir="${src.dir}"> <include name="**/*Filter.java" /> <include name="**/*Action.java" /> <include name="**/*Form.java" /> </fileset> <deploymentdescriptor servletspec="2.3" destdir="${build.webinf.dir}" > </deploymentdescriptor> <strutsconfigxml destdir="${build.webinf.dir}"/> </webdoclet> </target> Target의 내용은 앞에서 살펴본 두 예제와 별반 다르지 않다. 특이할만한 부분은 ANT의 *2.2.3.4 단계 4 : 스트럿츠 프레임워크를 지원하기 위한 web.xml생성하기* 웹 애플리케이션에서 스트럿츠 프레임워크를 사용하기 위해서는 web.xml설정 파일에 이 같은 문제점을 해결하기 위하여 ANT의 merge기능이 스트럿츠
<!-- Struts -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>Resources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
[예제 3-9]web.xml에 추가할 servlets.xml
<!-- struts -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
[예제 3-10] web.xml에 추가할 servlet-mappings.xml ANT의 merge기능을 이용하여 [예제3- 9]과 [예제 3-10]을 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app > <distributable/> <!-- Struts --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>Resources</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- struts --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> [예제 3-11] 예제 3-9, 예제 3-10을 이용하여 생성된 web.xml 이상으로 스트럿츠 프레임워크를 기반으로하는 웹 애플리케이션을 개발하기 지금까지 개발한 예제 소스를 테스트해보자. 앞의 예제들과 같이 'ant ![]() [그림 3-11] 사용자 정보를 출력하는 화면 스트럿츠 예제에 한글 문제를 *2.3 Xdoclet 매뉴얼 사용하는 방법* Xdoclet은 개발자들이 흔히 만들어왔던 web.xml, tld, ejb-jar.xml파일들외에도 *2.3.1 ANT에서 사용할 태스크* 지금까지 살펴본 예제를 보면 알겠지만 클래스에 추가된 Xdoclet태그를 이용하여 설정파일을 http://xdoclet.sourceforge.net 의 Ant Task Reference에서 찾을 수 있다. 현재 7개의 태스크를 제공하고 스트럿츠 설정파일은 >webdoclet ../< 태스크를 을 보면 >webdoclet ../<엘리먼트에서 사용할 수 있는 속성 정보와 하위 이 같은 <target name="strutsgenerateDD" depends="compile"> <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.class.path" /> <webdoclet destdir="${build.dir}" mergedir="${merge.dir}" > <fileset dir="${src.dir}"> <include name="**/*Filter.java" /> <include name="**/*Action.java" /> <include name="**/*Form.java" /> </fileset> <deploymentdescriptor servletspec="2.3" destdir="${build.webinf.dir}" > </deploymentdescriptor> <strutsconfigxml version="1.1" destdir="${build.webinf.dir}"/> </webdoclet> </target> 위 예제에서 deploymentdescriptor는 web.xml을 생성하는 하위 *2.3.2 자바소스코드에 사용할 태그 매뉴얼* Xdoclet을 이용하여 설정파일을 자동적으로 생성하기 위해서는 자바소스에 각 프레임워크별 왼쪽 메뉴의 Tag Reference에서 찾을 수 있다. 현재까지 지원하는 프레임워크는 먼저 스트럿츠 설정파일을 생성하기 위한 사용할 [http://xdoclet.sourceforge.net/tags/apache-tags.html
스트럿츠 설정파일을 생성하기 위하여 ANT용 스크립트를 *3. 생각해볼 문제* 처음 이 장을 쓰기 시작할 때 '어떻게 하면 현업 개발자들이 스트럿츠를 기반으로 개발할 경우 툴을 사용할 수 있게 필자가 위 두가지 툴을 사용하면서 느낀 점은 'Easy Struts를 이용하는 Easy Xdoclet을 이용하여 최고의 개발속도를 내기 위해서는 CVS(Concurrent 좋은 툴을 적재적소에 사용하는 것 또한 개발자의 능력이다. 언어가 계속해서 변화하듯이 강좌에 대하여작성자 : 박재성 문서이력 :
참고 자료
|
|




Add Comment