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:
- Dynamisk generering af hjemmesider: Hjemmesider udseende kan varieres efter input, givet fx i forespørgselsstrengen (URL'en + dens parametre).
- 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.
- 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.
- 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.
- 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
- JavaServer Pages, Third Edition, Hans Bergsten, O'Reilly & Associates, Inc., Sebastopol, California, 2003. ISBN 0-596-00563-6
Se også
- J2EE
- JavaServer Faces
- Servlet
- WAR (filformat)
- EAR (filformat)
- JAR (filformat)
Eksterne links
- Suns JSP-produktbeskrivelse
- JSP-Tutorial – trin for trin Arkiveret 4. april 2010 hos Wayback Machine
- JSR 245 (JSP 2.1)
- JSR 152 (JSP 2.0)
- JSR 53 (JSP 1.2)
- Gratis JSP-undervisningsmateriale (på engelsk) Arkiveret 19. januar 2007 hos Wayback Machine