JavaServer Pages (जावासर्वर पेजेस)

सर्वलेट्स

संरचनात्मक रूप से, JSP को Java servlets (जावा सर्वलेट) के उच्च स्तरीय एबस्ट्रेकशन के रूप में देखा जा सकता है। सर्वलेट और JSP दोनों मूल रूप से Sun Microsystems (सन माइक्रोसिस्टम्स) में विकसित किए गए। JSP specification (JSP विनिर्देशन) के 1.2 संस्करण के साथ शुरू करते हुए, JavaServer Pages (जावासर्वर पेजेस) का विकास जावा समुदाय प्रक्रिया के तहत किया गया है। JSR 53 JSP 1.2 और सर्वलेट 2.3 विनिर्देशों दोनों को परिभाषित करता है और JSR 152 JSP 2.0 विनिर्देश को परिभाषित करता है। मई 2006 को JSP 2.1 विनिर्देश को जावा EE 5 के भाग के रूप में JSR 245 के तहत जारी किया गया है। JSPs को एक JSP compiler (JSP कम्पाइलर) के द्वारा सर्वलेट्स में कम्पाइल किया जाता है। कम्पाइलर या तो जावा कोड में एक सर्वलेट उत्पन्न करता है जो फिर जावा कम्पाइलर के द्वारा कम्पाइल किया जाता है, या यह बाईट कोड के लिए सर्वलेट को कम्पाइल कर सकता है जो प्रत्यक्ष रूप से निष्पादित किया जा सकता है। 
JSPs की व्याख्या ओन-द-फ्लाई भी की जा सकती है, इससे पुनः लोड परिवर्तनों में लगने वाला समय कम हो जाता है। चाहे JSP कम्पाइलर एक सर्वलेट के लिए जावा स्रोत कोड को उत्पन्न करे या सीधे बाईट कोड को उत्पन्न करे, यह इस बात को समझने में मदद करता है की JSP कम्पाइलर कैसे पेज को जावा सर्वलेट में रूपांतरित कर देता है।
उदाहरण के लिए, निम्न इनपुट JSP पर और इसके परिणामी उत्पन्न जावा सर्वलेट पर विचार करें।
इनपुट JSP 
 
परिणामी सर्वलेट  
package jsp_servlet;import java.util.*;import java.io.*;import javax.servlet. *;import javax.servlet.http.*;import javax.servlet.jsp.*;
 import javax.servlet.jsp.tagext.*;


 import com.foo.bar; // <%@ page import="com.foo.bar" %> के परिणाम के रूप में आयातित 
 import …


 class _myservlet javax.servlet का क्रियान्वयन करता है।Servlet, javax.servlet.jsp.HttpJspPage {
 // के रूप में डाली गयीं 
 // <%! का परिणाम int serverInstanceVariable = 1;%>
 int serverInstanceVariable = 1;
 ...


 public void _jspService(javax.servlet.http.HttpServletRequest अनुरोध,
 javax.servlet.http.HttpServletResponse प्रतिक्रिया)throws javax.servlet.ServletException,
 java.io.IOException
 (
 javax.servlet.ServletConfig config = …; // Get the servlet configObject page = this;
 PageContext pageContext = …; // इस अनुरोध के लिए page context प्राप्त करें. 
 javax.servlet.jsp.JspWriter out = pageContext.getOut();
 HttpSession session= request.getSession (true);try {
 out.print("<html>\r\n");
 out.print("<head>\r\n");
 ...
 // <% int localStackBasedVariable = 1; %> से 
 int localStackBasedVariable = 1;
 ...
 out.print ("<table><td>\r\n");
 out.print (" <tr><td>");
 // From <%= toStringOrBlank("expanded inline data " + 1) %>
 out.print(toStringOrBlank("expanded inline data " + 1));
 out.print (" </td></tr><td>\r\n");
 ...
 } catch (Exception _exception) {
 // Clean up and redirect to error page in <%@ page errorPage="myerror.jsp" %>}
 }
 
}

Model-view-controller paradigm (मॉडल-दृश्य-नियंत्रक प्रतिमान)

सन की सिफारिश है कि मोडल-दृश्य-नियंत्रक-प्रतिरूप का उपयोग JSP फाइलों में किया जाता है ताकि request processing (अनुरोध प्रसंस्करण) और computer data storage (कंप्यूटर डेटा भंडारण)से प्रेजेंटेशन का विभाजन किया जा सके। 
या तो नियमित सर्वलेट्स या JSP फाइलों का उपयोग अनुरोध को प्रोसेस करने के लिए किया जाता है। अनुरोध प्रसंस्करण के पूरा हो जाने के बाद, नियंत्रण को JSP को भेज दिया जाता है जिसका उपयोग आउटपुट के निर्माण में किया जाता है। 
वेबटायर्स के लिए मोडल-दृश्य-नियंत्रक-प्रतिरूप पर आधारित कई प्लेटफोर्म होते हैं (जैसे Barracuda, Apache Struts, Stripes और the Spring MVC framework)।

JSP का संकेतन

JSP पेज एक HTML या XML दस्तावेज़ में टैग लगते हैं जिनका मूल्यांकन कम्पाइलर के द्वारा किया जाता है। 
इसे उन स्क्रिप्टिंग टैग का उपयोग करके किया जा सकता है, जो PHP या ASP.NET में प्रयुक्त किये जाने वाले टैग्स के समान होते हैं, या JSP टैग लाइब्रेरी के आयात के द्वारा भी इसे किया जा सकता है।

jsp: include

<html><head></head><body>
 <jsp:include page="mycommon.jsp" >
 <jsp:param name="extraparam" value="myvalue" /></jsp:include>
name:<%=request.getParameter("extraparam")%>
</body></html>

jsp:forward

<jsp:forward page="subpage.jsp" >
 <jsp:param name="forwardedFrom" value="this.jsp" /></jsp:forward>
इस अग्रेषण उदाहरण में, अनुरोध को "subpage.jsp" को अग्रेषित किया जाता है। अनुरोध हैंडलिंग इस पृष्ठ पर वापस नहीं लौटती है।

jsp:plugin

<jsp:plugin type=applet height="100%" width="100%"archive="myjarfile.jar,myotherjar.jar"
 codebase="/applets"
 code="com.foo..MyApplet" >
 <jsp:params><jsp:param name="enableDebug" value="true" /></jsp:params><jsp:fallback>
आपका ब्राउज़र एप्लेट्स का समर्थन नहीं करता.
</jsp:fallback></jsp:plugin>
प्लगइनउदाहरण एक वेब पेज में एपलेट्स को प्रविष्ट करने का एक <html> समान तरीका बताते हैं। <OBJECT > टैग के आने से पहले, एपलेट्स को प्रविष्ट करने का कोई सामान्य तरीका नहीं था।
वर्तमान में, jsp:plugin टैग गतिशीलता की अनुमति नहीं देता है जिसे एपलेट कहते हैं। उदाहरण के लिए, jsp: params का उपयोग एक चार्टिंग एपलेट के साथ नहीं किया जा सकता है जिसे मानकों के रूप में देता बिन्दुओं को पास करने की आवश्यकता होती है, जब तक डाटा बिन्दुओं की संख्या स्थिर है।
उदाहरण के लिए आप jsp:param टैग्स के निर्माण के लिए एक ResultSet के माध्यम से लूप नहीं कर सकते हैं।
प्रत्येक jsp: param टैग हस्त कोडित होना चाहिए। हालांकि, उन में से प्रत्येक jsp: param टैग का एक गतिशील नाम और एक गतिशील मान हो सकता है।

JSP मानक टैग लाइब्रेरी (JSTL)

JavaServer Pages (जावासर्वर पेजेस) मानक टैग लाइब्रेरी (JSTL) जावा EE वेब अनुप्रयोग विकास प्लेटफोर्म का एक घटक है। यह सामान्य कार्यों के लिए JSP टैग्स के एक टैग लायब्ररी को जोड़ कर JSP विशिष्टीकरण का विस्तार करता है, जैसे XML डाटा प्रसंस्करण, सशर्त निष्पादन, लूप्स और अंतर्राष्ट्रीयकरण.

अंतर्राष्ट्रीयीकरण

JSP में अंतर्राष्ट्रीयकरण उसी तरह से प्राप्त किया जाता है जैसे सामान्य जावा अनुप्रयोग में, ऐसा स्रोत बण्डल का उपयोग करके किया जाता है।

Java EE 5 Platform में JSP प्रौद्योगिकी

Java EE 5 का ध्यान जावा भाषा एनोटेशन के उपयोग के द्वारा विकास पर केन्द्रित रहा है जिसे J2SE 5.0 के द्वारा शुरू किया गया था। JSP 2.1 इस लक्ष्य में सहायता करता है, इसके लिए वह JSP टैग संचालकों और संदर्भ श्रोताओं पर निर्भरता इंजेक्शन के लिए एनोटेशन को परिभाषित करता है।
Java EE 5 विनिर्देशन का एक अन्य प्रमुख सन्दर्भ है इसकी वेब टायर तकनीकों का संरेखन, नामतः JavaServer Pages (जावासर्वर पेजेस) (JSP), JavaServer Faces (जावा सर्वर फेसेज) (JSF) और JavaServer Pages Standard Tag Library (जावा सर्वर पेजेस स्टेनडर्ड टैग लाइब्रेरी) (JSTL)।
इस संरेखण प्रयास के परिणाम एकीकृत अभिव्यक्ति भाषा (EL) हैं, जो JSP 2.0 और JSF 1.1 द्वारा परिभाषित अभिव्यक्ति भाषाओं को एकीकृत करता है।

एकीकृत EL के लिए मुख्य कुंजी जोड़ जो कि संरेखण के काम से बाहर आया, वह है:
जावा वस्तुओं में चर संदर्भ को हल करने और इन जावा वस्तुओं पर लागू संपत्तियों को हल करने के लिए के लिए एक pluggable API,
आस्थगित अभिव्यक्ति के लिए सहायता, जिसका मूल्यांकन एक टैग हेन्डलर के द्वारा आवश्यकता पड़ने पर किया जाता है, इसके विरीत उनके अभिव्यक्ति समकक्ष, जिनका मूल्यांकन तुंरत किया जाता है जब एक पेज का क्रियान्वयन किया जाता है।
lvalue अभिव्यक्ति के लिए सहयोग, जो असाइन्मेंट आपरेशन के बाईं ओर दिखाई देता है। जब इसे एक lvalue, के रूप में प्रयुक्त किया जाता है, एक EL अभिव्यक्ति एक डाटा सरंचना के लिए एक सन्दर्भ का प्रतिनिधित्व करती है, उदाहरण के लिए: एक जावा बीन प्रोपर्टी, जो किसी यूजर इनपुट को सौंपी जाती है।
नई एकीकृत EL को इसके अपने विनिर्देशन दस्तावेज में परिभाषित किया जाता है, जिसे JSP 2.1 विनिर्देश के साथ डिलीवर किया जाता है।

एकीकृत EL, JSTL टैग, जैसे JSTL इट्रेशन टैग्स का धन्यवाद, जिनका उपयोग अब JSF अवयवों के साथ एक सहज तरीके से किया जा सकता है।

JSP 2.1 leverages the Servlet 2.5 विनिर्देश इसके वेब सिमेन्टिक्स के लिए।