J2EEKurs - J2EE---Servlets und JavaServer...
Transcript of J2EEKurs - J2EE---Servlets und JavaServer...
![Page 1: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/1.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
J2EEKursJ2EE—Servlets und JavaServer Pages
Peter Thiemann
Universitat Freiburg, Germany
Sommercampus J2EEKurs, Freiburg, Germany,10.-14.10.2005
Peter Thiemann J2EEKurs
![Page 2: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/2.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
ServletsEinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
JavaServer PagesEinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Anwendungsarchitektur
Peter Thiemann J2EEKurs
![Page 3: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/3.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Servlets
ServletsI FrontendtechnologieI programmorientiertI PrasentationsschichtI Keine Geschaftslogik
Peter Thiemann J2EEKurs
![Page 4: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/4.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Aus der Servlet Spezifikation, v2.4
A servlet is a JavaTM technology-based Webcomponent , managed by a container, that
generates dynamic content . Like other Java
technology-based components, servlets areplatform-independent Java classes that are compiled toplatform-neutral byte code thatcan be loaded dynamically into and run by a Java
technology-enabled Web server . Containers, sometimescalled servlet engines, are Web server extensions thatprovide servlet functionality. Servlets interact with Webclients via a request/response paradigm implemented bythe servlet container.
Peter Thiemann J2EEKurs
![Page 5: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/5.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Das Servlet-Modell
container
servlet
servlet
servlet
HTTP−Request
HTTP−Response
web server
Peter Thiemann J2EEKurs
![Page 6: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/6.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Das Servlet-Programmiermodell
I Subklasse von javax.servlet.http.HttpServletI init () InitialisierungI service (request, response) Anfrageverarbeitung
HTTP-Anfrage durch HttpServletRequest -ObjektHTTP-Antworten durch HttpServletResponse -ObjektSpezialversionen davon
I doGet (request, response)Verarbeitung von GET-Anfragen
I doPost (request, response)Verarbeitung von POST-Anfragen
I doHead (request, response)Verarbeitung von HEAD-Anfragen
I destroy () Finalisierung
Peter Thiemann J2EEKurs
![Page 7: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/7.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Der Servlet-Lebenszyklus
loaded
ready
instantiated
destroy()
service()
init()
I Laden und Instanzieren durchServlet-Container
I Mehrfache Instanzierung inunterschiedlichen Threads moglich
I InitialisierenMethode init()
I AnfrageverarbeitungMethode service(...) ,doGet(...) , doPost(...) , . . .
I BeendenMethode destroy()
Peter Thiemann J2EEKurs
![Page 8: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/8.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Kollaborationsdiagramm fur einen Servlet-Aufruf
req:Request res:Response
:Servlet
:ServletContainer
2.1 req=create()
4.1 read()4.2 write(output)
2.2 res=create()
5 writeStream(output)
1. request()
6. output = respond()
3 service(req, res)
Peter Thiemann J2EEKurs
![Page 9: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/9.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Servlet-Beispiel: Echo
import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;
public class Echo extends HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {response.setContentType ("text/html; charset=utf-8");PrintWriter out = response.getWriter ();out.println ("<html>");out.println ("<head><title>Echo Results</title></head>");out.println ("<body><h3>Echo Results</h3><ul>");Enumeration e = request.getParameterNames ();while (e.hasMoreElements ()) {
String name = (String)e.nextElement ();String value = request.getParameter (name);out.print ("<li>");out.println (name + ": " + value);
}out.println ("</ul></body></html>");
}}
Peter Thiemann J2EEKurs
![Page 10: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/10.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Hinweise
I Jedes Servlet muss eine der do-Methoden (doGet ,doPost , etc) uberschreiben.
I Erzeugen der Ausgabe durch Drucken aufresponse.getWriter() .
I Zugriff auf Formulardaten durchrequest.getParameter (String name) .
I Vor Verarbeitung von Formulardaten die Parameter stetsauf null testen.
I Umleiten einer Anfrage auf ein anderes Servletresponse.sendRedirect (String url) .
Peter Thiemann J2EEKurs
![Page 11: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/11.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Webanwendung
Eine Webanwendung besteht ausI einer Menge von ServletsI Hilfsklassen und BibliothekenI XHTML Dokumenten, JavaServer PagesI StylesheetsI Bildern, etc.
abgelegt in standardisierter Verzeichnisstruktur
Peter Thiemann J2EEKurs
![Page 12: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/12.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Verzeichnisstruktur einer Webanwendung
myapp (Kontextpfad)WEB−INF
classeslib
I myapp/ (und alle Unterverzeichnisse ausser WEB-INF)statische Ressourcen (XHTML Seiten, Bilder, Stylesheets)
I myapp/WEB-INF/Deployment Descriptor in Datei web.xml (s.u.)
I myapp/WEB-INF/classes/class -Dateien von Servlets und Hilfsklassenin Verzeichnisstruktur entsprechend den Paketnamen
I myapp/WEB-INF/lib/jar -Dateien im CLASSPATH der Anwendung
I oder gebundelt in Web Archive (war Datei)Peter Thiemann J2EEKurs
![Page 13: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/13.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Deployment Descriptor
I Erforderlich in jeder Web AnwendungI Konfigurationsdaten
I Abbildung von URI-Pfaden auf Ressourcen der AnwendungI Initialisierungsparameter; verfugbar uber
String getInitParameter (String name)I FehlerbehandlungI Zugriffsbeschrankungen und AuthentisierungI Registrierung von Listeners und Filters
I deklarativ, getrennt vom Code
Peter Thiemann J2EEKurs
![Page 14: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/14.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Beispiel: Deployment Descriptor
<?xml version="1.0" encoding="utf-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"
version="2.4"><display-name>Echo Your Parameters</display-name><servlet>
<servlet-name>MyFirstServlet</servlet-name><servlet-class>Echo</servlet-class>
</servlet><servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name><url-pattern>/echo/*</url-pattern>
</servlet-mapping></web-app>
Peter Thiemann J2EEKurs
![Page 15: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/15.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Globaler Zustand
I spezifisch fur Anwendung oder ServerI Lebensdauer: persistent, bestimmt durch AnwendungI Anwendung: Kontextattribute, DatenbankI Durch ServletContext getServletContext()
I Servletcontainer erzeugt ein ServletContext -Objektpro Anwendung/context path (URL-Prafix)
I Zustand mit Attributen des ServletContextI void setAttribute(String name, Object o)I Object getAttribute(String name)
I Kontext einer anderen Anwendung:ServletContext getContext(String uripath)
Peter Thiemann J2EEKurs
![Page 16: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/16.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Sitzungszustand
I spezifisch fur eine Gruppe von Anfragen und AntwortenI Bsp: EinkaufswagenI Lebensdauer: Sitzung bzw Neustart des ServletcontainersI Reprasentiert durch Session -ObjektI Klasse HttpServletRequest
Methode HttpSession getSession (bool create)liefert aktuelles Sitzungsobjekt
I Sitzung lokal zur Anwendung (ServletContext )
Peter Thiemann J2EEKurs
![Page 17: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/17.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Fluchtiger Zustand
I spezifisch fur eine AnfrageI Parameter und lokale Variablen in doGet , doPost , etc
Peter Thiemann J2EEKurs
![Page 18: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/18.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Beispiel mit Zustand: NumberGuess
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;
public class NumberGuess extends HttpServlet {public void doGet (HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException
{HttpSession session = request.getSession (true) ;response.setContentType ("text/html; charset=utf-8");PrintWriter out = response.getWriter ();out.println ("<html><head><title>Number Guess</title></head>");out.println ("<body><h3>Number Guess</h3>");String guessString = request.getParameter ("guess") ;
Peter Thiemann J2EEKurs
![Page 19: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/19.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Beispiel mit Zustand: NumberGuess/2
if (guessString == null) {long n = Math.round (Math.random () * 100);session.setAttribute ("SN", new Long (n)) ;out.println ("I am thinking of a number from 1-100");
} else {long guess = Long.parseLong (guessString);long n = ((Long)session.getAttribute ("SN")).longValue () ;if (guess == n) {
out.print ("You got it!");} else if (guess > n) {
out.println ("Try lower");} else {
out.println ("Try higher");}
}String uri = request.getRequestURI () ;out.println ("<form action =\"" + response.encodeURL (uri) + "\" method=\"get\">");out.println ("<input type=\"text\" name=\"guess\"/>");out.println ("<input type=\"submit\" value=\"Make A Guess\"/>");out.println ("</form></body></html>");
}}
Peter Thiemann J2EEKurs
![Page 20: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/20.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinleitungModellLebenszyklusBeispielDeploymentZustand in Webanwendungen
Zusammenfassung Servlets
Plattformunabhangigkeit Servlets konnen auf jederJava-Plattform ohne Rekompilierung ausgefuhrtwerden.
Multi-Threading Servlets werden einmal geladen und dannbeliebig oft in verschiedenen Threads instanziert(abhangig vom Container).
Effizienz Eine Anfrage kann meist eine existierende Instanzverwenden.
Flexibilitat Servlets konnen beliebige Java-Bibliothekenverwenden.
Peter Thiemann J2EEKurs
![Page 21: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/21.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
JavaServer Pages
JavaServer PagesI Frontendtechnologie, . . .I seitenorientiert (XML/XHTML)I basierend auf ServletsI Anspruch:
I moglichst wenig Java-CodeI erstellbar mit XHTML-Designwerkzeug
Peter Thiemann J2EEKurs
![Page 22: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/22.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
JavaServer Pages (JSP)
I JSP = XML + Java + EL (Expression Language)I JSPs werden direkt auf Server abgelegt
I Transparente Ubersetzung in ServletsI Transparente Ubersetzung in Bytecode
I XML-basierte Erweiterung durch Tag-BibliothekenI Zusatzlich zu Servlets
I Vereinfachter Zugriff auf KontextI Zustandsverwaltung durch Parameter
Peter Thiemann J2EEKurs
![Page 23: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/23.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Verarbeitung von JSPs
Peter Thiemann J2EEKurs
![Page 24: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/24.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
JSP Beispiel
<!-- Hallo.jsp --><hmtl>
<head><title>Hallo Welt</title>
</head><body>
<p>Hallo Welt, die Uhrzeit ist:<% new java.util.Date() %>
</p></body>
</html>
Peter Thiemann J2EEKurs
![Page 25: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/25.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
JSP—ubersetzt
public class abcedfgh extends HttpServlet {public void doGet(HttpServletRequest req,
HttpServletResponse res)throws ServletException, IOException {res.setContentType("text/html");PrintWriter out = res.getWriter();out.print("<html>"
+ "<head><title>Hallo Welt</title></head>"+ "<body><p>Hallo Welt, die Uhrzeit ist: ");
out.print(new java.util.Date());out.print("</p></body></html>");
}}
Peter Thiemann J2EEKurs
![Page 26: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/26.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Beispiel: Hit Counter
<% response.addDateHeader("Expires", 0); %><html>
<head><title>JSP</title></head><body><h1>Hello World!</h1><%! int hits = 0; %>You are visitor number<% synchronized(this) { out.println(++hits); } %>since the last time the service was restarted.<p> This page was last updated:<%= new java.util.Date().toLocaleString() %></p></body>
</html>
Peter Thiemann J2EEKurs
![Page 27: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/27.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Kontext eines Servlets
I Automatisch deklarierte Variablen (vgl. Servlets)
HttpServletRequest request;HttpServletResponse response;HttpSession session;ServletContext application;ServletConfig config;
I Ausgabekanal (Exceptions, Pufferung)
JspWriter out;
Peter Thiemann J2EEKurs
![Page 28: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/28.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Zustandsverwaltung (Attribute)
I Attribut = benanntes ObjektI abgelegt in und zugreifbar durch LaufzeitumgebungI Vier Zustandsebenen (scoped attributes)
I page scopePageContext pageContext; getAttribute ,setAttribute (alle Ebenen zugreifbar)findAttribute durchsucht alle Ebenen
I request scopeI session scope (auch uber Session-Objekt)I application scope (auch uber Kontext-Objekt)
Peter Thiemann J2EEKurs
![Page 29: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/29.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Funktion der Ebenen
Peter Thiemann J2EEKurs
![Page 30: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/30.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
JSP Expression Language
I Ziel: Anwendungen ohne Java Syntax / KenntnisseI Syntax ${ expression }I Innerhalb von XML-FragmentenI Ersetzt durch Wert des expressionI Syntax vergleichbar mit JavaScript (vgl. JSP-Spezifikation)I Objektoperationen: ${shoppingCart.price}
wird transformiert nach
pageContext.findAttribute ("shoppingCart").getPrice()
Peter Thiemann J2EEKurs
![Page 31: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/31.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
EinfuhrungVerarbeitungBeispieleZustandsverwaltungExpression Language
Implizite Objekte
I param Request ParameterI pageContext
I cookie
I Beispiel
<html><head><title>Addition</title></head><body bgcolor="${param.color}">
The sum of ${param.x} and ${param.y} is${param.x+param.y}
</body></html>
Peter Thiemann J2EEKurs
![Page 32: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/32.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
Model-View-Controller
Controller
Model View
I Standardmuster fur GUI-Anwendungen (Smalltalk)I Model enthalt die Daten und Operationen daraufI View enthalt die PrasentationsschichtI Controller
I Interaktion mit dem KlientI Veranderung des ModellsI Auswahl der Views
Peter Thiemann J2EEKurs
![Page 33: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/33.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
Model 2 Architektur
I Instanz von MVC fur WebanwendungenI Controller
Servlet als Dispatcher von JSPsI View
JavaServer PagesI nur PrasentationslogikI unabhangig von Daten und Geschaftslogik
I ModelJava Klassen
I Datenhaltung mit EJB entity beansI Geschaftslogik mit EJB session beans
Peter Thiemann J2EEKurs
![Page 34: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/34.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
Controller
I Servlet als zentraler DispatcherI Konvention fur URLs von Einstiegspunkten:
start .do , entry1 .do , entry2 .do , . . .
<servlet><servlet-name>Controller</servlet-name><servlet-class>Controller</servlet-class>
</servlet><servlet-mapping>
<servlet-name>Controller</servlet-name><url-pattern>*.do</url-pattern>
</servlet-mapping>
Peter Thiemann J2EEKurs
![Page 35: J2EEKurs - J2EE---Servlets und JavaServer Pagesproglang.informatik.uni-freiburg.de/teaching/j2ee/2005ws/...JavaServer Pages Anwendungsarchitektur J2EEKurs J2EE—Servlets und JavaServer](https://reader034.fdokument.com/reader034/viewer/2022042711/5f7c0eb843489a50216ff500/html5/thumbnails/35.jpg)
InhaltServlets
JavaServer PagesAnwendungsarchitektur
Controllerzustand
public class Controller extends HttpServlet {public void doGet(HttpServletRequest request,
HttpServletResponse response) {HttpSession session = request.getSession();String command = request.getServletPath();Model model;if (command.equals("/start.do")) {
model = new Model();session.setAttribute("model", model);getServletContext()
.getRequestDispatcher("/start.jsp")
.forward(request, response);} else if (command.equals("/entry1.do")) { // ...
Peter Thiemann J2EEKurs