JSP फ़ाइलों में जावा कोड से कैसे बचें?


1673

मैं जावा ईई के लिए नया हूं और मुझे पता है कि निम्नलिखित तीन लाइनों की तरह कुछ है

<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>

कोडिंग का एक पुराना स्कूल तरीका है और JSP संस्करण 2 में JSP फ़ाइलों में जावा कोड से बचने के लिए एक विधि मौजूद है। क्या कोई कृपया मुझे वैकल्पिक JSP 2 लाइनें बता सकता है, और इस तकनीक को क्या कहा जाता है?


22
@ कोरे तुगे, जब तक कि काउंटर वेरिएबल को इसके उपयोग से पहले घोषित किया जाता है, तब तक यह निश्चित रूप से मान्य है ...
शेल्डन आर।

@SheldonR। यह मान्य है: <% = काउंटर ++%> या यह: <%! int काउंटर = 0; int x = counter ++; %> लेकिन नहीं: <%! int काउंटर = 0; काउंटर ++; %>
कोरे तुगे

@KorayTugay, मेरा क्या मतलब था यदि वैरिएबल ब्लॉक को पहले के स्क्रिप्ट ब्लॉक में घोषित किया गया था, तो यह बाद के ब्लॉक में मान्य होना चाहिए। लेकिन आखिरकार, इन दिनों J2EE प्रोग्रामर को स्क्रिप्ट के बजाय EL चर का उपयोग करना चाहिए, वैसे भी ...
शेल्डन आर।

जवाबों:


1971

जेएसपी में स्क्रिप्टलेट (उन <% %>चीजों) का उपयोग वास्तव में टैगलिब ( जेएसटीएल जैसे ) और ईएल ( एएल ) के जन्म के बाद से बहुत हतोत्साहित किया गया है। एक्सप्रेशन लैंग्वेज , उन ${}चीजों) ।

शास्त्रों के प्रमुख नुकसान हैं:

  1. पुनर्प्रयोग: आप स्क्रिप्ट्स का पुन: उपयोग नहीं कर सकते।
  2. Replaceability: आप स्क्रिप्ट को सार नहीं बना सकते हैं।
  3. OO-क्षमता: आप वंशानुक्रम / संरचना का उपयोग नहीं कर सकते।
  4. Debuggability: यदि स्क्रिप्टलेट एक अपवाद को आधे रास्ते में फेंक देता है, तो आपको केवल एक खाली पृष्ठ मिलता है।
  5. testability: स्क्रिप्टलेट यूनिट-टेस्ट करने योग्य नहीं हैं।
  6. अनुरक्षणीयता: क्षमता प्रति सैल्डो के लिए अधिक समय की जरूरत होती है ताकि वे मेल्टेड / क्लुट्ड / डुप्लिकेटेड कोड लॉजिक बनाए रख सकें।

सन ऑरेकल स्वयं भी JSP कोडिंग सम्मेलनों में स्क्रिप्ट के उपयोग से बचने के लिए सिफारिश करता है जब भी (कार्यक्षमता) कक्षाओं में एक ही कार्यक्षमता संभव हो। यहाँ प्रासंगिकता के कई उल्लेख हैं:

JSP 1.2 विनिर्देश से, यह अत्यधिक अनुशंसा की जाती है कि JSP स्क्रिप्ट के लिए आवश्यकता को कम करने में मदद करने के लिए आपके वेब एप्लिकेशन में JSP स्टैंडर्ड टैग लाइब्रेरी (JSTL) का उपयोग किया जाए में आपके पृष्ठों में । JSTL का उपयोग करने वाले पृष्ठ सामान्य रूप से पढ़ने और बनाए रखने में आसान होते हैं।

...

जब भी संभव हो, JSP स्क्रिप्ट से बचें जब भी टैग लाइब्रेरी समान कार्यक्षमता प्रदान करें। यह पृष्ठों को पढ़ने और बनाए रखने में आसान बनाता है, व्यावसायिक तर्क को तर्क तर्क से अलग करने में मदद करता है, और आपके पृष्ठों को जेएसपी 2.0-शैली के पन्नों में विकसित करना आसान बना देगा (जेएसपी 2.0 विनिर्देश समर्थन करता है लेकिन स्क्रिप्ट के उपयोग पर जोर देता है)।

...

व्यापार तर्क से प्रस्तुति स्तरीय के बीच युग्मन को कम करने के लिए मॉडल-व्यू-कंट्रोलर (एमवीसी) डिजाइन पैटर्न को अपनाने की भावना में, जेएसपी स्क्रिप्टलेट का उपयोग व्यावसायिक तर्क लिखने के लिए नहीं किया जाना चाहिए । इसके बजाय, जेएसपी स्क्रिप्टलेट का उपयोग किया जाता है यदि डेटा को बदलने के लिए आवश्यक हो (जिसे "मूल्य ऑब्जेक्ट" भी कहा जाता है) ग्राहक के अनुरोधों को एक उचित क्लाइंट-तैयार प्रारूप में संसाधित करने से लौटा। फिर भी, यह फ्रंट कंट्रोलर सर्वलेट या कस्टम टैग के साथ बेहतर होगा।


स्क्रिप्ट को कैसे बदलें यह पूरी तरह से कोड / तर्क के एकमात्र उद्देश्य पर निर्भर करता है। अधिक बार इस कोड को एक पूर्ण योग्य जावा वर्ग में रखा जाना है:

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

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
            ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page.
        } else {
            chain.doFilter(request, response); // Logged in, just continue request.
        }
    }

    जब <url-pattern>ब्याज के JSP पृष्ठों को कवर करने के लिए उपयुक्त पर मैप किया जाता है , तो आपको समग्र JSP पृष्ठों के समान कोड को कॉपी करने की आवश्यकता नहीं है।


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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            List<Product> products = productService.list(); // Obtain all products.
            request.setAttribute("products", products); // Store products in request scope.
            request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response); // Forward to JSP page to display them in a HTML table.
        } catch (SQLException e) {
            throw new ServletException("Retrieving products failed!", e);
        }
    }

    इस तरह अपवादों से निपटना आसान है। JSP रेंडरिंग के बीच में DB की पहुँच नहीं है, लेकिन JSP के प्रदर्शित होने से पहले। जब भी DB पहुंच एक अपवाद फेंकता है तब भी आपके पास प्रतिक्रिया बदलने की संभावना होती है। उपरोक्त उदाहरण में, डिफ़ॉल्ट त्रुटि 500 पेज तुम वैसे भी एक से अनुकूलित कर सकते हैं जो प्रदर्शित किया जाएगा <error-page>में web.xml


  • यदि आप किसी अनुरोध को पोस्टप्रॉसेस करने के लिए कुछ जावा कोड मंगाना चाहते हैं, जैसे कि फॉर्म सबमिट करना, तो एक सर्वलेट लागू करें और doPost()विधि के अनुसार कोड लिखें । उदाहरण के लिए:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userService.find(username, password);
    
        if (user != null) {
            request.getSession().setAttribute("user", user); // Login user.
            response.sendRedirect("home"); // Redirect to home page.
        } else {
            request.setAttribute("message", "Unknown username/password. Please retry."); // Store error message in request scope.
            request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Forward to JSP page to redisplay login form with error.
        }
    }

    इस तरह से विभिन्न परिणाम पृष्ठ गंतव्यों से निपटना आसान है: त्रुटि के मामले में सत्यापन त्रुटियों के साथ फ़ॉर्म को फिर से परिभाषित करना (इस विशेष उदाहरण में आप इसे ईएल${message} में उपयोग करके फिर से देख सकते हैं ), या बस सफलता के मामले में वांछित लक्ष्य पृष्ठ पर ले जा सकते हैं।


  • यदि आप निष्पादन योजना और / या अनुरोध और प्रतिक्रिया के गंतव्य को नियंत्रित करने के लिए कुछ जावा कोड को लागू करना चाहते हैं , तो एमवीसी के फ्रंट कंट्रोलर पैटर्न के अनुसार एक सर्वलेट लागू करें । उदाहरण के लिए:

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Action action = ActionFactory.getAction(request);
            String view = action.execute(request, response);
    
            if (view.equals(request.getPathInfo().substring(1)) {
                request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
            } else {
                response.sendRedirect(view);
            }
        } catch (Exception e) {
            throw new ServletException("Executing action failed.", e);
        }
    }

    या जेएसएफ , स्प्रिंग एमवीसी , विकेट , आदि जैसे एमवीसी ढांचे को अपनाएं ताकि आप कस्टम सर्वलेट की आवश्यकता के बिना सिर्फ एक जेएसपी / फेसलेट्स पेज और एक जावाबीन वर्ग के साथ समाप्त हो जाएं।


  • यदि आप एक JSP पेज के अंदर प्रवाह को नियंत्रित करने के लिए कुछ जावा कोड को लागू करना चाहते हैं , तो आपको JSTL कोर की तरह एक (मौजूदा) प्रवाह नियंत्रण टैगलिब को हथियाने की जरूरत है । जैसे List<Product>एक तालिका में प्रदर्शित :

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    ...
    <table>
        <c:forEach items="${products}" var="product">
            <tr>
                <td>${product.name}</td>
                <td>${product.description}</td>
                <td>${product.price}</td>
            </tr>
        </c:forEach>
    </table>

    XML- शैली टैग के साथ जो सभी HTML के बीच अच्छी तरह से फिट होते हैं, कोड विभिन्न पठनीय और समापन ब्रेस के साथ स्क्रिप्ट के एक समूह की तुलना में बेहतर पठनीय (और इस तरह बेहतर बनाए रखने योग्य) होता है ( "जहां इस बंद कंस का संबंध है?" )। एक आसान सहायता यह है कि अपने वेब एप्लिकेशन को एक अपवाद फेंकने के लिए कॉन्फ़िगर करें जब भी स्क्रिप्टलेट का उपयोग निम्नलिखित टुकड़े को जोड़कर किया जाता है web.xml:

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <scripting-invalid>true</scripting-invalid>
        </jsp-property-group>
    </jsp-config>

    में Facelets , JSP के उत्तराधिकारी, जो जावा ईई का हिस्सा है MVC ढांचा प्रदान JSF , यह पहले से ही है नहीं संभव उपयोग करने के लिए scriptlets । इस तरह आप चीजों को "सही तरीके से" करने के लिए स्वचालित रूप से मजबूर हो जाते हैं।


  • यदि आप एक JSP पृष्ठ के अंदर "बैकएंड" डेटा को एक्सेस और प्रदर्शित करने के लिए कुछ जावा कोड को आमंत्रित करना चाहते हैं , तो आपको उन ${}चीजों में ईएल (एक्सप्रेशन लैंग्वेज) का उपयोग करने की आवश्यकता है । उदाहरण के लिए प्रस्तुत इनपुट मानों को फिर से परिभाषित करना:

    <input type="text" name="foo" value="${param.foo}" />

    ${param.foo}प्रदर्शित करता है के परिणाम request.getParameter("foo")


  • यदि आप कुछ उपयोगिता जावा कोड को सीधे जेएसपी पेज (आमतौर पर public staticविधियों) में शामिल करना चाहते हैं, तो आपको उन्हें ईएल फ़ंक्शन के रूप में परिभाषित करने की आवश्यकता है। JSTL में एक मानक फ़ंक्शंस टैगलिब है, लेकिन आप आसानी से फ़ंक्शंस भी बना सकते हैं । यहाँ एक उदाहरण है कि कैसे JSTL है fn:escapeXmlको रोकने के लिए उपयोगी है XSS हमलों

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    ...
    <input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

    ध्यान दें कि XSS संवेदनशीलता किसी भी तरह से विशेष रूप से जावा / जेएसपी / जेएसटीएल / ईएल / से संबंधित नहीं है, जो भी हो, इस समस्या को आपके द्वारा विकसित किए जाने वाले प्रत्येक वेब एप्लिकेशन में ध्यान में रखा जाना चाहिए । स्क्रिप्टलेट्स की समस्या यह है कि यह बिलिन की रोकथाम का कोई तरीका नहीं प्रदान करता है, कम से कम मानक जावा एपीआई का उपयोग नहीं करता है। जेएसपी के उत्तराधिकारी फेसलेट्स पहले से ही HTML से बच रहे हैं, इसलिए आपको फेसलेट्स में XSS छेद के बारे में चिंता करने की आवश्यकता नहीं है।

यह सभी देखें:


117
+1 महान जवाब। लेकिन हठधर्मिता मत जाओ, कभी-कभी स्क्रिप्ट का उपयोग करके आईएस ठीक है, लेकिन यह अपवाद होना चाहिए जो नियम को साबित करता है।
1

26
@ शेवचॉन: स्क्रिप्टलेट त्वरित प्रोटोटाइप / परीक्षण के लिए उपयोगी होते हैं। जहां तक ​​मुझे पता है, एक स्क्रिप्टलेट का केवल एक "वैध" उत्पादन उपयोग है, और वेबब्रोसर में वेबपेज पार्सिंग प्रदर्शन को बेहतर बनाने के लिए और <% response.getWriter().flush(); %>बीच में । लेकिन यह उपयोग पूरी तरह से नगण्य है जब सर्वर साइड में आउटपुट बफर का आकार कम है (1 ~ 2KB)। इस लेख को भी देखें</head><body>
बालूसी

5
@BalusC कुछ बार मैं जावा क्लासेस के साथ फंस गया हूं जो कि गेटटर / सेटर पैटर्न का पालन नहीं करता था। IMHO जो एक ऐसा मामला है जहाँ एक लिपिक नौकरी करता है।
svachon

41
@ शेवाचोन: मैं उन कक्षाओं को अपने जावेदियन वर्गों के साथ लपेटूंगा और उनकी जगह उनका उपयोग करूंगा।
बालूसी

31
यह एक बहुत अच्छा जवाब था, लेकिन doGet और doPost पार्ट्स भ्रामक हैं। वे तरीके विशिष्ट अनुरोध (HEAD, GET और POST) विधियों को संभालने के लिए हैं और "प्रीप्रोसेसिंग" या "पोस्टप्रोसेसिंग" अनुरोधों के लिए नहीं हैं!
MetroidFan2002

225

एक सुरक्षा के रूप में: अच्छे के लिए स्क्रिप्टलेट्स को अक्षम करें

जैसा कि एक अन्य प्रश्न पर चर्चा हो रही है, आपको अपने web.xmlवेब एप्लिकेशन डिस्क्रिप्टर में हमेशा स्क्रिप्ट को अक्षम करना चाहिए ।

मैं हमेशा ऐसा करूंगा कि स्क्रिप्ट को जोड़ने वाले किसी भी डेवलपर को रोकने के लिए, विशेष रूप से बड़ी कंपनियों में जहां आप जल्दी या बाद में अवलोकन खो देंगे। web.xmlसेटिंग्स इस तरह दिखेगा:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
     <scripting-invalid>true</scripting-invalid>
  </jsp-property-group>
</jsp-config>

4
क्या यह भी स्क्रिप्ट टिप्पणियों को अक्षम करता है ?: <%-- comment that i don't want in the final HTML --%>। मुझे HTML टिप्पणियों के बजाय इनका उपयोग करना उपयोगी लगता है।
डेविड लैवेंडर

16
@MrSpoon ने आपके लिए एक जवाब ट्रैक किया। के अनुसार इस उत्तर + टिप्पणी , scriptlets बंद इस बदल जाता है <% %>, स्क्रिप्टलेट भाव <%! %>, और स्क्रिप्टलेट घोषणाओं <%= %>। इसका मतलब है कि निर्देश <%@ %>और टिप्पणियां <%-- --%>सक्षम और उपयोगी हैं, इसलिए आप अभी भी टिप्पणियां और शामिल कर सकते हैं।
मार्टिन कार्नी

3
स्क्रिप्टलेट निर्देशों का अक्षम होना भयानक होगा - ट्रिम व्हाट्सएप विरासत प्रणालियों के साथ बातचीत करने के लिए अमूल्य है जो अतिरिक्त व्हाट्सएप के साथ बेकार हो जाता है।
corsiKa

108

JSTL सशर्त, लूप, सेट, हो जाता है, आदि के लिए टैग प्रदान करता है।

<c:if test="${someAttribute == 'something'}">
   ...
</c:if>

JSTL अनुरोध विशेषताओं के साथ काम करता है - वे अक्सर सर्वलेट द्वारा अनुरोध में सेट किए जाते हैं, जो कि JSP के लिए आगे होता है।


2
आप क्यों कहते हैं कि JSTL अनुरोध विशेषताओं के साथ काम करता है? वे किसी भी दायरे में विशेषताओं के साथ काम कर सकते हैं, है ना?
कोरे तुगे

60

मुझे यकीन नहीं है कि अगर मुझे यह सही लगता है।

आपको एमवीसी के बारे में कुछ पढ़ना चाहिए। स्प्रिंग एमवीसी और स्ट्रट्स 2 दो सबसे आम समाधान हैं।


29
MVC स्प्रिंग या स्ट्रट्स के बिना उपरोक्त तकनीकों में से कई का उपयोग करके सर्वलेट्स / जेएसपी के साथ लागू किया जा सकता है।
स्टेपियन

18
यह सवाल का जवाब कैसे देता है?
xyz

54

आप जावा और HTML कोड को रोकने के लिए EL अभिव्यक्तियों के साथ JSTL टैग का उपयोग कर सकते हैं:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
    <head>
    </head>
    <body>

        <c:out value="${x + 1}" />
        <c:out value="${param.name}" />
        // and so on

    </body>
</html>

34

विकेट जैसे घटक-आधारित फ्रेमवर्क भी हैं जो आपके लिए बहुत सारे HTML उत्पन्न करते हैं। HTML में समाप्त होने वाले टैग बेहद बुनियादी हैं और वस्तुतः कोई तर्क नहीं है जो इसमें मिलाया जाता है। परिणाम HTML HTML के साथ लगभग खाली पेज हैं। नकारात्मक पक्ष यह है कि सीखने के लिए विकेट एपीआई में बहुत सारे घटक हैं और उन बाधाओं के तहत कुछ चीजें हासिल करना मुश्किल हो सकता है।


33

MVC आर्किटेक्चरल पैटर्न में, JSPs दृश्य परत का प्रतिनिधित्व करते हैं। JSP में जावा कोड एम्बेड करना एक बुरा अभ्यास माना जाता है। आप JSTL , freeMarker , वेग को JSP के साथ "टेम्पलेट इंजन" के रूप में उपयोग कर सकते हैं । उन टैगों का डेटा प्रदाता उन चौखटों पर निर्भर करता है, जिनसे आप निपट रहे हैं। Struts 2और webworkएमवीसी पैटर्न के कार्यान्वयन के रूप में बीजीएस प्रॉपर्टीज को जेएसपी को उजागर करने के लिए ओजीएनएल "बहुत ही दिलचस्प तकनीक का उपयोग करता है "।


27

अनुभव से पता चला है कि जेएसपी की कुछ कमियां हैं, उनमें से एक है वास्तविक कोड के साथ मार्कअप से बचने के लिए कठिन होना।

यदि आप कर सकते हैं, तो आपको जो करने की आवश्यकता है उसके लिए एक विशेष तकनीक का उपयोग करने पर विचार करें। जावा ईई 6 में जेएसएफ 2.0 है, जो #{bean.method(argument)}दृष्टिकोण के माध्यम से जेएसएफ पृष्ठों के साथ एक साथ gluing जावा बीन्स सहित कई अच्छी सुविधाएँ प्रदान करता है ।


3
पुराना उत्तर लेकिन मैं यह बताने के लिए विरोध नहीं कर सकता कि JSF जावा अंतरिक्ष में सबसे भयावह आविष्कार में से एक है। सिंगल (HTTP जीईटी लाइक) लिंक बनाने की कोशिश करें और आप समझ जाएंगे कि क्यों।
एलेक्स

@Alex लेकिन फिर भी बेहतर। कुछ और बेहतर करने के लिए स्वतंत्र महसूस करें।
थोरबजोरन रेव एंडरसन

26

अगर आप बस JSP में जावा कोडिंग की कमियों से बचना चाहते हैं, तो आप ऐसा कर सकते हैं। जेएसपी में न्यूनतम जावा होने के लिए कुछ अनुशासन का पालन करें और जेएसपी पृष्ठ में लगभग कोई गणना और तर्क न रखें।

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%//instantiate a JSP controller
MyController clr = new MyController(request, response);

//process action if any
clr.process(request);

//process page forwaring if necessary

//do all variable assignment here
String showMe = clr.getShowMe();%>

<html>
    <head>
    </head>
    <body>
        <form name="frm1">
            <p><%= showMe %>
            <p><% for(String str : clr.listOfStrings()) { %>
            <p><%= str %><% } %>

            // and so on   
        </form>
    </body>
</html>

26

JSTL का उपयोग करके अपने स्वयं के टैग को अनुकूलित और लिखना सीखें

ध्यान दें कि EL EviL है (रनटाइम अपवाद, रिफलेक्टिंग)
विकेट बुराई भी हो सकती है (प्रदर्शन, छोटे ऐप के लिए अपवित्र या सरल दृश्य स्तरीय) java2s

से उदाहरण ,

इसे वेब एप्लिकेशन के web.xml में जोड़ा जाना चाहिए

<taglib>
    <taglib-uri>/java2s</taglib-uri>
    <taglib-location>/WEB-INF/java2s.tld</taglib-location>
</taglib>

फ़ाइल बनाएँ: java2s.tld / WEB-INF / में

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<!-- a tab library descriptor -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>Java2s Simple Tags</short-name>

    <!-- this tag manipulates its body content by converting it to upper case
    -->
    <tag>
        <name>bodyContentTag</name>
        <tag-class>com.java2s.BodyContentTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
          <name>howMany</name>
        </attribute>
    </tag>
</taglib>

WEB-INF \ classes \ com \ java2s में निम्न कोड संकलित करें

package com.java2s;

import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class BodyContentTag extends BodyTagSupport{
    private int iterations, howMany;

    public void setHowMany(int i){
        this.howMany = i;
    }

    public void setBodyContent(BodyContent bc){
        super.setBodyContent(bc);
        System.out.println("BodyContent = '" + bc.getString() + "'");
    }

    public int doAfterBody(){
        try{    
            BodyContent bodyContent = super.getBodyContent();
            String bodyString  = bodyContent.getString();
            JspWriter out = bodyContent.getEnclosingWriter();

            if ( iterations % 2 == 0 ) 
                out.print(bodyString.toLowerCase());
            else
                out.print(bodyString.toUpperCase());

            iterations++;
            bodyContent.clear(); // empty buffer for next evaluation
        }
        catch (IOException e) {
            System.out.println("Error in BodyContentTag.doAfterBody()" + e.getMessage());
            e.printStackTrace();
        } // end of catch

        int retValue = SKIP_BODY;

        if ( iterations < howMany ) 
            retValue = EVAL_BODY_AGAIN;

        return retValue;
    }
}

सर्वर प्रारंभ करें और ब्राउज़र में bodyContent.jsp लोड करें

<%@ taglib uri="/java2s" prefix="java2s" %>
<html>
    <head>
        <title>A custom tag: body content</title>
    </head>
    <body>
        This page uses a custom tag manipulates its body content.Here is its output:
        <ol>
            <java2s:bodyContentTag howMany="3">
            <li>java2s.com</li>
            </java2s:bodyContentTag>
        </ol>
    </body>
</html>

हालांकि घटकों की पुन: प्रयोज्यता ठीक है यह कुछ क्षेत्र को लक्षित करता है
tomasb

25

विकेट भी एक विकल्प है जो जावा को html से पूरी तरह से अलग करता है, इसलिए एक डिजाइनर और प्रोग्रामर एक साथ काम कर सकते हैं और कोड के अलग-अलग सेट पर एक-दूसरे को बहुत कम समझ सकते हैं।

विकेट को देखो।


23

आपने एक अच्छा सवाल उठाया और यद्यपि आपको अच्छे उत्तर मिले, मैं आपको सुझाव दूंगा कि आप JSP से छुटकारा पा लें। यह पुरानी तकनीक है जो अंततः मर जाएगी। टेम्पलेट इंजन की तरह, एक आधुनिक दृष्टिकोण का उपयोग करें। आपके पास व्यापार और प्रस्तुति परतों का बहुत स्पष्ट पृथक्करण होगा, और निश्चित रूप से टेम्पलेट्स में कोई जावा कोड नहीं होगा, इसलिए आप सीधे वेब प्रस्तुति संपादन सॉफ्टवेयर से टेम्पलेट उत्पन्न कर सकते हैं, ज्यादातर मामलों में WYSIWYG का लाभ उठा सकते हैं।

और निश्चित रूप से फिल्टर और पूर्व और पोस्ट प्रोसेसिंग से दूर रहें, अन्यथा आप समर्थन / डिबगिंग कठिनाइयों से निपट सकते हैं क्योंकि आपको हमेशा यह नहीं पता होता है कि चर का मूल्य कहां है।


9
JSP स्वयं एक टेम्पलेट इंजन है
वारफॉक्स

1
-1 - फ़िल्टर, प्री-प्रोसेसर, और पोस्ट-प्रोसेसर का उपयोग करने के कई पूरी तरह से वैध कारण हैं। हां, आप उन मूल्यों के साथ समाप्त हो सकते हैं जो रहस्यमय प्रतीत होते हैं, लेकिन यदि आप अपनी वास्तुकला को समझते हैं तो नहीं।
RustyTheBoyRobot

21

JSP फ़ाइलों में जावा कोड से बचने के लिए जावा अब JSTL जैसी टैग लाइब्रेरी प्रदान करता है जावा भी JSF के साथ आया है जिसमें यू टैगिंग के रूप में सभी प्रोग्रामिंग संरचनाओं को लिख सकता है


21

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

निम्नलिखित सामग्री के साथ अपने WEB-INF / टैग के तहत base.tag नामक एक मास्टर पेज बनाएँ

<%@tag description="Overall Page template" pageEncoding="UTF-8"%>

<%@attribute name="title" fragment="true" %>

<html>
  <head>
    <title>  
       <jsp:invoke fragment="title"></jsp:invoke>
    </title>

  </head>
  <body>
    <div id="page-header">
       ....
    </div>
    <div id="page-body">
      <jsp:doBody/>
    </div>
    <div id="page-footer">
      .....
    </div>
  </body>
</html>

इस मैटर पेज पर, मैंने "शीर्षक" नामक एक खंड बनाया, ताकि बाल पृष्ठ में, मैं मास्टर पृष्ठ के इस स्थान में अधिक कोड सम्मिलित कर सकूं। साथ ही, टैग <jsp:doBody/>को बाल पृष्ठ की सामग्री से बदल दिया जाएगा

अपने WebContent फ़ोल्डर में चाइल्ड पेज (child.jsp) बनाएं:

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

<t:base>
    <jsp:attribute name="title"> 
        <bean:message key="hello.world" />
    </jsp:attribute>

    <jsp:body>
    [Put your content of the child here]
    </jsp:body>   
</t:base>

<t:base>आपके द्वारा उपयोग किए जाने वाले मास्टर पृष्ठ को निर्दिष्ट करने के लिए उपयोग किया जाता है (जो इस समय आधार है।)। <jsp:body>यहां टैग के अंदर की सभी सामग्री <jsp:doBody/>आपके मास्टर पृष्ठ पर बदल जाएगी । आपके चाइल्ड पेज में कोई टैग लिब भी शामिल हो सकता है और आप सामान्य रूप से बताए गए अन्य की तरह इसका उपयोग कर सकते हैं। हालांकि, यदि आप यहां किसी भी स्क्रिप्टलेट कोड का उपयोग करते हैं ( <%= request.getParameter("name") %>...) और इस पृष्ठ को चलाने का प्रयास करें, तो आपको ए JasperException because Scripting elements ( &lt;%!, &lt;jsp:declaration, &lt;%=, &lt;jsp:expression, &lt;%, &lt;jsp:scriptlet ) are disallowed here। इसलिए, ऐसा कोई तरीका नहीं है कि दूसरे लोग jsp फ़ाइल में बुराई कोड को शामिल कर सकें

इस पृष्ठ को अपने नियंत्रक से कॉल करना:

आप आसानी से अपने कंट्रोलर से child.jsp फाइल को कॉल कर सकते हैं। यह स्ट्रट्स फ्रेमवर्क के साथ भी अच्छा काम करता है


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


18

बस JSTL टैग और EL अभिव्यक्ति का उपयोग करें।


17

अगर कोई वास्तव में एक से अधिक भाषाओं में प्रोग्रामिंग के खिलाफ है , तो मैं GWT का सुझाव देता हूं, सैद्धांतिक रूप से आप सभी JS और HTML तत्वों से बच सकते हैं, क्योंकि Google Toolkit सभी क्लाइंट और साझा कोड को JS में बदल देता है, इसलिए आपको उनसे कोई समस्या नहीं होगी, इसलिए आपके पास किसी अन्य भाषाओं में कोडिंग के बिना एक webservice है। यहां तक ​​कि आप कुछ डिफ़ॉल्ट सीएसएस का उपयोग कहीं से भी कर सकते हैं क्योंकि यह एक्सटेंशन (स्मार्टगीडब्ल्यूटी या वाडिन) द्वारा दिया गया है। आपको दर्जनों एनोटेशन सीखने की आवश्यकता नहीं है।

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

और निश्चित रूप से कई साथी प्रोग्रामर ने कई अन्य समाधानों का वर्णन किया है या सिफारिश की है। GWT उन लोगों के लिए है जो वास्तव में वेब पार्ट से निपटना नहीं चाहते हैं या इसे कम से कम करना चाहते हैं।


1
वास्तव में ओपी के सवाल का जवाब नहीं है।
इवान डोनोवन

1
@ EvanDonovan अच्छी तरह से, व्यावहारिक रूप से यह एक जवाब देता है। आपको जावा कोड को अन्य भाषाओं के साथ मिलाने की जरूरत नहीं है। मैं मानता हूं कि यह कोडिंग के लिए जावा का उपयोग करता है, लेकिन यह जावा कॉल के बिना जेएस में अनुवाद किया जाएगा। लेकिन सवाल का दायरा यह है कि क्लासिक जेएसपी की अराजकता से कैसे बचा जाए। और GWT तकनीक हल करती है। मैंने इस उत्तर को जोड़ा क्योंकि किसी ने भी इसका उल्लेख नहीं किया, लेकिन यह प्रासंगिक है क्योंकि यह JSP का एक विकल्प है। मैं प्रश्न के पूरे दायरे का उत्तर नहीं देना चाहता था, लेकिन ऐसे लोगों के लिए एक मूल्यवान जानकारी जोड़ना चाहता हूं जो विकल्प के लिए ooking कर रहे हैं।
CsBalazsHungary

16

पायथन दुनिया से एक साफ विचार टेम्पलेट विशेषता भाषाएं हैं ; TAL को Zope (इसलिए उर्फ ​​"Zope Page Templates", ZPT) द्वारा प्रस्तुत किया गया था और यह एक मानक है, PHP, XSLT और Java में कार्यान्वयन के साथ ही (मैंने पायथन / Zope और PHP अवतार का उपयोग किया है)। टेम्प्लेटिंग भाषाओं की इस श्रेणी में, ऊपर का एक उदाहरण इस तरह दिख सकता है:

<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name">Example product</td>
        <td tal:content="product/description">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

कोड साधारण HTML (या एक्सएचटीएमएल) की तरह दिखता है और एक्सएमएल नेमस्पेस में कुछ विशेष विशेषताएँ; यह एक ब्राउज़र के साथ देखा जा सकता है और एक डिजाइनर द्वारा सुरक्षित रूप से ट्वीक किया जा सकता है। मैक्रोज़ के लिए और i18n के लिए भी समर्थन है:

<h1 i18n:translate="">Our special offers</h1>
<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name"
            i18n:translate="">Example product</td>
        <td tal:content="product/description"
            i18n:translate="">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

यदि सामग्री के अनुवाद उपलब्ध हैं, तो उनका उपयोग किया जाता है।

मैं जावा कार्यान्वयन के बारे में बहुत अधिक नहीं जानता , हालाँकि।


1
2009 के बाद से JSP फेसलेट्स द्वारा सफल रहा है जो इस सामान का समर्थन करता है। फेसलेट्स भी XML आधारित है। अन्य लोगों के बीच फेसलेट्स अध्याय जावा ईई 6 ट्यूटोरियल और ui:xxxफेसलिफ्ट वीडीएल में टैग भी देखें ।
बालुस

मैं फेसलेट्स को बहुत अच्छी तरह से नहीं जानता, लेकिन IIRC यह उन सभी वर्गों को लिखने के बारे में है जो कस्टम XML तत्वों को लागू करते हैं। TAL / ZPT तरीका उन टेम्प्लेट्स को सम्‍मिलित करना है जिनमें सही (X) HTML विशेष गुण के साथ है जो मूल तत्‍वों को भरते या प्रतिस्थापित करते हैं; इस प्रकार, आप कामकाजी टेम्पलेट देख सकते हैं और अच्छी डमी सामग्री के साथ एक प्रोटोटाइप देख सकते हैं। मुझे यकीन नहीं है कि फेसलेट्स कस्टम विशेषताओं का उपयोग करके मूल HTML तत्वों (w / o एक अतिरिक्त नाम स्थान) को ट्वीक करने की अनुमति देता है।
टोबियास

मैं सिर्फ इस Facelets सामान पर एक और देखो था। इसमें सभी प्रकार की मान्यता सुविधाएं आदि शामिल हैं और इस प्रकार यह TAL की तुलना में पूरी तरह से अलग दर्शन का अनुसरण करता है। TAL तरीका यह है, "लॉजिक को जितना संभव हो सके टेम्पलेट से बाहर रखें; सभी जटिल चीजें नियंत्रक द्वारा की जाए जो इसे खिलाता है।" आप कभी भी एक डिजाइनर को फेसलेट्स का टेंपलेट नहीं देंगे, ताकि वह उसे ट्विस्ट कर सके; यह संभव नहीं है। उत्पन्न सामग्री के बारे में - यह tal:replace="structure (expression)"हर समय विशेषताओं का उपयोग करने जैसा है ।
टोबियास

15

JSP में स्क्रिप्टलेट का उपयोग करना एक अच्छा अभ्यास नहीं है।

इसके बजाय, आप उपयोग कर सकते हैं:

  1. JSTL टैग
  2. ईएल अभिव्यक्ति
  3. कस्टम टैग- आप अपने खुद के टैग का उपयोग करने के लिए परिभाषित कर सकते हैं।

कृपया देखें:

  1. http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html
  2. ईएल

14

ज़रूर, बदलें <%! counter++; %> एक घटना निर्माता-उपभोक्ता वास्तुकला द्वारा किया जाता है, जहां व्यापार परत को काउंटर को बढ़ाने की आवश्यकता के बारे में सूचित किया जाता है, यह तदनुसार प्रतिक्रिया करता है, और प्रस्तुतकर्ताओं को सूचित करता है ताकि वे विचारों को अपडेट करें। कई डेटाबेस लेनदेन शामिल हैं, क्योंकि भविष्य में हमें काउंटर के नए और पुराने मूल्य को जानना होगा, जिन्होंने इसे बढ़ाया है और किस उद्देश्य को ध्यान में रखते हुए। स्पष्ट रूप से क्रमांकन शामिल है, क्योंकि परतें पूरी तरह से विघटित हैं। आप RMI, IIOP, SOAP पर अपना काउंटर बढ़ा सकते हैं। लेकिन केवल HTML की आवश्यकता होती है, जिसे आप लागू नहीं करते हैं, क्योंकि यह एक ऐसा सांसारिक मामला है। आपका नया लक्ष्य अपने नए चमकदार E7, 64GB RAM सर्वर पर एक सेकंड में 250 वेतन वृद्धि तक पहुंचना है।

मेरे पास प्रोग्रामिंग में 20 से अधिक वर्ष हैं, अधिकांश परियोजनाएं सेक्सेट से पहले विफल हो जाती हैं: पुन: प्रयोज्यता प्रत्यावर्तन OO- क्षमता डिबगैबिलिटी परीक्षणशीलता रखरखाव की भी आवश्यकता है। अन्य परियोजनाएं, केवल कार्यक्षमता के बारे में परवाह करने वाले लोगों द्वारा चलाई गईं, बेहद सफल रहीं। इसके अलावा, कड़ी वस्तु संरचना, जो परियोजना में बहुत पहले लागू की गई है, कोड को विशिष्टताओं (उर्फ फुर्तीले) में कठोर परिवर्तनों के अनुकूल नहीं बना सकती है।

इसलिए मैं "परतों" या अनावश्यक डेटा संरचनाओं को परिभाषित करने की गतिविधि को शिथिलता के रूप में परियोजना में या जब विशेष रूप से आवश्यक नहीं मानता हूं।  


11

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


8

अगर हम एक जावा वेब एप्लीकेशन में निम्नलिखित चीजों का उपयोग करते हैं, तो JSP के अग्रभूमि से जावा कोड को समाप्त किया जा सकता है।

  1. वेब एप्लिकेशन के लिए MVC आर्किटेक्चर का उपयोग करें

  2. JSP टैग का उपयोग करें

    ए। मानक टैग

    ख। कस्टम टैग

  3. अभिव्यक्ति की भाषा


8

JSP फ़ाइलों में जावा कोड से कैसे बचें?

आप एक्सप्रेशन लैंग्वेज ( ईएल ) के अलावा JSTL जैसे टैब लाइब्रेरी टैग का उपयोग कर सकते हैं । लेकिन JSP के साथ EL अच्छा काम नहीं करता है। इसलिए जेएसपी को पूरी तरह से छोड़ना और फेसलेट्स का उपयोग करना बेहतर है

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

यहां छवि विवरण दर्ज करें

स्रोत


मैं निश्चित रूप से इस प्रतिक्रिया को दूसरा। जेएसएफ फेसलेट्स के साथ या बिना। मैंने सोचा था कि जेएसपी में विकास 10 साल पहले ही काफी हद तक बंद हो गया था। मैंने आखिरी बार 2000 में JSP लिखा था!
दोपहर

4

स्क्रिप्टलेट्स का उपयोग करना बहुत पुराना तरीका है और इसकी सिफारिश नहीं की जाती है। यदि आप अपने जेएसपी पृष्ठों में सीधे कुछ आउटपुट चाहते हैं तो सिर्फ JSTL के साथ अभिव्यक्ति भाषा (EL) का उपयोग करें ।

अन्य विकल्प भी हैं जैसे कि टेम्प्लेटिंग इंजन का उपयोग करना जैसे कि वेलोसिटी, फ़्रीमार्कर, थाइमेलिफ़ आदि। लेकिन ईएल और जेएसटीएल के साथ सादे जेएसपी का उपयोग करना मेरा उद्देश्य सबसे अधिक समय तक काम करता है और यह शुरुआती के लिए सबसे सरल भी लगता है।

यह भी ध्यान रखें कि दृश्य परत में व्यावसायिक तर्क करने के लिए यह सबसे अच्छा अभ्यास नहीं है, आपको सेवा परत में अपने व्यापार लॉगिक्स का प्रदर्शन करना चाहिए, और आउटपुट परिणामों को एक नियंत्रक के माध्यम से अपने विचारों में पारित करना चाहिए।


3

उसमे से कुछ भी उपयोग नहीं किया जाता है मेरे दोस्त, मेरी सलाह सर्वर से दृश्य (सीएसएस, एचटीएमएल, जावास्क्रिप्ट, आदि) को डिकूप करने की है।

मेरे मामले में मैं अपने सिस्टम को कोणीय के साथ दृश्य को संभालने का काम करता हूं और आवश्यक किसी भी डेटा को बाकी सेवाओं का उपयोग करके सर्वर से लाया जाता है।

मेरा विश्वास करो, यह आपके डिजाइन करने के तरीके को बदल देगा


3

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


3

JSP 2.0 में "टैग फ़ाइलें" नामक एक सुविधा है , आप बाहरी javaकोड के बिना टैग लिख सकते हैं और tld। आपको एक .tagफ़ाइल बनाने और उसमें डालने की आवश्यकता हैWEB-INF\tags आप अपने टैग को पैकेज करने के लिए एक निर्देशिका संरचना भी बना सकें।

उदाहरण के लिए:

/WEB-INF/tags/html/label.tag

<%@tag description="Rensders a label with required css class" pageEncoding="UTF-8"%>
<%@attribute name="name" required="true" description="The label"%>

<label class="control-label control-default"  id="${name}Label">${name}</label>

इसका उपयोग करें

<%@ taglib prefix="h" tagdir="/WEB-INF/tags/html"%>
<h:label  name="customer name" />

साथ ही, आप टैग बॉडी को आसानी से पढ़ सकते हैं

/WEB-INF/tags/html/bold.tag
<%@tag description="Bold tag" pageEncoding="UTF-8"%>
<b>
  <jsp:doBody/>
</b>

इसका इस्तेमाल करें

<%@ taglib prefix="h" tagdir="/WEB-INF/tags/bold"%>
<h:bold>Make me bold</h:bold>

नमूने बहुत सरल हैं, लेकिन आप यहां बहुत सारे जटिल कार्य कर सकते हैं। कृपया विचार करें कि आप अन्य टैग का उपयोग कर सकते हैं (जैसे: JSTLजिसमें टैग को नियंत्रित करना हो जैसेif/forEcah/chosen की तरह पाठ हेरफेर format/contains/uppercaseया यहाँ तक कि एसक्यूएल टैग select/update), उदाहरण के लिए, सभी प्रकार के पैरामीटर पास Hashmap, पहुंच session,request ... आपके टैग फ़ाइल में भी।

टैग फ़ाइल इतनी आसानी से विकसित की जाती है क्योंकि आपको उन्हें बदलते समय सर्वर को पुनरारंभ करने की आवश्यकता नहीं थी, जैसे कि जेएसपी फाइलें। इससे उन्हें विकास में आसानी होती है।

यहां तक ​​कि अगर आप स्ट्रट्स 2 जैसे ढांचे का उपयोग करते हैं, जिसमें बहुत सारे अच्छे टैग हैं, तो आप पा सकते हैं कि आपके स्वयं के टैग होने से आपका कोड बहुत कम हो सकता है। आप अपने टैग मापदंडों को स्ट्रट्स में पास कर सकते हैं और इस तरह से अपने फ्रेमवर्क टैग को कस्टमाइज़ कर सकते हैं।

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

(यहां तक ​​कि अगर आप अपने JSP कोड में जावा का उपयोग करते हैं, जो मुझे आशा नहीं है, तो आप उस कोड को टैग में एन्क्रिप्ट कर सकते हैं)


1

जैसा कि कई जवाब कहते हैं, JSTL का उपयोग करें या अपने स्वयं के कस्टम टैग बनाएं। यहाँ कस्टम टैग बनाने के बारे में अच्छी व्याख्या है


1
  1. अपने सर्वलेट वर्गों के अंदर अपने मूल्यों और मापदंडों को बनाएं
  2. JSTL / Taglib का उपयोग करके उन मूल्यों और मापदंडों को अपने JSP के भीतर लाएँ

इस दृष्टिकोण के बारे में अच्छी बात यह है कि आपका कोड भी कोड की तरह HTML है!


0

ईएल अभिव्यक्ति के साथ जेएसटीएल टैग का उपयोग करके आप इससे बच सकते हैं। निम्नलिखित चीजों को अपने जेएसपी पृष्ठ पर रखें:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.