JSP
From Wikipedia, the free encyclopedia
Remove ads
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.
For alternative betydninger, se JSP (flertydig). (Se også artikler, som begynder med JSP)
Remove ads
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.
Remove ads
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.
Remove ads
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" %> } } }
Remove ads
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
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads