Hoe zijn JSP en Servlet aan elkaar gerelateerd? Is JSP een soort Servlet? Hoe zijn JSP en JSF aan elkaar gerelateerd? Is JSF een soort voorgebouwde UI gebaseerde JSP zoals ASP.NET-MVC?
JSP is een Java view technologie die draait op de server machine waarmee je template tekst kunt schrijven in client side talen (zoals HTML, CSS, JavaScript, ect.). JSP ondersteunt taglibs, die worden ondersteund door stukjes Java code waarmee je de paginastroom of output dynamisch kunt regelen. Een bekende taglib is JSTL. JSP ondersteunt ook Expression Language, die kan worden gebruikt om toegang te krijgen tot backend gegevens (via attributen die beschikbaar zijn in de pagina, request, sessie en applicatie scopes), meestal in combinatie met taglibs.
Wanneer een JSP voor de eerste keer wordt opgevraagd of wanneer de web app opstart, zal de servlet container het compileren in een klasse die HttpServlet
uitbreidt en het gebruiken tijdens de levensduur van de web app's. U kunt de gegenereerde broncode vinden in de werkdirectory van de server's. In bijvoorbeeld Tomcat, is dat de /work
directory. Op een JSP-verzoek zal de servletcontainer de gecompileerde JSP-klasse uitvoeren en de gegenereerde uitvoer (meestal alleen HTML/CSS/JS) via de webserver over een netwerk naar de clientzijde sturen, die het op zijn beurt in de webbrowser weergeeft.
Servlet is een Java application programming interface (API) die draait op de servermachine, die verzoeken van de client onderschept en een antwoord genereert/zendt. Een bekend voorbeeld is de HttpServlet
, die methoden biedt om in te haken op HTTP verzoeken met behulp van de populaire HTTP methoden, zoals GET
en POST
. Je kunt HttpServlet
s configureren om te luisteren naar een bepaald HTTP URL patroon, dat configureerbaar is in web.xml
, of meer recent met Java EE 6, met @WebServlet
annotatie.
Wanneer een Servlet voor het eerst wordt opgevraagd of tijdens het opstarten van de web app, zal de servlet container er een instantie van maken en deze in het geheugen bewaren gedurende de levensduur van de web app's. Dezelfde instantie zal worden hergebruikt voor elk inkomend verzoek waarvan de URL overeenkomt met het servlet's URL patroon. Je kunt de request gegevens benaderen met HttpServletRequest
en het antwoord afhandelen met HttpServletResponse
. Beide objecten zijn beschikbaar als methode argumenten binnen elk van de overridden methoden van HttpServlet
, zoals doGet()
en doPost()
.
JSF is een component gebaseerd MVC framework dat bovenop de Servlet API is gebouwd en via taglibs componenten levert die gebruikt kunnen worden in JSP of een andere op Java gebaseerde view technologie zoals Facelets. Facelets is veel geschikter voor JSF dan JSP. Het biedt namelijk geweldige templating mogelijkheden zoals composite components, terwijl JSP in principe alleen de <jsp:include>
voor templating in JSF biedt, zodat je'gedwongen bent om aangepaste componenten te maken met ruwe Java code (wat een beetje ondoorzichtig en veel vervelend werk is) wanneer je een herhaalde groep van componenten wilt vervangen door een enkele component. Sinds JSF 2.0 is JSP als view technologie afgeschreven ten gunste van Facelets.
Noot: JSP zelf is NIET deprecated, enkel de combinatie van JSF met JSP is deprecated.
Note: JSP heeft geweldige templating-mogelijkheden door middel van Taglibs, met name de (Tag File) variant. JSP templating in combinatie met JSF is wat er ontbreekt.
Als MVC (Model-View-Controller) framework biedt JSF de FacesServlet
als enige request-response Controller. Het neemt al het standaard en vervelende HTTP request/response werk uit handen, zoals het verzamelen van gebruikersinvoer, het valideren/converteren daarvan, het plaatsen in model objecten, het aanroepen van acties en het renderen van het antwoord. Op deze manier eindig je in principe met een JSP of Facelets (XHTML) pagina voor View en een JavaBean klasse als Model. De JSF componenten worden gebruikt om de view te binden met het model (zoals je ASP.NET web control doet) en de FacesServlet
gebruikt de JSF component tree om al het werk te doen.
Zie http://www.oracle.com/technetwork/java/faq-137059.html
JSP-technologie is onderdeel van de Java technologie familie. JSP-pagina's zijn gecompileerd in servlets en kunnen JavaBeans componenten (bonen) of Enterprise JavaBeans componenten (enterprise beans) aanroepen om verwerking op de server. Als zodanig, JSP technologie een sleutelcomponent in een zeer schaalbare architectuur voor web-gebaseerde applicaties.
Zie https://jcp.org/en/introduction/faq
A: JavaServer Faces technologie is een raamwerk voor het bouwen van gebruikersinterfaces voor web applicaties. JavaServer Faces technologie omvat:
Een set van APIs voor: het representeren van UI componenten en het beheren van hun status, afhandelen van events en input validatie, het definiëren van pagina navigatie, en ondersteuning van internationalisatie en toegankelijkheid.
Een JavaServer Pages (JSP) custom tag library voor het uitdrukken van een JavaServer Faces interface binnen een JSP pagina.
JSP is een gespecialiseerd soort servlet.
JSF is een set van tags die je kan gebruiken met JSP.