# ஜாவா சர்வர் பேஜஸ்



**JavaServer Pages (ஜாவா சர்வர் பேஜஸ்)** (**JSP** ) என்பது மென்பொருள் டெவெலப்பர்கள் Java வலைப் பயன்பாட்டு கண்டெய்னருக்கு (சேவையகம்) HTML, எக்ஸ்எம்எல் அல்லது பிற ஆவணங்களுடன் கோரிக்கை அனுப்பும் வலை கிளையண்டுக்கு பதிலளிக்க மாறக்கூடியவகையில் பிறப்பிக்கப்பட்ட வலைப்பக்கங்களை உருவாக்க அனுமதிக்கும் சேவையக ஜாவா தொழில்நுட்பம் ஆகும். கட்டமைப்பு ரீதியில், JSP Java servlets இன் உயர்நிலை சாராம்சமாகப் பார்க்கப்படும். JSP பக்கங்கள் சேவையகத்தில் ஏற்றப்படுகின்றன மற்றும் பெரும்பாலும் <code>.war</code> அல்லது <code>.ear</code> கோப்பு காப்பகத் தொகுப்பாக இருக்கும் J2EE வலைப் பயன்பாடு என்றழைக்கப்பட்ட கட்டமைக்கப்பட்ட சிறப்பு நிறுவல் Java சேவையகப் பொதியிலிருந்து இயக்கப்படுகின்றன.  

இந்தத் தொழில்நுட்பமானது Java குறியீடு மற்றும் குறிப்பிட்ட முன்வரையறுக்கப்பட்ட செயல்பாடுகளை நிலையான பக்க உள்ளடக்கங்களுக்கு உட்பொதிக்க அனுமதிக்கின்றது, மேலும் ஒவ்வொரு பக்கக் கோரிக்கையையும் நிகழ்நேரத்தில் சேவையகத்தில் தொகுக்கின்றது. Java சேவையகமும் (J2EE விவரக்குறிப்பு) மற்றும் பக்க ஸ்கிரிப்ட்டுகள் மற்றும்/அல்லது நீட்டிக்கப்பட்ட தனிப்பயன் நிரலாக்கமும் சேர்க்கப்பட்டு (ஏற்றப்படும் நிரல்கள் பயன்படுத்தும் நிகழ்நேர சூழலில்) ஹோஸ்ட் இயக்க முறைமையுடன் இணைந்துள்ள விர்ச்சுவல் மெஷின் (VM) என்றழைக்கப்படும் சிறப்பு முன் நிறுவப்பட்ட அடிப்படை நிரலால் இயக்கப்படுகின்றன, இந்த வகையே Java விர்ச்சுவல் மெஷின் (JVM) ஆக இருக்கின்றது.  

JSP தொடரியலானது *ஸ்கிரிப்ட்லெட்* மற்றும் *மார்க்-அப்* என்ற இரண்டு அடிப்படை வடிவங்களைக் கொண்டது, இருப்பினும் அடிப்படையில் பக்கமானது HTML அல்லது XML மார்க்-அப் ஆக இருக்கின்றது. ஸ்கிரிப்ட்லெட் டேக்கிங் (ஸ்கிரிப்ட்லெட் உறுப்புகள் என்று அழைக்கப்படுகின்றது)(வரையறுக்கப்பட்டது) மார்க்-அப் உடனான குறியீட்டு தொகுப்புகள் சரியான மார்க்-அப் ஆக இல்லை, மேலும் ஏதாவது Java சேவையகம் தொடர்பான API (எ.கா பைனரிகள் தாங்களாகவே இயங்கும் சேவையகங்கள் அல்லது தரவுத்தள இணைப்புகள் API அல்லது java அஞ்சல் API) அல்லது பக்கத்தின் JSP கோப்பு அல்லது கோப்பு நீட்சியில் பயன்படுத்தப்படுகின்ற சரியான அறிவிப்புகளை வழங்குகின்ற ஒரு HTML அல்லது XML பக்கத்தில் உட்பொதிக்கக்கூடிய மிகவும் சிறப்பான JSP API மொழிக் குறியீட்டை அனுமதிக்கின்றது. ஸ்கிரிப்லெட் தொகுப்புகள் தொகுப்புக்குள்ளாகவே நிறைவடைய கோரப்படவில்லை, அது அடுத்த தொகுப்பிலும் நிறைவடையலாம், அது ஒரு முழுமையான கூற்றாக முழுமையடையும் விதத்தில் தொகுப்பின் கடைசி வரி மட்டுமே தொகுப்புக்கு உள்ளாக தொடரியல் ரீதியாக நிறைவடைய வேண்டும் என்பது அவசியமாகும். உள்வரிக் குறியீட்டுப் பிரிவுகளைப் பிரிக்கும் இந்த அமைப்பு படிநிலையிலான ஸ்கிரிப்ட்டிங் என்று அழைக்கப்படுகின்றது, அதை நிலையான மார்க்-அப்பை சுற்றிலும் அதனை படிநிலையாக்குவதன் மூலம் மடிக்கலாம். நிகழ்நேரத்தில் (கிளையண்ட் கோரிக்கை நடைபெறும்போது) குறியீடானது தொகுக்கப்பட்டு மதிப்பிடப்படுகின்றது, ஆனால் குறீட்டைத் தொகுத்தல் பொதுவாக கோப்பின் குறியீட்டில் மாற்றம் நிகழும்போது மட்டுமே நிகழ்கிறது. JSP தொடரியல் JSP செயல்கள் என்றழைக்கப்படும் உள்ளமைக்கப்பட்ட செயல்பாட்டை செயல்படுத்தப் பயன்படும் கூடுதல் எக்ஸ்எம்எல்-போன்ற குறிச்சொற்களைச் சேர்க்கின்றது. கூடுதலாக, தொழில்நுட்பமானது தரம் வாய்ந்த HTML அல்லது XML குறிச்சொற்களுக்கு நீட்டிப்புகளாகச் செயல்படும் JSP குறிச்சொல் நூலகங்களின் உருவாக்கத்திற்கு அனுமதிக்கின்றது. JVM இயக்கும் குறிச்சொல் நூலகங்கள் web server இன் நீட்டிக்கும் செயல்திறனின் தளம் சாரா வழியை வழங்குகின்றது. அனைத்து நிறுவனங்களும் உருவாக்குகின்ற Java சேவையகங்கள் என்பது J2EE விவரக்குறிப்பு இணக்கமானதாக இல்லை என்பதை நினைவில் கொள்க.  

## வரலாறு
JSP 1.0 விவரக்குறிப்பு 1999 இல் Java இன் ASP மற்றும் PHP ஆகியவற்றுக்கான பதிலாக வெளியிடப்பட்டிருந்தது. servlets மற்றும் JSPகள் உண்மையில் சன் மைக்ரோசிஸ்டம்ஸ்ஸில் உருவாக்கப்பட்டது. JSP விவரக்குறிப்பின் பதிப்பு 1.2 உடனான தொடக்கத்தில், JavaServer Pages (ஜாவா சர்வர் பேஜஸ்) Java சமூகச் செயலாக்கத்தின் கீழ் உருவாக்கப்பட்டது. JSR 53 என்பது JSP 1.2 மற்றும் Servlet 2.3 இரண்டின் விவரக்குறிப்புகளை வரையறுக்கின்றது, மேலும் JSR 152 என்பது JSP 2.0 விவரக்குறிப்பை வரையறுக்கின்றது. மே 2006 இன் படி JSP 2.1 விவரக்குறிப்பு Java EE 5 இன் பகுதியாக JSR 245 கீழ் வெளியிடப்பட்டது.  

## எடுத்துக்காட்டு
JSPகள் servlets க்குள் JSP தொகுப்பி மூலமாகத் தொகுக்கப்படுகின்றன. தொகுப்பான், Java குறியீட்டில் ஒரு servlet ஐ உருவாக்கி, பின்னர் அது Java தொகுப்பியின் மூலம் தொகுக்கப்படலாம் அல்லது அது நேரடியாக இயக்கக்கூடிய பைட் குறியீடாக servlet ஐ தொகுக்கலாம். JSPகள் இயக்கத்தில் மொழிமாற்றப்பட முடியும், இது மாற்றங்களை மறுநினைவேற்ற எடுக்கும் நேரத்தைக் குறைக்கின்றது.  

JSP தொகுப்பி servlet க்காக Java மூலக் குறியீட்டை உருவாக்கினாலும் அல்லது பைட் குறியீட்டை நேரடியாக வெளிப்படுத்தினாலும், அது JSP தொகுப்பி Java servlet க்குள் பக்கத்தை எவ்வாறு உருமாற்றம் செய்கின்றது என்பதைப் புரிந்துகொள்ள உதவிகரமாக இருக்கின்றது. எடுத்துக்காட்டாக, பின்வரும் உள்ளீடு JSP ஐயும், அதன் விளைவாக உருவாக்கப்படுகின்றது Java Servlet ஐயும் கருதலாம்.  

**உள்ளீடு JSP**  
<source lang="html4strict">  
<%@ page errorPage="myerror.jsp" %>  
<%@ page import="com.foo.bar" %>  

<html>  
<head>  
<%! int serverInstanceVariable = 1;%>  

<% int localStackBasedVariable = 1; %>  
<table><td>  
<tr><td><%= toStringOrBlank( "expanded inline data " + 1 ) %></td></tr><td>  
</source>  
</td></td></table>  

**முடிவு servlet**  
<source lang="java">  
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; // Imported as a result of <%@ page import="com.foo.bar" %>  
import …  

class _myservlet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {  
// Inserted as a  
// result of <%! int serverInstanceVariable = 1;%>  
int serverInstanceVariable = 1;  
…  

public void _jspService( javax.servlet.http.HttpServletRequest request,  
javax.servlet.http.HttpServletResponse response )  
throws javax.servlet.ServletException,  
java.io.IOException  
{  
javax.servlet.ServletConfig config = …; // Get the servlet config  
Object page = this;  
PageContext pageContext = …; // Get the page context for this request  
javax.servlet.jsp.JspWriter out = pageContext.getOut;  
HttpSession session = request.getSession( true );  
try {  
out.print( "<html>\r\n" );  
out.print( "<head>\r\n" );  
…  
// From <% 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" %>  
}  
}  
}  
</source>  
</td></td></table>  

## JSP 2.0
புதிய JSP விவரக்குறிப்பின் புதிய பதிப்பானது புரோக்ராமரின் உற்பத்தித் திறனை அதிகரிக்க உதவும் புதிய அம்சங்களை உள்ளடக்கியது. அவை பின்வருமாறு:  

- டெவலப்பர்கள் Velocity-நடையில் டெம்ப்ளேட்களை (அதுபோன்று பிறவற்றையும்) உருவாக்க அனுமதிக்கும் எக்ஸ்பிரஷன் மொழி (EL).
- அளவுரு மதிப்புகளை காண்பிக்க வேகமான/எளிதான வழி.
- உள்ளமைப் பீன்களை வழிச்செலுத்த தெளிவான வழி.

Java EE 5 தளத்தில், J2SE 5.0 ஆல் அறிமுகப்படுத்தப்பட்ட Java மொழி விளக்கங்களைப் பயன்பாட்டுக்கு கொண்டுவருவதன் மூலம் மேம்பாட்டின் மையம் எளிமையாகின்றது. JSP குறிச்சொல் கையாளர்கள் மற்றும் சூழல் கேட்போர் ஆகியவற்றில் சார்புநிலை உட்செலுத்துதலுக்கான விளக்கங்களை வரையறுப்பதன் மூலம் JSP 2.1 இந்த இலக்கை ஆதரிக்கின்றது.  

Java EE 5 விளக்கத்தின் மற்றொரு முக்கிய கருதுகோளாக JavaServer Pages (ஜாவா சர்வர் பேஜஸ்) (JSP), JavaServer முகங்கள் (JSF) மற்றும் JavaServer Pages (ஜாவா சர்வர் பேஜஸ்) தரநிலை குறிச்சொல் நூலகம் (JSTL) ஆகிய அதன் வலை ஒருங்கிணைப்பு தொழில்நுட்பங்களின் நேர்படுத்தல் இருக்கின்றது.  

இந்த நேர்படுத்தல் முயற்சியின் வெளிப்பாடாக ஒன்றிணைந்த எக்ஸ்பிரஷன் மொழி (EL) இருக்கின்றது, இது JSP 2.0 மற்றும் JSF 1.1 ஆகியவற்றால் வரையறுக்கப்பட்ட எக்ஸ்பிரஷன் மொழிகளை ஒருங்கிணைக்கின்றது.  

நேர்படுத்தல் பணியில் வெளிவந்த ஒருங்கிணைந்த EL இன் முதன்மை அம்சங்கள்:  
செருகக்ககூடிய API ஆனது Java ஆப்ஜெக்ட்களில் மாறிகள் குறிப்புகளை உறுதி செய்யவும் இந்த Java ஆப்ஜெக்ட்களுக்குப் பொருந்தும் பண்புகளை உறுதி செய்யவும் வேறுபட்ட கோவைகளுக்கு ஆதரவளிக்கின்றது. இது வழக்கமான கோவை நகல்கள் பக்கம் செயல்படுத்தப்படும் போதும் ரெண்டர் செய்யப்படும் போதும் உடனடியாக மதிப்பிடப்படுவது போல் அல்லாமல், தேவைப்படும் போது குறிச்சொல் கையாளரால் மதிப்பிடப்படலாம், மேலும்  
இது ஒரு ஒதுக்கல் செயல்பாட்டில் வலது பக்கத்தில் தோன்றும் l-மதிப்பு கோவையை ஆதரிக்கின்றது. l-மதிப்பாகப் பயன்படுத்தும்போது, ஒரு EL கோவையானது தரவு கட்டமைப்புக்கு குறிப்பை குறிக்கின்றது.  
புதிய ஒருங்கிணைந்த EL என்பது JSP 2.1 விவரக்குறிப்புடன் வழங்கப்படுகின்ற அதன் சொந்த விவரக்குறிப்பு ஆவணத்தில் வரையறுக்கப்படுகின்றது.  

தற்போது உள்ளுணர்வு வழியில் JSF கூறுகளைக் கொண்டு பயன்படுத்த முடிந்த JSTL மீள்செயல் குறிச்சொற்கள் போன்ற ஒருங்கிணைந்த EL, JSTL குறிச்சொற்களுக்கு நன்றிகள்.  

JSP 2.1, Servlet 2.5 விவரக்குறிப்புகளை அதன் வலைப் பொருட்களுக்கு ஊக்கமளிக்கின்றது.