JavaServer Pages

**JavaServer Pages** ir servera puses Java tehnoloģija, kas ļauj izveidot dinamiski ģenerētas tīmekļa lapas HTML, XML vai citā formātā. Arhitektoniski JSP var skatīt kā Java servleta augsta līmeņa abstrakciju. Tehnoloģiju izstrādājusi Sun Microsystems 1990. gadu beigās.

JSP ļauj statiskā tīmekļa lapā iekļaut Java kodu vai EL formātā rakstītus fragmentus. Kad tīmekļa klients pieprasa lapu, to *JSP Servlet Engine* apstrādā un izveido servleta pirmkodu, kas ir Java klase. Tad to kompilē Java baitkodā, kuru izpilda Java Virtual Machine. Nākamreiz, kad lietotājs pieprasa šo pašu lapu, tiek palaists iepriekš nokompilētais kods. Tādējādi pirmoreiz lapa veras lēnāk, bet nākamās reizes ātrāk. Ja pirmkods tiek mainīts, tad to no jauna kompilē. JSP pirmkods var arī tikt uzreiz interpretēts, netērējot laiku kompilēšanai, kas ir izdevīgi izstrādes laikā.

## Piemērs
**JSP pirmkoda fragments:**

```html4strict
<%@ page errorPage="myerror.jsp" %>
 <%@ page import="com.foo.bar" %>
 
 <html>
 <head>
 <%! int serverInstanceVariable = 1;%>
 
 <% int localStackBasedVariable = 1; %>
 <table>
 <tr><td><%= toStringOrBlank( "expanded inline data " + 1 ) %></td></tr>
```


**Izveidotais servlets:**

```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>\r\n" );
            out.print( " <tr><td>" );
            // From <%= toStringOrBlank( "expanded inline data " + 1 ) %>
            out.print( toStringOrBlank( "expanded inline data " + 1 ) );
            out.print( " </td></tr>\r\n" );
            …
        } catch ( Exception _exception ) {
            // Clean up and redirect to error page in <%@ page errorPage="myerror.jsp" %>
        }
    }
 }
```


## Ārējās saites

* Sun's JSP product description
* Learn JSP Tutorial - step by step
* JSR 245 (JSP 2.1)
* JSR 152 (JSP 2.0)
* JSR 53 (JSP 1.2)
* JSP 1.1 and 1.0
* JSP tutorials with source code 
* Quick JSP tutorial
* JSP training courses  Public courses co-sponsored by Johns Hopkins University, or customized onsite versions
* Beginners JSP tutorial
* Core Servlets and JavaServer Pages