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>
        Your browser does not support applets.
    </jsp:fallback></jsp:plugin>
上述plugin例子說明了一種在網頁中嵌入applet的統一方法。在<OBJECT>標籤出現之前，並沒有一種嵌入applets的通用方法。這個標籤設計得並不好，但有希望在以後加入動態屬性（height="${param.height}", code="${chart}"等）和動態參數的新功能。目前jsp:plugin標籤不允許動態呼叫applets。例如，你如果有一個圖表applet需要資料點以參數形式被傳入，除非資料點的數量是一個常數，否則你就不能使用ResultSet迴圈來建立jsp:param標籤，你不得不手寫每個jsp:param標籤的程式碼。而每個上述jsp:param標籤可以有一個動態命名和動態值。

在地化

JSP的在地化是通過和JAVA應用程式相同的方式完成的，即使用資源包。

模型-視圖-控制器 模式

為了把表現層（presentation）從請求處理（request processing）和資料儲存（data storage）中分離開來（這樣更利於開發、查錯和功能擴充），昇陽公司推薦在JSP檔案中使用一種稱作模型-視圖-控制器（MVC）的架構模式。按照此設計，當用戶存取網站上的特定網址時，用戶的處理請求會先由網站伺服器取得到，然後先交由網站的控制器程式作初步處理。用戶的存取請求可能多種多樣，比如查詢資訊或進行資料計算都是常見的網站業務。控制器程式會初步判斷用戶請求的種類，然後把用戶請求轉發給與特定業務對應的Servlet程式或者另一個獨立的JSP檔案進行業務處理。當請求處理完後，再通過一個專門負責輸出資訊的JSP頁以清晰、美觀的方式向用戶的瀏覽器輸出結果。簡而言之，先由控制器攔截用戶請求並做初步判斷，再由業務處理程式存取資料（從資料庫中存取）和處理業務，最後由視圖元件生成結果頁面並行送結果給用戶。其中JSP一般用作展示輸出結果，可以用於展示經Servlet查詢或處理後的結果；也可以用一個JSP檔案處理業務邏輯，再用另一個JSP檔案展示結果。按功能做這樣的檔案拆分（而非由一個臃腫的JSP頁面包攬所有功能）是為了便於團隊分工。MVC本身是一種由來已久的設計思想，基於JSP的技術只是實現MVC架構的流行方案之一。Struts和Spring框架等好幾種流行的網站建設框架都是基於MVC模式設計的。

JSP和Servlets

從架構上說，JSP可以被看作是從Servlets進階提煉而作為JAVA Servlet 2.1 API的擴充而應用。Servlets和JSP最早都是由Sun Microsystems（太陽公司）開發的。從JSP1.2版本以來，JSP處於Java Community Process（有人譯為：Java社群組織）開發模式下。JSR-53規定了JSP 1.2和Servlet 2.4的規範，JSR-152規定了JSP 2.0的規範。2006年5月，JSP 2.1的規範作為Java EE 5的一部份，在JSR-245中發布。
靜態資料在輸入檔案中的內容和輸出給HTTP回應的內容完全一致。此時，該JSP輸入檔案會是一個沒有內嵌JAVA或動作的HTML頁面。而且，用戶端每次請求都會得到相同的回應內容。

樣例

不管JSP編譯器是生成SERVLET的JAVA原始碼，或者是直接發布二進位碼，了解一下JSP編譯器是如何把檔案轉換成一個JAVA SERVLET，都是很有幫助的。例如，看一下如下輸入JSP和它最後生成的JAVA SERVLET：
Input JSP
<%@ page errorPage="myerror.jsp" %>
<%@ page import="com.foo.bar" %>

<html><head><%! int serverInstanceVariable = 1;%>
...
<% int localStackBasedVariable = 1; %>
<table>
    <tr><td><%= "expanded inline data " + 1 %></td></tr>
    ...
Resulting servlet
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 _myserlvet 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>" );
             //note, toStringOrBlank() converts the expression into a string or if
             // the expression is null, it uses the empty string.
             //from <%= "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" %>
        }
    }}