JSP

For alternative betydninger, se JSP (flertydig). (Se også artikler, som begynder med JSP)

En Java Server Page eller JSP er et HTML- eller XML-dokument med indlejret javakode.En JSP-side skal køres på en passende applikationsserver (fx en J2EE-server). Når siden forespørges, sørger applikationsserveren for at kompilere siden til en en servlet. JSP-sider bruges tit sammen med servlets, således at præsentationen klares af JSP'er mens selve processeringen af forespørgsler klares af servletter.

Fordele ved JSP

JSP har en række fordele i forhold til fx statiske HTML-sider:

  1. Dynamisk generering af hjemmesider: Hjemmesider udseende kan varieres efter input, givet fx i forespørgselsstrengen (URL'en + dens parametre).
  2. Adgang til standardobjekter: Når man skriver en JSP, er der adgang til en række nyttige standardobjekter. Objektet request indeholder oplysninger om klientprogrammet og eventuelle inputdata. Hvis der skal manipuleres med data i svaret, klares det med objektet response. Objekterne session og application kan holde klientdata fra en JSP eller servlet til den næste under en hel session hhv. en hel kørsel af web-applikation.
  3. Adgang til standard-præsentationslogik: Mange applikationsservere tilbyder taglibs med prædefineret præsentationslogik, som JSP-siderne kan benytte sig af. Dermed lettes programmørens opgave.
  4. Adskillelse af præsentation og logik: Man kan sætte en HTML-programmør uden dybere erfaring med programmering til at udvikle JSP-sider, mens mere tekniske udviklere kan implementere javakode i servletter og andre bagvedliggende komponenter.
  5. God håndtering af undtagelser: I tilfælde af undtagelser, der skal propageres til klienten, tilbyder JSP en række fornuftige navigations- og fremvisningselementer.

JSP-syntaks

JSP-specifikationen præsenterer 6 syntakselementer.

Direktiver

I direktiver kan andre JSP-sider inkluderes (statisk, som råtekst eller på compile-time), og taglibs, klasser og servlets kan importeres. Det kan endvidere specificeres, om siden er en fejlside eller ej, mv.Direktiver er på formen

<%@ Direktiv %>

For eksempel:

<%@ taglib prefix = ”myPrefix” uri = ”myUri” %>

Erklæringer

Erklæringer er på formen

<%! Erklæring %>

For eksempel:

<%! int i = 0; %>

Gyldig Java-kode

Java-kode (også variabel- og metodeerklæringer) kan indsættes direkte i JSP-siderne (selvom det kan være praktisk, er det dog i strid men Model-View-Controller-designmønstret).

Java-kode der indsættes i JSP-sider kaldes scriptlets.

Scriptlets er på formen

<% scriptlet %>

Et eksempel på en scriptlet kunne være:

<%      String name = null;      if (request.getParameter("name") == null) { %> <%@ include file="error.html" %> <%      } else {         name = request.getParameter("name");     }%>

Udtryk

Java-udtryk kan indsættes. Udtrykket evalueres på forespørgselstidspunktet, og den resulterende simple type eller objektreferences toString-metode kaldes; resultatet heraf indsættes i siden. Udtryk er på formen

<%= Udtryk %>

For eksempel:

<%= "Dette er et udtryk" %>

Actions

JSP-sider kan udføre såkaldte actions, der inkluderer andre JSP-sider dynamisk, tilgår egenskaber på såkaldte backing beans (Java-objekter, der bl.a. kan indeholde data i forbindelse med en klientsession) og videresender til nye JSP-sider.

Bemærk, at actions er den eneste JSP-konstruktion, der benytter XML-syntaks istf. standard JSP-syntaks.

Actions er på formen

<jsp:actionNavn> Evt. krop </jsp:actionNavn>

For eksempel:

<jsp:include page="scripts/login.jsp" /><jsp:include page="copyright.html" /><jsp:include page="/index.html" /><jsp:include page="scripts/login.jsp">   <jsp:param name="username" value="jsmith" /></jsp:include>

Kommentarer

Kommentarer er på formen

 <!-- Kommentar -->

Kommentarer kan ikke indlejres i hinanden.

Model-View-Controller-paradigmet

Sun anbefaler at Model-View-Controller-mønsteret anvendes med JSP-filer for at afkoble præsentation, processering af HTTP-forespørgsler og datalagring. Enten kan servlets eller separate JSP-filer håndtere processeringen af forespørgsler, hvorefter kontrollen delegeres til en JSP-side, hvis ansvar det kun er at generere output (HTML-kode).

Flere platforme baseret på Model-View-Controller-mønsteret findes, fx JavaServer Faces, Apache Struts og Spring.

Eksempler på JSP-sider

En simpel JSP

Her er et eksempel på en meget simpel JSP, der fortæller, hvad klokken er på applikationsserveren, hvor JSP-en er installeret:

<% java.util.Date dato = new java.util.Date(); %><html><head><title>JSP-demo</title></head><body><h1>JSP-demo</h1><p>Tid på serveren: <%=dato%> /></p></body></html>

Servlet genereret ud fra JSP

Uanset hvordan om JSP-compileren genererer Java-kildekode for en servlet eller generer Java-byte-code direkte,er det instruktivt at se, hvordan compileren omformer en JSP-side til en servlet (dette sker ved første forespørgsel efter siden).

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> ...

Resulterende 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 _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>" );             //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" %>         }    } }

Udgivelser

Se også

Eksterne links