병합하는 방법 jsp pre-compiled web.xml 조각과 주요 web.xml 를 사용하여 개미

StackOverflow https://stackoverflow.com/questions/162079

문제

우리가 평소 web.xml 우리의 웹 응용 프로그램 일부를 포함 jsp 및 jsp 태그 파일이 있습니다.고 싶은 스위치를 사용하여 미리 컴파일 jsp 습니다.내가 미리 컴파일에서 일어나는 구축하고 확인,생성 web.xml 조각은 이제 내가 병합하려는 조각으로 주요 web.xml.

type 지시어에 대한 web.xml 그런스를 유지하도록 도와드립니다.이 포함됩니다.

상을 떠나 있는 것 같은 개발-로를 변경하는 것이 유용 jsp 의 즉시 즉시 변경 사항을만한 다음에 대한 UAT/PROD,jsp 의 미리 컴파일하고 따라서 작업 속도가 빨라질 수 있습니다.

도움이 되었습니까?

해결책

나는 그것을 사용한다 Tomcat Jasper Ant 작업 내 프로젝트에서는 JSP를 서블릿으로 사전 컴파일하고 새로운 서블릿 매핑을 원래 Web.xml에 추가합니다. Dev 빌드에서는이 단계를 건너 뛰고 Web.xml의 사전 컴파일 및 수정없이 JSP를 배포하십시오.

    <?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>

이미 JSP 컴파일이 작동하고 Web.xml 파일을 병합하려면 새로 생성 된 웹에서 XML에서 선택한 요소 (예 : 서블릿 매핑)를 원본으로 추가하기 위해 간단한 XSLT를 작성할 수 있습니다.

다른 팁

Doh-수있는 옵션에 jasper2 작업을 자동 병합은 조각으로 주요 web.xml - 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" />

내가 방금은 병합되...

귀찮게 당신을 생성해야 할 조각은 여전히더라도,그 후 필요에 따라 이 작업입니다.

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

web.xml 파일에서 XML 주석을 삽입하십시오 <!-- @JSPS_MAP@ --> ~ 사이 <servlet> 그리고 <servlet-mapping> 요소, 예를 들어

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

  <!-- @JSPS_MAP@ -->

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

그런 다음 토큰 필터를 사용하여 교체하십시오 @JSPS_MAP@ 생성 된 컨텐츠로 태그.

<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 필터링없이.

거기에 있습니다 Jasper2 Ant 과제 다른 사람들이 언급했습니다. 내가 찾은 몇 가지 다른 옵션을 언급 할 것이라고 생각했습니다.

하나는 선인장입니다. webxmlmerge org.codehaus.cargo.module.webapp.webxmlmerger를 사용하는 Ant Task

다른 하나는 사용하는 것입니다 JaxB Web.xml을 조작하기 위해; Sebastien Dionne 's DTD-Schemas-Generator 데모는 이것을합니다. 라이센스가 무엇인지 확실하지 않습니다.

fwiw는 이러한 옵션을 고려한 것입니다. xslt 직무.

web.xml 파일에서 합병이 시작되고 끝나는 위치를 지정하여 AddWebXmlMappings 플래그가 파일을 올바르게 생성합니다. 태그는 다음과 같습니다.u003C!-- JSPC servlet mappings start --> 그리고u003C!-- JSPC servlet mappings end --> 내 web.xml 에이 작업을 수행 한 후 모든 것이 매력처럼 작동했습니다! (org.apcahe.jasper.jspc의 코드를 살펴 보려면 이것이 어떻게 구현되었는지 확인해야합니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top