1.1 Inleiding tot JSP
Er zijn twee populaire manieren om een servlet te schrijven: imperatief en declaratief . We hebben de eerste al behandeld - dit is in feite een servlet. De tweede heet JSP (Java Server Pages), en we zullen er nu kennis mee maken.
Servlet JSP-voorbeeld:
<html>
<body>
<% out.print(2*5); %>
</body>
</html>
Niet erg vergelijkbaar met de klassieke Servlet die we gewend zijn, toch? Dit is waar. JSP is een HTML-pagina met Java-code-inserts (groen gemarkeerd) .
Zie je, als je veel Java-code in een servlet hebt en weinig HTML-code, dan ben je meer op je gemak met een klassieke servlet . Maar wat als u een grote HTML-pagina nodig heeft waarin slechts een paar regels door de server worden gewijzigd?
In dit geval zou het eenvoudigste zijn om deze HTML-pagina te maken en op de een of andere manier de Java-code op de server erin uit te voeren.
1.2 Samenstellen van JSP's
Laten we nog een voorbeeld bekijken:
<html>
<body>
<%
double num = Math.random();
if (num > 0.95) {
%>
<h2>You are lucky, user!</h2><p>(<%= num %>)</p>
<%
}
%>
</body>
</html>
We krijgen een willekeurig getal en als het groter is dan 0,95, drukken we de tekst "Je hebt geluk, gebruiker!"
Java-code is hier blauw gemarkeerd . Normaal (niet gemarkeerd) - HTML-code en rode servicetags , die helpen te begrijpen waar de Java-code is en waar de HTML is.
Merk je iets vreemds op? De afsluitende accolade "}"
zit in een andere "code block"
. Wat is de juiste manier om dergelijke code te schrijven? Hoe werkt het eigenlijk?
Het antwoord zal super simpel zijn :)
De webserver compileert het, nadat het een JSP-bestand heeft gevonden, in een klassieke servlet. Op basis van de bovenstaande JSP-pagina wordt deze servlet gegenereerd:
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
PrintWriter out = response.getWriter();
out.print("<html> ");
out.print("<body>");
double num = Math.random();
if (num > 0.95) {
out.print("<h2>You're lucky user! </h2><p>(" + num + ")</p>");
}
out.print("</body>");
out.print("</html>");
}
}
De webcontainer heeft zojuist de servletcode gegenereerd, waarbij de HTML in tekst is veranderd en de Java-code-inserts gewone Java-code zijn geworden!