2008-10-02 2 views
5

일부 JSP 및 JSP 태그 파일을 포함하는 웹 응용 프로그램의 경우 보통 web.xml이 있습니다. 미리 컴파일 된 jsp를 사용하는 것으로 전환하고 싶습니다. 빌드 전에서 컴파일이 진행되었고 web.xml 조각이 생성되었으므로 이제 조각을 주 web.xml에 병합하려고합니다.개미를 사용하여 jsp 미리 컴파일 된 web.xml 조각을 기본 web.xml과 병합하는 방법

의 web.xml 날 조각을 포함하게됩니다에 대한 유형 지시자가 포함입니다.

이상적으로 나는 jsp를 즉시 변경하고 UAT/PROD에 대한 변경 사항을 볼 때 유용하므로 DEV에 대한 것만 둡니다. 그러면 JSP가 사전 컴파일되어 더 빨리 작동합니다.

답변

4

내 프로젝트에서 JSP를 사전 컴파일하여 서블릿에 사전 컴파일하고 원래의 web.xml에 새 서블릿 매핑을 추가하는 Tomcat jasper ANT tasks을 사용합니다. DEV 빌드에서이 단계를 건너 뛰고 web.xml의 사전 컴파일 및 수정없이 JSP를 배포하면됩니다.

이미 JSP 컴파일 작업이 단지의 web.xml 파일을 병합 할 경우, 간단한 XSLT가 새로 생성 된 웹에서 (예 : 서블릿 매핑 등)을 선택 요소를 추가 작성할 수
<?xml version="1.0"?> 
<project name="jspc" basedir="." default="all"> 
<import file="${build.appserver.home}/bin/catalina-tasks.xml"/> 

<target name="all" depends="jspc,compile"></target> 

<target name="jspc"> 
    <jasper 
    validateXml="false" 
    uriroot="${build.war.dir}" 
    webXmlFragment="${build.war.dir}/WEB-INF/generated_web.xml" 
    addWebXmlMappings="true" 
    outputDir="${build.src.dir}" /> 
</target> 

<target name="compile"> 
    <javac destdir="${build.dir}/classes" 
    srcdir="${build.src.dir}" 
    optimize="on" 
    debug="off" 
    failonerror="true" 
    source="1.5" 
    target="1.5" 
    excludes="**/*.smap"> 
    <classpath> 
    <fileset dir="${build.war.dir}/WEB-INF/classes"> 
    <include name="*.class" /> 
    </fileset> 
    <fileset dir="${build.war.lib.dir}"> 
    <include name="*.jar" /> 
    </fileset> 
    <fileset dir="${build.appserver.home}/lib"> 
    <include name="*.jar" /> 
    </fileset>  
    <fileset dir="${build.appserver.home}/bin"> 
    <include name="*.jar"/> 
    </fileset> 
    </classpath> 
    <include name="**" /> 
    <exclude name="tags/**"/> 
    </javac> 
</target> 

<target name="clean"> 
    <delete> 
    <fileset dir="${build.src.dir}"/> 
    <fileset dir="${build.dir}/classes/org/apache/jsp"/> 
    </delete> 
</target> 
</project> 

, XML 원래대로

4

도현은 - ... addWebXmlMappings

<jasper2 
     validateXml="false" 
     uriroot="${web.dir}" 
     addWebXmlMappings="true" 
     webXmlFragment="${web.dir}/WEB-INF/classes/jasper_generated_web.xml" 
     outputDir="${web.dir}/WEB-INF/jsp-src" /> 

내가 병합이 얼마나 좋은 궁금

-에 jasper2 작업의 옵션 메인의 web.xml에 조각을 자동으로 병합이

이 작업 후에 필요하지 않더라도 조각을 생성해야합니다.

+0

나는 아래로 스크롤하여 좋은 물건을 찾았습니다. OP는 승인 된 답변을 변경하는 것을 고려해야합니다. 귀하의 질문에 대답하기 위해, 내 경우에는 합병이 깨끗했습니다. 깔끔한''주석 사이에 모든 것을 넣습니다. –

4

생성 된 조각이 유효한 XML 파일이 아니기 때문에 (결국 조각입니다) XSLT를 직접 사용할 수 없습니다. 반면에 당신은 필요가 없습니다. 여기 정확히 필요한 것을 제공 할 간단한 트릭이 있습니다.

web.xml 파일에 <servlet><servlet-mapping> 요소 사이에 XML 설명 <!-- @[email protected] -->을 삽입하십시오.

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>my.servlets.MyServlet</servlet-class> 
    <servlet> 

    <!-- @[email protected] --> 

    <servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/my-servlet</url-pattern> 
    </servlet-mapping> 

그런 다음 토큰 필터를 사용하여 @[email protected] 태그를 생성 된 컨텐츠로 바꿉니다.

<loadfile 
    property="generated.web.xml.fragment" 
    srcFile="${generated.fragment.file}" 
/> 

<copy file="${orig-web-content.dir}/WEB-INF/web.xml" 
    toFile="${generated-web-content.dir}/WEB-INF/web.xml" 
> 
    <filterset> 
    <filter token="JSPS_MAP" 
     value=" --&gt; ${generated.web.xml.fragment} &lt;!-- " 
    /> 
    </filterset> 
</copy> 

이 방법은 원래의 web.xml 파일이 (태그가 코멘트에 숨겨져) 완전히 유효 장점이 있지만, 당신에게 언제 어디서 발생 단편이 삽입 될 총 제어 할 수 있습니다.

DEV 빌드의 경우 필터링하지 않고 ${orig-web-content.dir}/WEB-INF/web.xml에서 ${generated-web-content.dir}/WEB-INF/web.xml까지 복사하십시오.

1

다른 사람들이 언급 한 jasper2 개미 작업이 있습니다. 내가 찾은 몇 가지 다른 옵션을 언급 할 것입니다.

하나는 org.codehaus.cargo.module.webapp를 사용하는 cactus 'webxmlmerge 개미 작업입니다.WebXmlMerger

또 하나는 JAXB을 사용하여 web.xml을 조작하는 것입니다. Sebastien Dionne의 dtd-schemas-generator 데모가이 작업을 수행합니다. 라이센스가 무엇인지는 확실하지 않습니다.

fwiw는 이러한 옵션을 고려했을 때 개미 XSLT 작업을 사용하려고합니다.

1

web.xml 파일에서 병합 시작 및 끝 지점을 지정하는 태그가있는 경우 addWebXmlMappings 플래그가 파일을 올바르게 생성합니다. JSMC 서블릿 매핑 시작 -> <! JSPC 서블릿 매핑 시작 -> 및 <! - JSPC 서블릿 매핑 끝 -> 내 web.xml에서이 작업을 수행 한 후 모든 것이 매력처럼 작동했습니다! (org.apcahe.jasper.JspC에 대한 코드가 어떻게 구현되었는지 확인해야합니다.)

+0

태그는 ... 뭐야? –

관련 문제