2008-10-02 14 views
5

का उपयोग करते हुए मुख्य वेब.एक्सएमएल के साथ जेएसपी प्री-संकलित वेब.एक्सएमएल खंड को विलय कैसे करें हमारे पास हमारे वेब एप्लिकेशन के लिए सामान्य web.xml है जिसमें कुछ जेएसपी और जेएसपी टैग फ़ाइलें शामिल हैं। मैं प्री-संकलित जेएसपी का उपयोग करने के लिए स्विच करना चाहता हूं। मेरे पास निर्माण में पूर्व-संकलन हो रहा है ठीक है, और यह web.xml खंड उत्पन्न करता है और अब मैं खंड को मुख्य वेब.एक्सएमएल में विलय करना चाहता हूं।एंटी

वहाँ एक web.xml मुझे टुकड़ा शामिल देंगे के लिए प्रकार के निर्देश शामिल है।

आदर्श रूप से मैं उन चीज़ों को छोड़ दूंगा जो डीवी के लिए हैं- क्योंकि यह फ्लाई पर जेएसपी बदलने के लिए उपयोगी है और तुरंत परिवर्तनों को देखते हैं लेकिन फिर यूएटी/प्रोडी के लिए, जेएसपी का प्री-संकलित किया जाएगा और इस प्रकार तेज़ी से काम करेगा।

उत्तर

4

मैं अपने प्रोजेक्ट में Tomcat jasper ANT tasks का उपयोग करता हूं, जो जेएसपी को सर्वलेट में प्रीकंपाइल करता है और मूल वेब.एक्सएमएल में नया सर्वलेट मैपिंग जोड़ता है। DEV में बनाता है, बस इस चरण को छोड़ें और वेब-एक्सएमएल के पूर्व संकलन और संशोधन के बिना जेएसपी को तैनात करें।

<?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 फ़ाइलें मर्ज करना चाहते हैं, तो एक सरल XSLT (जैसे सर्वलेट मैपिंग के रूप में) नई जनरेट वेब से चयनित तत्वों जोड़ने के लिए लिखा जा सकता है, एक्सएमएल अपने मूल में

4

रवींद्र - वहाँ के लिए 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" /> 

मुझे आश्चर्य है कि कितना अच्छा मर्ज है ...

परेशान करने के लिए आपको अभी भी टुकड़ा उत्पन्न करने की आवश्यकता है, भले ही इस कार्य के बाद इसकी आवश्यकता न हो।

+0

अच्छी चीज मैंने नीचे स्क्रॉल किया, यह वही था जो मैं ढूंढ रहा था। ओपी को स्वीकार किए गए उत्तर को बदलने पर विचार करना चाहिए। अपने प्रश्न का उत्तर देने के लिए, मेरे मामले में विलय साफ था। साफ-सुथरा '' टिप्पणियों के बीच सब कुछ डालता है। –

4

क्योंकि जेनरेटेड खंड वैध XML फ़ाइल नहीं है (यह सब के बाद एक टुकड़ा है), एक्सएसएलटी का उपयोग करना संभव नहीं है। दूसरी ओर आपको नहीं करना है। यहां एक साधारण चाल है जो आपको वही चीज़ देगी जो आपको चाहिए।

अपनी वेब.एक्सएमएल फ़ाइल में <!-- @[email protected] --><servlet> और <servlet-mapping> तत्वों के बीच सम्मिलित करें, उदा।

<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

जैस्पर 2 चींटी कार्य अन्य ने ध्यान दिया है। मैंने सोचा कि मैं कुछ अन्य विकल्पों का उल्लेख करता हूं जो मैंने पाया है।

एक कैक्टस 'webxmlmerge चींटी कार्य है, जो org.codehaus.cargo.module.webapp का उपयोग करता है।WebXmlMerger

एक और का उपयोग करना होगा JAXB web.xml में हेरफेर करने के लिए; सेबेस्टियन डायनने का dtd-schemas-generator डेमो ऐसा करता है। निश्चित नहीं है कि लाइसेंस क्या है।

fwiw इन विकल्पों को मानते हुए मुझे लगता है कि मैं चींटी XSLT कार्य का उपयोग करने जा रहा हूं।

1

अपनी वेब.एक्सएमएल फ़ाइल में यदि आपके पास यह निर्दिष्ट करने के लिए टैग हैं कि मर्ज शुरू होता है और समाप्त होता है तो addWebXmlMappings ध्वज आपके लिए फ़ाइल को सही तरीके से उत्पन्न करेगा। टैग हैं: <! - जेएसपीसी सर्वलेट मैपिंग शुरू करें -> और <! - जेएसपीसी सर्वलेट मैपिंग्स अंत -> मेरे web.xml पर ऐसा करने के बाद सब कुछ एक आकर्षण की तरह काम करता है! (मुझे यह देखने के लिए org.apcahe.jasper.JspC के कोड को देखना है) यह कैसे लागू किया गया था)

+0

टैग हैं ... क्या? –