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
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]JSP-specifikationen præsenterer 6 syntakselementer.
Direktiver
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]Erklæringer er på formen
<%! Erklæring %>
For eksempel:
<%! int i = 0; %>
Gyldig Java-kode
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]Kommentarer er på formen
<!-- Kommentar -->
Kommentarer kan ikke indlejres i hinanden.
Model-View-Controller-paradigmet
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]En simpel JSP
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]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
[redigér | rediger kildetekst]- JavaServer Pages, Third Edition, Hans Bergsten, O'Reilly & Associates, Inc., Sebastopol, California, 2003. ISBN 0-596-00563-6
Se også
[redigér | rediger kildetekst]Eksterne links
[redigér | rediger kildetekst]- 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