JavaServer Pages (जावासर्वर पेजेस)
JavaServer Pages (जावासर्वर पेजेस) (JSP) एक सर्वर साइड जावा तकनीक है, जो एक जावा वेब अनुप्रयोग कंटेनर (सर्वर) के लिए एक वेब ग्राहक के अनुरोध के जवाब में HTML, XML, या अन्य दस्तावेजों के प्रकारों के साथ, गतिक रूप से विकसित किये गए वेब पेज का निर्माण करने के लिए सॉफ्टवेयर का विकास करने वाले लोगों की मदद करती है। इसे सक्षम बनाने के लिए एक HTML पेज file extension .jsp को दिया जाता है और एक XML मार्क अप file extension .jspx, को दिया जाता है, ताकि जावा सर्वर (कंटेनर) यह पहचान लेगा कि फाइल को ग्राहक को भेजने से पहले JSP प्रोसेसिंग की जरुरत है। JSP पेजों को सर्वर में लोड किया जाता है और इसे एक संरचित विशेष रूप से इन्सटाल किये गए Java server packet (जावा सर्वर पैकेट) से ओपरेट किया जाता है जिसे J2EE Web Application (J2EE वेब एप्लीकेशन) कहा जाता है, इसे अक्सर एक .war या .ear फाइल संग्रह के रूप में पैक किया जाता है।

यह तकनीक जावा कोड को और विशिष्ट पूर्व परिभाषित क्रियाओं को स्टेटिक पेज सामग्री में प्रवेश करने की अनुमति देती है और हर पेज के अनुरोध पर रनटाइम पर सर्वर पर संकलन की अनुमति देती है। जावा सर्वर (J2EE विनिर्देशन) और पेज स्क्रिप्ट दोनों और/या विस्तृत कस्टमाइज्ड प्रोग्रामिंग एक विशेष पहले से इंस्टाल किये गए बेस प्रोग्राम के द्वारा ओपरेट की जाती है, यह प्रोग्राम एक आभासी या वर्चुअल मशीन कहलाता है, जो मेजबान के ऑपरेटिंग सिस्टम को एकीकृत करता है, यह प्रकार Java Virtual Machine (जावा वर्चुअल मशीन) (JVM) होता है। क्योंकि या तो, एक Compiler-JVM set (कम्पाइलर- JVM सेट) (जो एक SDK या JDK कहलाता है) या लोन JVM (जो JRE, Java Runtime Environment(जावा रनटाइम एन्वायरनमेंट) कहलाता है) या दोनों अधिकांश कंप्यूटर प्लेटफोर्म OSs के लिए बने हैं और JVM के लिए कम्पाइल किये गए प्रोग्राम विशेष जावा बाईट कोड फाइलों में कम्पाइल किये जाते हैं, इसके लिए JVM बाईट कोड फाइलें (कम्पाइल किये गए जावा प्रोग्राम के वर्ग की फाइलें) प्लेटफोर्मों के बीच प्रभावी रूप से स्थानांतरित की जा सकती हैं, जिसके लिए विशेष परिस्थितियों या वर्जनिंग कमपेटीबिलिटी के आलावा पुनः कम्पाइल करने की जरुरत नहीं होती है।

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

JSP सिंटेक्स के दो बुनियादी प्रकार हैं, scriptlet (स्क्रिप्टलेट) और markup (मार्कअप) हालांकि मूल रूप से पेज या तो HTML या XML मार्क अप होते हैं। Scriptlet tagging (स्क्रिप्टलेट टैगिंग) (स्क्रिप्टलेट तत्व कहलाते हैं) (सीमांकित) मार्क अप के साथ ब्लोक्स ऑफ़ कोड प्रभावी रूप से मार्क अप नहीं होते हैं और किसी भी API से सम्बंधित जावा सर्वर (उदाहरण सर्वर जो खुद बाइनरी को चला रहें हैं या डाटा बेस कनेक्शन API या जावा मेल API) या अधिक विशिष्ट JSP API भाषा कोड को अनुमति देते हैं कि वह JSP फाइल में अपलब्ध करायी गयी सही घोषणाओं से युक्त एक HTML या XML पेज में प्रवेश कर जाएं और पेज के फाइल एक्सटेंशन प्रयुक्त किये जाते हैं।

स्क्रिप्टलेट ब्लॉक्स को खुद ब्लॉक्स में पूरा होने की जरुरत नहीं होती है, स्टेटमेंट की जरुरत के अनुसार खुद ब्लॉक की आखिरी लाइन पूरी की जाती है, जो विश्लेषणात्मक रूप से सही होती है, इसे एक बाद के ब्लॉक में पूरा किया जा सकता है।
इनलाइन कोडिंग सेक्शन को विभाजित करने की यह प्रणाली step over scripting (स्टेप ओवर स्क्रिप्टिंग) कहलाती है, क्योंकि इसे स्टेप ओवर करके स्टेटिक मार्क अप के चारों और लपेटा जा सकता है।
रनटाइम पर (एक ग्राहक के अनुरोध के दौरान) कोड को कम्पाइल किया जाता है और इसका मूल्यांकन किया जाता है, लेकिन कोड का कम्पाईलेशन (संकलन) आम तौर पर तब होता है जब फाइल के कोड में कोई परिवर्तन होता है।

JSP सिंटेक्स या वाक्यविन्यास में अतिरिक्त XML की तरह के टैग होते हैं, जो JSP एक्शन कहलाते हैं, इनका उपयोग निर्माणात्मक क्रियाओं में किया जाता है। इसके अतिरिक्त, प्रौद्योगिकी JSP टैग लायब्ररीज के निर्माण के लिए अनुमति देता है जो मानक HTML या XML टैग के लिए एक्सटेंशन के रूप में कार्य करता है। JVM के द्वारा ओपरेट किये गए लायब्ररी, एक वेब सर्वर की क्षमताओं के विस्तार के प्लेटफोर्म स्वतंत्र तरीके उपलब्ध कराता है।

ध्यान दें कि जावा सर्वर के सभी कम्पनी निर्माण, J2EE specification (J2EE विनिर्देशन) अनुरूप नहीं हैं।

 सर्वलेट्स 
संरचनात्मक रूप से, 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 config
Object 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" %>
}
 }
 
}
 
</td></td></table>

 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 डायरोक्टिव 
JSP डायरोक्टिव को एक JSP पेज के शीर्ष पर जोड़ा जाता है। ये निर्देश इस बात पर नियंत्रण करते हैं कि JSP कम्पाइलर कैसे सर्वलेट को उत्पन्न करता है।

निम्नलिखित डायरोक्टिव उपलब्ध हैं:

इनक्लूड
 include directive (इनक्लूड डायरोक्टिव) JSP कम्पाइलर को सूचित करता है कि पूरी फाइल वर्तमान फाइल में शामिल कि जा रही है। यह तब होता है जब शामिल की गयी फाइल के अवयव सीधे मूल फाइल में पेस्ट किये गए थे।
क्रियात्मक रूप से यह इस बात के समान है जैसे वह जो C प्री प्रोसेसर के द्वारा उपलब्ध कराया गया है।
शामिल फाइलों में आम तौर पर एक्सटेनशन "jspf" होता है। (JSP फ्रेगमेंट के लिये):

 <%@ include file="somefile.jspf" %>

पेज
The page directive (पेज डायरोक्टिव) में कई विशेषतायें हैं:

import
 एक जावा import (इंपोर्ट) स्टेटमेंट में परिणामों को परिणामी फाइल में डाला जा रहा है।

contentType
 उत्पन्न होने वाले अवयव को निर्दिष्ट करता है। इसे तब काम में लिया जाना चाहिए जब HTML का उपयोग नहीं किया जा रहा है या यदि कैरेक्टर सेट default character set (डिफ़ॉल्ट कैरेक्टर सेट) नहीं है।

errorPage
उस पेज के पते को इंगित करता है, इसे तब दिखाया जाना चाहिए यदि HTTP अनुरोध की प्रोसेसिंग के समय कोई अपवाद सामने आता है।

 isErrorPage
 यदि सच में स्थापित हो जाये तो यह इंगित करता है कि यह error page (एरर पेज) है।

Default value (डिफ़ॉल्ट का मान) गलत है।
 isThreadSafe
एक boolean (बूलियन) जो इंगित करता है कि परिणामी सर्वलेट थ्रेड सेफ है या नहीं.

 autoFlush
अवयवों को ऑटोफ्लश करने के लिए.ट्रू का मान, डिफ़ॉल्ट, इंगित करता है कि बफर जब भर जाये तो इसे फ्लश कर देना चाहिए.
फाल्स का मान, कभी कभी ही प्रयुक्त किया जाता है, यह सूचित करता है कि जब बफर अतिभारित (ओवरफ्लो) हो जाये तब एक अपवाद फेंका जाना चाहिए।

 बफर का उपयोग करते समय भी फाल्स का मान गैर कानूनी होता है="कोई नहीं"

session
 session (सेशन) को बनाए रखने के लिए. ट्रू का मान (डिफ़ॉल्ट) इंगित करता है कि पूर्वनिर्धारित चर सत्र (of type HttpSession) उपस्थित session से बंधित होना चाहिए, यदि एक उपस्थित हो अन्यथा एक नया session निर्मित किया नजन चाहिए और इसे बंधित किया जाना चाहिए.
फाल्स का मान इंगित करता है कि किसी भी session का उपयोग नहीं किया जायेगा और चर session की पहुंच के प्रयास के परिणामस्वरूप उस समय त्रुटि होगी जब JSP पेज को एक सर्वलेट में अनुवादित किया जायेगा.

 
buffer
buffer (बफर) के आकार को सेट करने के लिए. डिफ़ॉल्ट 8k है और यह सलाह दी जाती है कि आप इसे बढायें.
 isELIgnored
यह बताता है कि JSP के अनुवाद के समय EL (Expression Language (एक्सप्रेशन भाषा)) अभिव्यक्ति पर ध्यान नहीं दिया गया है या नहीं.

language या भाषा
स्क्रिप्टलेट, अभिव्यक्ति और घोषणाओं में प्रयुक्त की जाने वाली स्क्रिप्टिंग भाषा को परिभाषित करता है।

अभी, एकमात्र संभव मान '(java) जावा' है।
extends
क्लास की सुपर क्लास को परिभाषित करता है, JSP बन जायेगा.

आप इस का उपयोग नहीं तब तक नहीं करेंगे जब तक आप को वास्तव में यह न पता हो कि आप क्या कर रहें हैं-यह कंटेनर के द्वारा उपलब्ध कराये गए क्लास पदानुक्रम को ओवरराइड करता है।

info
एक स्ट्रिंग को परिभाषित करता है जिसे अनुवादित पेज में डाला जाता है, ताकि आप इसे उत्पन्न सर्वलेट से विरासत में प्राप्त हुए ServletInfo () विधि का उपयोग करते हुए प्राप्त कर सकते हैं।

pageEncoding
 JSP के लिए केरेक्टर एन्कोडिंग को परिभाषित करता है। डिफ़ॉल्ट है "ISO-8859-1" (जब तक अवयव के प्रकार की विशेषता पहले से ही एक केरेक्टर एन्कोडिंग को परिभाषित करती है या पेज XML दस्तावेज़ वाक्यविन्यास का उपयोग करता है).

 <%@ page import="java.util.*" %> <%-- example import --%>
 <%@ page contentType="text/html" %> <%-- example contentType --%>
 <%@ page isErrorPage="false" %> <%-- example for non error page --%>
<%@ page isThreadSafe="true" %> <%-- example for a thread safe JSP --%>
<%@ page session="true" %> <%-- example for using session binding --%>
 <%@ page autoFlush="true" %> <%-- example for setting autoFlush --%>
 <%@ page buffer="20kb" %> <%-- example for setting Buffer Size --%>

 नोट: सामान JSP में केवल "IMPORT" पेज डायरोक्टिव का उपयोग कई बार किया जा सकता है।

 taglib
 Taglib डायरोक्टिव इंगित करता है कि एक JSP टैग लायब्ररी का इस्तेमाल किया जा रहा है। डायरोक्टिव के लिए जरुरी होता है कि एक उपसर्ग (C++ में एक namespace के अधिक समान) को निर्दिष्ट किया जाये और URI टैग लायब्ररी विवरण के लिए आवश्यक होता है।

 <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

 अंतर्निहित वस्तुएं (Implicit Objects) 
JSP कंटेनर कई अंतर्निहित वस्तुओं को दर्शाता है जिन्हें प्रोग्रामर द्वारा इस्तेमाल किया जा सकता है:

out
  का उपयोग प्रतिक्रिया स्ट्रीम में डेटा लिखने के लिए किया जाता है।

page
खुद सर्वलेट.

 pageContext
 एक  उदाहरण जिसमें पूरे पेज से सम्बंधित डाटा शामिल होता है।

 एक दिया HTML पेज एकाधिक JSPs में पारित किया जा सकता है।

request
  ऑब्जेक्ट जो HTTP अनुरोध की जानकारी प्रदान करता है।

response या प्रतिक्रिया
 [5] ऑब्जेक्ट जिसका उपयोग ग्राहक को डाटा वापस भेजने के लिए किया जा सकता है।

session
 [6] ऑब्जेक्ट जिसका उपयोग एक अनुरोध से दुसरे में एक उपयोगकर्ता के बारे में जानकारी का पता लगाने के लिए किया जाता है।

 config
 सर्वलेट विन्यास डाटा उपलब्ध करता है।

application
डेटा को अनुप्रयोग में सर्वलेट और सभी JSPs के द्वारा शेयर किया जाता है,

 अपवाद या exeption
अपवाद को ऍप्लिकेशन कोड के द्वारा नहीं पकडा जाता है।

 स्क्रिप्टिंग तत्व 
स्क्रिप्टिंग तत्वों के तीन मूल प्रकार होते हैं जो जावा कोड को सीधे सर्वलेट में प्रविष्ट होने की अनुमति देता है।

 एक declaration  टैग जावा सर्वलेट वर्ग के निकाय में एक चर परिभाषा देता है।

स्थैतिक डेटा सदस्यों को भी इसी तरह से परिभाषित किया जा सकता है। साथ ही भीतरी वर्ग भी यहां परिभाषित किये जाने चाहियें.
 % <! int serverInstanceVariable = 1; %>
declaration टैग परिभाषित किये जाने वाली विधि की भी अनुमति देते हैं।

 % <!
 / ** 
 * एक ऑब्जेक्ट को एक स्ट्रिंग में बदल देता है या यदि 
 * ऑब्जेक्ट नल है, यह खाली स्ट्रिंग में लौट जाता है। 
 * /
 public String toStringOrBlank(Object obj){
if(obj != null){
 return obj.toString();
}
return "";
}
 %>

 एक  scriptlet (स्क्रिप्टलेट)  टैग इसमें उपस्थित सभी स्टेटमेंट्स को रखता है, यह जावा सर्वलेट वर्ग की _jspService() के अन्दर होता है।
 <% int localStackBasedVariable = 1;
 out.println(localStackBasedVariable); %>

 एक expression''  टैग जावा सर्वलेट वर्ग के भीतर मूल्यांकित किये जाने वाले एक expression को रखता है।

expression को एक अर्ध विराम के साथ ख़त्म नहीं किया जाना चाहिए.
 <%= "expanded inline data " + 1 %>

 JSP एकशन्स 
JSP actions (JSP एकशन्स) XML टैग्स होते हैं जो बिल्ट-इन वेब सर्वर क्रियाशीलता को बढ़ावा देते हैं।

वे रनटाइम पर क्रियान्वित होते हैं। कुछ मानक और कुछ कस्टम होते हैं। (जिनका विकास जावा डेवलपर्स द्वारा किया जाता है) निम्नलिखित सूची में मानक वाले शामिल हैं:

  jsp
:include  एक सब रुटीन के समान, जावा सर्वलेट अस्थायी रूप से अनुरोध करता है और विशिष्ट जावा सर्वर पेज के लिए प्रतिक्रिया देता है।
इसके बाद नियंत्रण चालू JSP को लौट जाता है, एक बार जब अन्य JSP पूरा हो चुका होता है। इस का प्रयोग करते हुए, JSP कोड को डुप्लीकेट के बजाय, अन्य एकाधिक JSP के बीच शेयर किया जायेगा.

  jsp
:param इसे एक jsp:include, jsp:forward or jsp:params block के भीतर प्रयुक्त किया जा सकता है।

एक पैरामीटर को निर्दिष्ट करता है जिसे अनुरोध के चालू मानकों में जोड़ दिया जायेगा.

  jsp
:forward  अनुरोध को देने के लिए प्रयुक्त किया जाता है और अन्य JSP या सर्वलेट के लिए प्रतिक्रिया के लिए प्रयुक्त किया जाता है।

नियंत्रण कभी भी वर्तमान JSP को नहीं लौटेगा.

  jsp
:plugin  Netscape Navigator (नेटस्केप नेविगेटर) और Internet Explorer (इंटरनेट एक्सप्लोरर) के पुराने संस्करण एक ऐपलेट को प्रविष्ट करने के लिए भिन्न टैग्स का प्रयोग करते हैं। इस एकशन ब्राउजर विशिष्ट टैग उत्पन्न करता है जो एक एप्लेट को शामिल करने के लिए आवश्यक होता है।

  jsp
:fallback  अगर ब्राउज़र एप्लेट का समर्थन नहीं करता तब दर्शाने की सामग्री.

  jsp
:getProperty  निर्दिष्ट JavaBean से एक प्रोपर्टी प्राप्त करता है।

 टैग्स के उदाहरण 

 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 टैग लायब्ररी 
पूर्ण परिभाषित JSP एक्शन्स के अतिरिक्त, डेवलपर्स JSP टैग एक्सटेंशन API का उपयोग करते हुए अपने खुद के कस्टम एक्शन्स'' को जोड़ सकते हैं। डेवलपर्स एक जावा वर्ग को लिखते हैं जो एक टैग इंटरफेस का क्रियान्वयन करती है और एक टैग लायब्ररी XML वर्णन फाइल उपलब्ध करती है जो टैग्स और जावा वर्गों को विशिष्टीकृत करती है और टैग्स का क्रियान्वयन करती है।

निम्नलिखित JSP पर विचार करें।

<%@ taglib uri="mytaglib.tld" prefix="myprefix" %>
 ...
 <myprefix:myaction> <%-- The start tag %>
 ...
 </myprefix:myaction> <%-- The end tag %>
 ...

JSP कम्पाइलर mytaglib.tld XML फाइल को लोड करेगा और देखेगा कि टैग 'myaction' का क्रियान्वयन 'MyActionTag' जावा वर्ग के द्वारा किया जा रहा है।
पहली बार जब टैग को फाइल में प्रयोग किया जाता है, यह 'MyActionTag' का एक उदाहरण निर्मित करता है। तब (और प्रत्येक अतिरिक्त समय जिसका टैग के द्वारा प्रयोग किया जाता है), यह विधि doStartTag को लागु करेगा (), जब इसका सामना शुरुआत करने वाले टैग से होता है। यह स्टार्ट टैग के परिणाम को देखता है और निर्धारित करता है कि टैग के निकाय की प्रक्रिया कैसे होती है।
निकाय प्रारंभिक टैग और अंतिम टैग के बीच का पाठ्य है। DoStartTag () विधि निम्न में से एक पर वापसी कर सकती हैं:

 SKIP_BODY
टैग के बीच का निकाय प्रसंस्कृत नहीं है।

 EVAL_BODY_INCLUDE
 टैग के निकाय का मूल्यांकन करें.

 EVAL_BODY_TAG
 टैग के निकाय का मूल्यांकन करें और परिणाम को स्ट्रीम में लायें (टैग के निकाय के अवयवों में संग्रहित).

नोट: यदि टैग विस्तृत होता है तो निकाय टैग वर्ग का समर्थन करता है, doAfterBody () विधि का उपयोग तब किया जायेगा जब doEndTag की शुरुआत से पहले निकाय का प्रसंस्करण किया जाता है।

इस विधि का उपयोग लूपिंग सरंचना के क्रियान्वयन में किया जाता है।

जब यह अंतिम टैग का सामना करता है, यह doEndTag () विधि को बढ़ावा देता है।

यह विधि इन दो में से एक मान पर लौट सकती है।

 EVAL_PAGE
 यह इंगित करता है कि शेष JSP फ़ाइल का प्रसंस्करण किया जाना चाहिए.

 SKIP_PAGE
यह इंगित करता है कि आगे कोई और प्रसंस्करण नहीं किया जाना चाहिए. नियंत्रण JSP पेज को छोड़ देता है। यह वही है जिसका उपयोग जिसका उपयोग अग्रेषण कार्रवाई के लिए किया जाता है।

इस उपर्युक्त myaction टैग में क्रियान्वयन वर्ग होगा जो कुछ निम्न के जैसा दिखाई देगा:

 public class MyActionTag extends TagSupport {
// Releases all instance variables.
 public void release() {…}
 
 public MyActionTag() { … }
 
// Called for the start tag
public int doStartTag() { … }
 
// Called at the end tag
 public int doEndTag(){ … }
 }
निकाय टैग विवरण जोड़ें.

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

 यह EVAL_BODY_AGAIN पर लौट जाता है जिसका अर्थ है निकाय को फिर से लागू करना।

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

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

JSP 2.0 
JSP specification (JSP विनिर्देशन) के नए संस्करण में नयी विशेषताएं शामिल हैं, जो प्रोग्रामर की उत्पाकता में सुधर लाती हैं।

नामतः

 एक अभिव्यक्ति भाषा (EL), जो डेवलपर्स को वेग-शैली टेम्पलेट्स बनाने की अनुमति देती है (अन्य चीजों के बीच)।

 पैरामीटर मूल्यों को प्रदर्शित करने का एक तेज/आसान तरीका.
Hello, ${param.visitor} <%-- Same as: Hello, <%=request.getParameter("visitor")%> --%>

 नेस्टेड बीन्स को नेविगेट करने का एक स्पष्ट रास्ता.
कुछ बीन्स पर विचार करें।
class Person {
String name;
// Person nests an organization bean.
Organization organization;

public String getName() { return this.name; }
public Organization getOrganization() { return this.organization; }
 }

class Organization {
String name;
public String getName() { return this.name; }
 }

तो, यदि एक व्यक्ति के नाम के नीचे विशेषता अनुरोध पर एक "व्यक्ति" का उदाहरण रखा जाना था।
Hello, ${person.name}, of company ${person.organization.name}
<%-- Second expression same as 
 <% Person p = (Person) request.getAttribute("person");
if (p != null) {
Organization o = p.getOrganization();
 if (o != null) {
out.print(o.getName());
 }
 }
 %>
 --%>

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 विनिर्देश इसके वेब सिमेन्टिक्स के लिए।

इन्हें भी देखें 

 JSTL
 जावा EE
 जावा सर्वर फेसेज
 जावा सर्वलेट
 WAR (सन फ़ाइल प्रारूप)
 EAR (फ़ाइल प्रारूप)
 JAR (फ़ाइल प्रारूप)
 अपाचे टोमकेट
 सन जावा सिस्टम वेब सर्वर
 ASP
 CFM
 JHTML

अग्रिम पठन

बाहरी संबंध 

 सन के JSP उत्पाद का विवरण
 लर्न JSP ट्यूटोरियल - स्टेप बाई स्टेप
 JSR 245 (JSP 2.1)
 JSR 152  (JSP 2.0)
 JSR 53 (JSP 1.2)
 JSP 1.1 और 1.0
 स्रोत कोड के साथ JSP ट्यूटोरियल
 त्वरित JSP ट्यूटोरियल
 JSP प्रशिक्षण पाठ्यक्रम सार्वजनिक पाठ्यक्रम जिन्हें जॉन्स हॉपकिंस विश्वविद्यालय के द्वारा सह प्रायोजित किया गया है या कस्टमाइज्ड ऑनसाइट संस्करण है।
 बिगिनर्स JSP ट्यूटोरियल
 कोर सर्व लेट और JavaServer Pages (जावासर्वर पेजेस) 

श्रेणी:जावा एन्टरप्राइज़ प्लेटफोर्म
श्रेणी:जावा विनिर्देशन अनुरोध
श्रेणी:टेम्पलेट इंजन