Servlet/JSP - IFIS Uni Lübeck

Werbung
Praktikum Datenbanksysteme
Ho Ngoc Duc
IFIS - Universität zu Lübeck
01.06.2005
Tomcat-Installation
•
•
•
•
$JAVA_HOME (z.B. /home/dbp00/j2sdk1.4.2)
$CATALINA_HOME (/home/dbp00/jakarta-tomcat-4)
Skripte zum Start/Stop: $CATALINA_HOME/bin
Bibliotheken: $CATALINA_HOME/common/lib (zum
Kompilieren von Servlets benötigt)
• Web-Anwendungen: $CATALINA_HOME/webapps/
Web-Applikation
• $CATALINA_HOME/webapps/dbpNN
• Struktur des Verz. dbpNN:
– WEB-INF
• web.xml
• classes (eigene Klassen, Package-Struktur beachten!)
• lib (Hilfsbibliotheken, z.B. mysqldb.jar, upload.jar)
– index.html (index.jsp) & mgl. andere Dateien/Verz.
• http://host:port/dbpNN/servlet/mypackage.MyServlet
• Servlet-Mapping: in Datei web.xml. Zugriff dann über
http://host:port/dbpNN/myservlet
package ifis.ss05.dbp00.web;
import javax.servlet.*;
import javax.servlet.http.*;
public class UhrzeitServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>\n<head>");
out.println("<h1>"+new java.util.Date()+"</h1>");
out.println("</body>\n</html>");
}
}
<servlet>
<servlet-name>time</servlet-name>
<servlet-class>ifis.ss05.dbp00.web.UhrzeitServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>time</servlet-name>
<url-pattern>/uhrzeit</url-pattern>
</servlet-mapping>
Servlet: Vor- u. Nachteile
• Vorteil: sehr flexibel
• Nachteil: HTML ist in Java-Quellcode
eingebettet
– Unübersichtlich
– HTML-Editoren können nicht benutzt werden
– Kein Syntax-Highlighting von HTMLQuellcode
• Alternative: Java Server Pages (JSP)
Java Server Pages
• JSP-Seiten als normale HTML-Seite geschrieben
("Template", statischer Teil), vermischt mit ein
wenig Java (dynamischer Teil)
• Java in speziellen "tags", z.B. <%...%>
• JSP-Dateien müssen die Endung .jsp haben
• JSP wird in ein Java-Servlet übersetzt, welches
dann kompiliert wird.
• Das Servlet arbeitet in der gewohnten Art und
Weise. Browser sieht nur HTML
Beispiel
<HTML>
<BODY>
Hello! The time is now <%= new java.util.Date() %>
</BODY>
</HTML>
• Äquivalent:
Hello! The time is now <% out.print(new java.util.Date()) %>
JSP-Syntax
• Verschiedene JSP “tags” für versch. Zwecke
• <%= expression %>
– expression ist evaluiert. Das Ergebnis in die HTML
Seite eingefügt
• <% code %>
– code wird in service-Methode des Servlets eingefügt
– Diese Konstruction: scriptlet
• <%! declarations %>
– Die declarations werden in die Servlet-Klasse, nicht in
eine Methode eingefügt
• <%-- JSP Kommentar --%> (<!-- HTML -->)
JSP: Vordefinierte Variablen
• request: das HttpServletRequest-Objekt
• response: das HttpServletResponse-Objekt
• session: die HttpSession assoziiert mit dem
Request oder null wenn es keine Session gibt
• out: JspWriter (ähnlich PrintWriter) zum Senden
von Daten an den Client
• Beispiel: Your hostname: <%=
request.getRemoteHost() %>
• Äquivalent: Your hostname: <%
out.print(request.getRemoteHost()) %>
Deklarationen und Direktive
• Global, beeinflußen das ganze Servlet
• <%@ Direktive %>
• Am wichtigsten: page-Direktive
• <%@ page import="java.util.*" %>
• Deklarationen: Definitionen von Variablen und Methoden
<%! static final int PI = 3.1415926536;
double u(double radius) { return 2*PI*r; } %>
• Benutzung in der Seite:
Umfang des Einheitskreises: <%= u(1.0) %>
Zusammenspiel Servlet/JSP
• Trennung von Logik / Layout
– Servlets: HTML eingebettet in Java
– JSPs: Java eingebettet in HTML
• Folgerung:
– Servlets (und JavaBeans) für Logik
– JSPs für Anzeige
Model View Controller (MVC)
Model View Controller (MVC)
Model View Controller (MVC)
• Model (Java Beans)
– Enthält die eigentliche Programmlogik
– Unabhängig von der Webschnittstelle
è Kein Import von javax.servlet.*
• View (JSPs)
– Anzeige des Ergebnisses
– Ziel: Möglichst wenig Java Code
• Controller (Servlet)
– Einlesen und Überprüfen der übergebenen Parameter
– Aufrufen der eigentlichen Programmlogik im Model
– Weitergabe des Ergebnisses an das passende View
public class ControllerServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
int action = Integer.parseInt(request.getParameter("action"));
String start = request.getParameter("start")); // …
if (action == 1) {
Verbindung verb = berechneVerbindung(start, ziel, zeit);
request.setAttribute("verbindung", verb);
RequestDispatcher disp =
request.getRequestDispatcher("/jsp/Verbindung.jsp");
disp.forward(request, response);
} else if (action == 2) {
…;
}
}
}
JSP-Datei Verbindung.jsp
<%! Verbindung verb =
(Verbindung) request.getAttribute("verbindung"); %>
<html>
<head>
<title> Verbindung </title>
</head>
<body>
Verbindung: <%=verb.toString();%>
</body>
</html>
Herunterladen