JSP में Java कोड से छुटकारा: JSP 2 के 3 शक्तिशाली दृष्टिकोण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

अलविदा, स्पेगेटी कोड: JSP से Java को हमेशा के लिए कैसे हटाएं

\n\n

यदि आपने कभी कोई पुरानी JSP फ़ाइल खोली है और उसमें HTML, <% %> स्क्रिप्टलेट और Java लॉजिक का मिश्रण देखा है, तो आप उस भावना को जानते हैं। प्रस्तुति और व्यावसायिक तर्क का मिश्रण प्रोजेक्ट के रखरखाव को नरक बना देता है। Stack Overflow पर प्रश्न "How can I avoid Java code in JSP files, using JSP 2?" ने हजारों व्यूज प्राप्त किए हैं - और यह सही भी है।

\n\n

अच्छी खबर: JSP 2 (Java Server Pages संस्करण 2) ने हमें ऐसे उपकरण दिए हैं जिनसे हम स्क्रिप्टलेट को हमेशा के लिए भूल सकते हैं। इस लेख में मैं तीन वास्तविक दृष्टिकोण दिखाऊंगा जो आपके JSP को स्वच्छ, पढ़ने योग्य टेम्पलेट में बदल देंगे। कोई बकवास नहीं - केवल कोड और अभ्यास।

\n\n

स्क्रिप्टलेट बुराई क्यों हैं? एक डेवलपर का दृष्टिकोण

\n\n

स्क्रिप्टलेट (वे <% ... %>) MVC के मुख्य सिद्धांत का उल्लंघन करते हैं: तर्क और प्रस्तुति का पृथक्करण। यहां तीन कारण हैं कि उनसे छुटकारा क्यों पाना चाहिए:

\n\n
    \n
  • रखरखाव में कठिनाई। जब JSP में SQL क्वेरी और सशर्त ऑपरेटर होते हैं, तो डिज़ाइनर सुरक्षित रूप से लेआउट में बदलाव नहीं कर सकता।
  • \n
  • कठिन परीक्षण। JSP के अंदर के तर्क को यूनिट टेस्ट से परीक्षण नहीं किया जा सकता।
  • \n
  • खराब पठनीयता। कोड "स्पेगेटी" बन जाता है जहां Java HTML के साथ मिल जाता है।
  • \n
\n\n

JSP 2 सुरुचिपूर्ण विकल्प प्रदान करता है। आइए एक वास्तविक कार्य के उदाहरण पर इन्हें समझें: डेटाबेस से उपयोगकर्ताओं की सूची प्रदर्शित करना।

\n\n

दृष्टिकोण 1: Expression Language (EL) - आपका नया दोस्त

\n\n

Expression Language (EL) आपको Java ऑब्जेक्ट्स को JSP में बिना एक भी लाइन Java कोड के एक्सेस करने की अनुमति देता है। सिंटैक्स ${...} सहज रूप से समझ में आता है।

\n\n

पहले (Java कोड के साथ):

\n\n
<% \n    User user = (User) request.getAttribute("user"); \n    out.println("नमस्ते, " + user.getName());\n%>
\n\n

अब (EL के साथ):

\n\n
<p>नमस्ते, ${user.name}</p>
\n\n

EL स्वचालित रूप से गेटर्स को कॉल करता है। यदि user.getName() एक स्ट्रिंग लौटाता है - तो वह HTML में डाल दी जाएगी। यदि ऑब्जेक्ट null है - तो EL कुछ भी आउटपुट नहीं करेगा (NullPointerException के बिना)।

\n\n

कहां उपयोग करें: request, session, application scope या अनुरोध पैरामीटर से डेटा प्रदर्शित करने के लिए।

\n\n

दृष्टिकोण 2: JSTL (JSP Standard Tag Library) - Java के बिना लूप और शर्तें

\n\n

JSTL तैयार टैग्स का एक सेट है जो 90% सामान्य कार्यों को कवर करता है: लूप, शर्तें, फ़ॉर्मेटिंग, URL के साथ काम। इसे कनेक्ट करने के लिए बस pom.xml (Maven) में डिपेंडेंसी जोड़ें या JAR डाउनलोड करें।

\n\n

उदाहरण: उपयोगकर्ताओं की सूची को तालिका में प्रदर्शित करना।

\n\n

पहले (स्क्रिप्टलेट):

\n\n
<table>\n    <%\n        List<User> users = (List<User>) request.getAttribute("users");\n        for (User u : users) {\n    %>\n        <tr><td><%= u.getName() %></td><td><%= u.getEmail() %></td></tr>\n    <%\n        }\n    %>\n</table>
\n\n

अब (JSTL + EL):

\n\n
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\n<table>\n    <c:forEach var="u" items="${users}">\n        <tr>\n            <td>${u.name}</td>\n            <td>${u.email}</td>\n        </tr>\n    </c:forEach>\n</table>
\n\n

ध्यान दें: Java की एक भी लाइन नहीं! टैग <c:forEach> foreach-लूप की तरह काम करता है, और ${u.name} एक EL-एक्सप्रेशन है। कोड पढ़ने योग्य और सुरक्षित हो गया है।

\n\n

अन्य उपयोगी JSTL टैग्स:

\n
    \n
  • <c:if test="${condition}"> - सशर्त आउटपुट
  • \n
  • <c:choose> - switch का एनालॉग
  • \n
  • <c:set var="x" value="..." /> - वेरिएबल बनाना
  • \n
  • <fmt:formatDate> - तिथियों का फ़ॉर्मेटिंग
  • \n
\n\n

दृष्टिकोण 3: Custom Tags (उपयोगकर्ता-परिभाषित टैग्स) - पूर्ण नियंत्रण

\n\n

यदि JSTL पर्याप्त नहीं है, तो आप अपने स्वयं के टैग्स बना सकते हैं। यह आपको जटिल तर्क को JSP से एक अलग Java क्लास में निकालने की अनुमति देता है।

\n\n

उदाहरण: एक टैग बनाना जो उपयोगकर्ता कार्ड प्रदर्शित करता है।

\n\n

चरण 1: टैग हैंडलर क्लास (Java)

\n\n
package com.example.tags;\n\nimport javax.servlet.jsp.tagext.SimpleTagSupport;\nimport javax.servlet.jsp.JspWriter;\nimport java.io.IOException;\n\npublic class UserCardTag extends SimpleTagSupport {\n    private User user;\n\n    public void setUser(User user) {\n        this.user = user;\n    }\n\n    public void doTag() throws IOException {\n        JspWriter out = getJspContext().getOut();\n        out.println("<div class='user-card'>");\n        out.println("<h3>" + user.getName() + "</h3>");\n        out.println("<p>Email: " + user.getEmail() + "</p>");\n        out.println("</div>");\n    }\n}
\n\n

चरण 2: TLD फ़ाइल (टैग लाइब्रेरी विवरणक)

\n\n
<?xml version="1.0" encoding="UTF-8" ?>\n<taglib xmlns="http://java.sun.com/xml/ns/j2ee"\n        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"\n        version="2.0">\n    <tlib-version>1.0</tlib-version>\n    <short-name>mytags</short-name>\n    <tag>\n        <name>userCard</name>\n        <tag-class>com.example.tags.UserCardTag</tag-class>\n        <body-content>empty</body-content>\n        <attribute>\n            <name>user</name>\n            <required>true</required>\n            <rtexprvalue>true</rtexprvalue>\n        </attribute>\n    </tag>\n</taglib>
\n\n

चरण 3: JSP में उपयोग

\n\n
<%@ taglib uri="/WEB-INF/tlds/mytags.tld" prefix="mytags" %>\n<mytags:userCard user="${currentUser}" />
\n\n

परिणाम: JSP में केवल एक टैग है, और सारा HTML जनरेशन Java क्लास में है। यह पृथक्करण का उच्चतम स्तर है।

\n\n

निष्कर्ष: आज ही स्क्रिप्टलेट छोड़ें

\n\n

JSP 2 ने JSP को एक शक्तिशाली टेम्पलेट इंजन में बदल दिया है। तीन दृष्टिकोण - EL, JSTL और कस्टम टैग्स - आपको Java कोड को पूरी तरह से हटाने की अनुमति देते हैं। इससे कोड साफ, सुरक्षित और बनाए रखने में आसान हो जाता है।

\n\n

अपने प्रोजेक्ट में आज ही शुरुआत करें: सबसे सरल EL से शुरू करें, फिर JSTL जोड़ें, और यदि आवश्यक हो तो कस्टम टैग्स बनाएं। आपकी टीम और आपका भविष्य स्वयं आपको धन्यवाद देंगे!

ब्लॉग

पुस्तक अनुशंसाएँ