जेएसपी के साथ फ़ाइलों में क्या अंतर है, जिसमें निर्देश शामिल हैं, जेएसपी में एक्शन और जेएसपी टैग फ़ाइलों का उपयोग करना शामिल है?


155

ऐसा लगता है कि जेएसपी के साथ छेड़छाड़ करने के दो तरीके हैं। इनमें से एक बयान के साथ फाइलें भी शामिल हैं

<%@ include file="foo.html" %>
<jsp:include page="foo.html" />

या JSP टैग फ़ाइलों का उपयोग कर

// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <jsp:doBody/>
</body>
</html>

और दूसरे JSP पेज में इसे कहते हैं

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:mytag>
    <h1>Hello World</h1>
</t:mytag>

तो मुझे किस विधि का उपयोग करना चाहिए? क्या अब एक पदावनत माना जाता है या वे दोनों वैध हैं और विभिन्न उपयोग मामलों को कवर करते हैं?

संपादित करें

क्या इस टैग फ़ाइल का उपयोग शामिल नहीं के समान है?

// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>

Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>

और इसे दूसरे JSP पर कॉल करें

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:product>
    <c:forEach items="${cart.products}" var="product">
        <t:product product="${product}"/>
    </c:forEach>
</t:product>

मुझे लगता है कि यह एक का उपयोग करते हुए और इसे पारित करने के मापदंडों के रूप में बहुत ही समान है। तो क्या टैग फ़ाइलें भी शामिल हैं?

जवाबों:


293

JSP सिंटेक्स तत्वों का अवलोकन

सबसे पहले, चीजों को और अधिक स्पष्ट करने के लिए, यहां JSP सिंटैक्स तत्वों का संक्षिप्त अवलोकन दिया गया है :

  • निर्देश : ये एक पूरे के रूप में JSP पेज के बारे में जानकारी देते हैं।
  • स्क्रिप्टिंग एलिमेंट्स : ये जावा कोडिंग एलिमेंट्स हैं जैसे कि डिक्लेरेशन, एक्सप्रेशन, स्क्रिप्ट और कमेंट।
  • ऑब्जेक्ट्स और स्कोप्स : JSP ऑब्जेक्ट्स या तो स्पष्ट रूप से या अंतर्निहित रूप से बनाए जा सकते हैं और किसी दिए गए दायरे में पहुंच सकते हैं, जैसे कि JSP पेज या सत्र में कहीं से भी।
  • क्रिया : ये ऑब्जेक्ट बनाते हैं या JSP प्रतिक्रिया (या दोनों) में आउटपुट स्ट्रीम को प्रभावित करते हैं।

कैसे सामग्री JSP में शामिल है

जेएसपी फ़ाइल में सामग्री के पुन: उपयोग के लिए कई तंत्र हैं।

जेएसपी में सामग्री को शामिल करने के लिए निम्नलिखित 4 तंत्रों को प्रत्यक्ष पुन : उपयोग के रूप में वर्गीकृत किया जा सकता है :
(पहले 3 तंत्रों के लिए "हेड फर्स्ट सर्वलेट्स और जेएसपी" से उद्धृत )

1) निर्देश शामिल करें :

<%@ include file="header.html" %>

स्टेटिक : अनुवाद के समय फाइल विशेषता के मूल्य से सामग्री को वर्तमान पृष्ठ पर जोड़ता है । निर्देश मूल रूप से HTML हेडर की तरह स्थिर लेआउट टेम्प्लेट के लिए था।

2) <jsp:include> मानक कार्रवाई :

<jsp:include page="header.jsp" />

डायनामिक : अनुरोध समय पर पृष्ठ विशेषता के मूल्य से वर्तमान पृष्ठ पर सामग्री जोड़ता है । JSP से आने वाली डायनामिक सामग्री के लिए अधिक इरादा किया गया था।

3) <c:import>JSTL टैग:

<c:import url=”http://www.example.com/foo/bar.html” />

डायनामिक : अनुरोध समय पर URL विशेषता के मूल्य से वर्तमान पृष्ठ पर सामग्री जोड़ता है । यह बहुत काम करता है <jsp:include>, लेकिन यह अधिक शक्तिशाली और लचीला है: अन्य दो के विपरीत, <c:import> यूआरएल वेब कंटेनर के बाहर से हो सकता है !

4) प्रस्ताव और कोड:

स्टेटिक : प्रस्तावना और कोडस केवल पृष्ठों की शुरुआत और अंत तक ही लागू किए जा सकते हैं
आप परोक्ष शामिल कर सकते हैं preludes (भी बुलाया हेडर) और codas जोड़कर JSP पृष्ठों के एक समूह के लिए (भी बुलाया पाद) <include-prelude>और <include-coda>एक के भीतर क्रमशः तत्वों <jsp-property-group>वेब अनुप्रयोग में तत्व web.xml तैनाती वर्णनकर्ता। यहां अधिक पढ़ें:
अंतर्निहित विन्यास शुरुआत में शामिल है और JSPs का अंत
डिफाइनिंग अंतर्निहित शामिल


टैग फ़ाइल सामग्री पुन: उपयोग की एक अप्रत्यक्ष विधि है, पुन: प्रयोज्य सामग्री को एन्क्रिप्ट करने का तरीका । एक टैग फ़ाइल एक स्रोत फ़ाइल है जिसमें JSP कोड का एक टुकड़ा होता है जो एक कस्टम टैग के रूप में पुन: प्रयोज्य होता है ।

शामिल है और टैग फ़ाइलों की संभावना अलग है।

टैग फ़ाइल (JSP 2.0 के साथ पेश की गई एक अवधारणा) कस्टम टैग बनाने के विकल्पों में से एक है। यह कस्टम टैग बनाने का तेज़ और आसान तरीका है। कस्टम टैग , जिन्हें टैग एक्सटेंशन के रूप में भी जाना जाता है, वे JSP तत्व हैं जो JSP पृष्ठों में डाले जाने वाले अन्य जावा घटकों द्वारा प्रदान किए गए कस्टम तर्क और आउटपुट की अनुमति देते हैं। कस्टम टैग के माध्यम से दिए गए तर्क को जावा ऑब्जेक्ट द्वारा टैग हैंडलर के रूप में लागू किया जाता है।

कस्टम टैग द्वारा किए जा सकने वाले कार्यों के कुछ उदाहरणों में निहित वस्तुओं, प्रसंस्करण रूपों, डेटाबेस तक पहुंचने और अन्य उद्यम सेवाओं जैसे ईमेल और निर्देशिकाओं का संचालन करना और प्रवाह नियंत्रण को लागू करना शामिल है।


अपने संपादन के बारे में

हो सकता है कि आपके उदाहरण में (आपके संपादन में ), प्रत्यक्ष शामिल और एक टैग फ़ाइल का उपयोग करने के बीच कोई अंतर नहीं है। लेकिन कस्टम टैग में सुविधाओं का एक समृद्ध समूह होता है । वे कर सकते हैं

  • कॉलिंग पेज से उत्तीर्ण विशेषताओं के माध्यम से अनुकूलित करें।

  • चर को वापस कॉलिंग पेज पर ले जाएं।

  • JSP पृष्ठों पर उपलब्ध सभी वस्तुओं तक पहुँचें।

  • एक दूसरे के साथ संवाद। आप जावाबीन घटक को बना और आरंभ कर सकते हैं, एक सार्वजनिक ईएल चर बना सकते हैं जो एक टैग में उस बीन को संदर्भित करता है, और फिर दूसरे टैग में बीन का उपयोग करता है।

  • एक दूसरे के भीतर नेस्टेड रहें और निजी चर के माध्यम से संवाद करें।

इसे "प्रो जेएसपी 2" से भी पढ़ें: जेएसपी कस्टम टैग को समझना


उपयोगी पढ़ने।


निष्कर्ष

प्रत्येक कार्य के लिए सही उपकरणों का उपयोग करें।


कस्टम टैग बनाने के त्वरित और आसान तरीके के रूप में टैग फ़ाइलों का उपयोग करें जो पुन: प्रयोज्य सामग्री को एनकैप्सुलेट करने में आपकी सहायता कर सकते हैं ।

JSP में शामिल सामग्री के लिए के रूप में ( यहाँ से उद्धरण ):

  • यदि फ़ाइल शायद ही कभी बदलती है तो निर्देश शामिल करें का उपयोग करें । यह सबसे तेज तंत्र है। यदि आपका कंटेनर स्वचालित रूप से परिवर्तनों का पता नहीं लगाता है, तो आप मुख्य पृष्ठ वर्ग फ़ाइल को हटाकर परिवर्तनों को प्रभावी होने के लिए बाध्य कर सकते हैं।
  • केवल सामग्री के लिए शामिल क्रिया का उपयोग करें जो अक्सर बदलता है , और यदि मुख्य पृष्ठ का अनुरोध करने तक कौन से पृष्ठ को शामिल नहीं किया जा सकता है।

लेकिन <jsp: शामिल नहीं है> टैग फ़ाइलों का उपयोग करने के समान है? मुझे कोई अंतर नहीं दिखाई दे रहा ... आप चर को फ़ाइलों में पास कर सकते हैं <jsp: शामिल>> वैसे ही जैसे आप चर को टैग फ़ाइलों में पास कर सकते हैं। दोनों विधियाँ आपको सामग्री का पुन: उपयोग करने देती हैं, वे ठीक वैसा ही काम करती प्रतीत होती हैं। क्या उनके नाम के अलावा उनके बीच कोई अंतर है?
सोनिकबूम

@sonicboom मेरा उत्तर अपडेट किया गया
informatik01

1
@ informatik01 बहुत अच्छा जवाब है, मैं गहराई, अच्छा स्वरूपण और बहुत काम 4 तंत्र सूची की सराहना करता हूं।
रसेल सिल्वा

1
वास्तव में क्या फायदा है <jsp: शामिल> ओवर <* @ url शामिल करें>>?
कृष्ण चैतन्य

@ कृष्णचैतन्य नोट: आप *शामिल निर्देश में एक टाइपो (तारांकन ) है। <jsp:include>एक मानक शामिल कार्रवाई है , निर्देश<%@ include file="" %> शामिल है । बहुत अंतिम खंड (ग्रे बॉक्स में) पढ़ें जो कि लाभ को रेखांकित करता है (यानी एक या दूसरे को चुनने के लिए सिफारिशें)। विस्तृत विवरण के लिए इस लेख को भी देखें । उम्मीद है की यह मदद करेगा।
informatik01

21

संभव डुप्लिकेट प्रश्न

<@include>- निर्देश टैग जेनरेट किए गए सर्वलेट कोड को बनाने से पहले जेएसपी में शामिल फाइल की सामग्री को जेएसपी में मर्ज करने का निर्देश देता है। यह आपके JSP में दाईं ओर शामिल पृष्ठ से पाठ को काटने और चिपकाने के बराबर है।

  • केवल एक सर्वलेट को रन टाइम पर निष्पादित किया जाता है।
  • मूल पृष्ठ में घोषित स्क्रिप्टलेट वैरिएबल को शामिल किए गए पृष्ठ में पहुँचा जा सकता है (याद रखें, वे एक ही पृष्ठ हैं)।
  • शामिल पृष्ठ को एक स्टैंडअलोन JSP के रूप में संकलित करने में सक्षम होने की आवश्यकता नहीं है। यह एक कोड टुकड़ा या सादा पाठ हो सकता है। शामिल पृष्ठ को कभी भी स्टैंडअलोन के रूप में संकलित नहीं किया जाएगा। शामिल पृष्ठ में कोई एक्सटेंशन भी हो सकता है, हालांकि .jspf पारंपरिक रूप से उपयोग किया जाने वाला एक्सटेंशन बन गया है।
  • पुराने कंटेनरों में एक कमी यह है कि इसमें शामिल पृष्ठों में परिवर्तन तब तक प्रभावी नहीं हो सकते जब तक कि मूल पृष्ठ अपडेट न हो जाए। टॉमकैट के हाल के संस्करण अपडेट के लिए शामिल पृष्ठों की जांच करेंगे और यदि वे अपडेट किए जाते हैं, तो माता-पिता की पुनर्संरचना के लिए बाध्य करेंगे।
  • एक और दोष यह है कि चूंकि कोड सीधे जनरेट किए गए सर्वलेट की सेवा पद्धति में इनलाइन है, इसलिए विधि बहुत बड़ी हो सकती है। यदि यह 64 KB से अधिक है, तो आपका JSP संकलन विफल हो जाएगा।

<jsp:include> - दूसरी ओर JSP एक्शन टैग कंटेनर को इस पृष्ठ के निष्पादन को रोकने का निर्देश देता है, इसमें शामिल पृष्ठ को चलाएं, और उस पृष्ठ से आउटपुट को इस पृष्ठ से आउटपुट में मर्ज करें।

  • प्रत्येक शामिल पृष्ठ को रन टाइम पर एक अलग सर्वलेट के रूप में निष्पादित किया जाता है।
  • पेज को सशर्त रूप से रन टाइम पर शामिल किया जा सकता है। यह अक्सर टेम्प्लेटिंग चौखटे के लिए उपयोगी होता है जो पृष्ठों को शामिल करता है। मूल पृष्ठ निर्धारित कर सकते हैं कि कौन से पृष्ठ, यदि कोई हो, कुछ रन-टाइम स्थिति के अनुसार शामिल करने के लिए।
  • स्क्रिप्ट चर के मूल्यों को शामिल पृष्ठ पर स्पष्ट रूप से पारित करने की आवश्यकता है।
  • शामिल पृष्ठ को स्वयं चलाने में सक्षम होना चाहिए।
  • जनरेट सर्वलेट क्लास में अधिकतम विधि आकार अधिक होने के कारण आपको संकलन त्रुटियों में चलाने की संभावना कम है।

आपकी आवश्यकताओं के आधार पर, आप या तो उपयोग कर सकते हैं <@include>या <jsp:include>


1
क्या आपका मतलब है जैसे आपने अपने प्रश्न में दिखाया है <t:mytag><h1>Hello World</h1></t:mytag>:? यह शामिल नहीं है, यह एक टैग (जैसे <jsp:useBean>या <c:if>) का सामान्य उपयोग है ।
उउउ

तो टैग फ़ाइलों का उपयोग करने में क्या अंतर है और इसमें ऐसा लगता है जैसे कि टैग फ़ाइलों का उपयोग किसी पृष्ठ में सामग्री को शामिल करने के लिए किया जा सकता है?
सोनिकबोम

9

<jsp:include />ओवर <%@ include >का मुख्य लाभ यह है:

<jsp:include /> मापदंडों को पारित करने की अनुमति देता है

<jsp:include page="inclusion.jsp">
    <jsp:param name="menu" value="objectValue"/>
</jsp:include>

जो संभव नहीं है <%@include file="somefile.jsp" %>


टैगफाइल्स के बारे में क्या है, मुझे पता है कि कैसे काम करता है। मैं सोच रहा हूं कि टैग फ़ाइलों को कैसे शामिल किया जाए क्योंकि ऐसा लगता है कि वे समान कार्यक्षमता प्रदान करते हैं। टैगफाइल्स का उपयोग करने और शामिल करने के बीच अंतर क्या है?
सोनिकबोम

कैसे के बारे में <%@include file="somefile.jsp?menu=value" %>? क्या वह भी प्रतिबंधित है?
रोशना पिटिगला

5

सभी तीन टेम्पलेट विकल्प - <%@include>, <jsp:include>और <%@tag>मान्य हैं, और सभी तीन कवर विभिन्न उपयोग मामलों।

साथ <@include>, JSP पार्सर में संकलित (C के समान #include) से पहले JSP में सम्मिलित फ़ाइल की सामग्री को इन-लाइन करता है । आप इस विकल्प का उपयोग सरल, स्थिर सामग्री के साथ करेंगे: उदाहरण के लिए, यदि आप अपने वेब-ऐप में हेडर, फुटर या नेविगेशन तत्वों को हर पृष्ठ पर शामिल करना चाहते हैं। शामिल सामग्री संकलित JSP का हिस्सा बन जाती है और रनटाइम पर कोई अतिरिक्त लागत नहीं है।

<jsp:include>(और जेएसटीएल <c:import>, जो समान और अधिक शक्तिशाली है) गतिशील सामग्री के लिए सबसे उपयुक्त हैं। जब आपको किसी अन्य URL, स्थानीय या दूरस्थ से सामग्री शामिल करने की आवश्यकता हो, तो इनका उपयोग करें; जब आप जिस संसाधन को शामिल कर रहे हैं वह स्वयं गतिशील है; या जब शामिल सामग्री चर या बीन परिभाषाओं का उपयोग करती है, जिसमें शामिल पृष्ठ के साथ संघर्ष होता है। <c:import>आपको एक चर में शामिल पाठ को संग्रहीत करने की अनुमति देता है, जिसे आप आगे हेरफेर या पुन: उपयोग कर सकते हैं। इन दोनों ने प्रेषण के लिए एक अतिरिक्त रनटाइम खर्च किया है: यह न्यूनतम है, लेकिन आपको यह ध्यान रखने की आवश्यकता है कि गतिशील शामिल "फ्री" नहीं है।

जब आप पुन: प्रयोज्य उपयोगकर्ता इंटरफ़ेस घटक बनाना चाहते हैं तो टैग फ़ाइलों का उपयोग करें। यदि आपके पास एक विजेट सूची है, तो कहिए, और आप विजेट्स और प्रत्येक के गुणों को प्रदर्शित करना चाहते हैं (तालिका में, या किसी रूप में), आप एक टैग बनाएंगे। टैग तर्कों का उपयोग <%@tag attribute>कर सकता है , और ये तर्क अनिवार्य या वैकल्पिक हो सकते हैं - कुछ हद तक विधि मापदंडों की तरह।

टैग फाइलें एक सरल, टैग लाइब्रेरी लिखने का JSP- आधारित तंत्र है, जो (पूर्व JSP 2.0) आपको जावा कोड का उपयोग करके लिखना था। जब आप टैग में बहुत सारे प्रतिपादन करना चाहते हैं, तो JSP टैग फ़ाइलों को लिखना बहुत साफ है: आपको जावा और HTML कोड को मिलाने की आवश्यकता नहीं है क्योंकि यदि आपने जावा में अपने टैग लिखे हैं तो आपको करना होगा।


1

के अनुसार: जावा पर दोबारा गौर किया गया

  1. निर्देश में शामिल संसाधन jsp अनुवाद समय के दौरान लोड किए गए हैं, जबकि शामिल क्रियाओं को अनुरोध समय के दौरान लोड किया गया है।

  2. शामिल संसाधनों पर कोई भी परिवर्तन प्रत्यक्ष निर्देश के मामले में दिखाई नहीं देगा जब तक कि jsp फ़ाइल फिर से संकलित न हो जाए। शामिल कार्रवाई के मामले में, शामिल संसाधन में कोई भी परिवर्तन अगले अनुरोध में दिखाई देगा।

  3. निर्देश शामिल करें स्थैतिक आयात है, जबकि क्रिया गतिशील आयात है।

  4. एक ही उद्देश्य के लिए क्रिया उपयोग पेज विशेषता को शामिल करते समय संसाधनों को निर्दिष्ट करने के लिए निर्दिष्ट करने के लिए निर्देश का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.