Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Dynamische Webseiten Java servlets
2
Servlet- Engine mit eingebautem Webserver
Architektur Browser Webserver Servlet- Engine Servlet Browser Servlet- Engine mit eingebautem Webserver Servlet
3
Genauer ... Quelle:
4
Servlet Engines Java Webserver (SUN) Websphere (IBM) Jserv (Apache)
Referenzimplementierung Websphere (IBM) Application Server komplex Load Balancing .... Jserv (Apache) Apache module + Servlet Engine Tomcat (Apache) standalone oder Apache module einfach und schnell und viele andere
5
Servlet javax.servlet javax.servlet.http Java Klasse generisch http
abgeleitet von HttpServlet keine main() Methode Überschreiben von doGet() und/oder doPost() ServletRequest Parameter, input Stream ServletResponse Session, outputStream
6
Lebenszyklus eines Servlets
Servlet wird vom Anwender kompiliert beim ersten Aufruf von der engine geladen Klasse wird dynamisch geladen bei jedem weiteren Aufruf wird nur die entsprechende Methode ausgeführt genauer: ausgeführt wird service() die doHeader() ... ausführt und je nach Methode doGet() oder doPost() kaum Overhead
7
Hello World mit GET import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // Was liefern wir zurueck ? // Hier: ASCII Text, kein HTML response.setContentType("text/plain"); // Output liefern wir ueber "normale" Java IO PrintWriter pw = response.getWriter(); pw.println("Hello World"); pw.close(); }
8
Hello World mit POST import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // Was liefern wir zurueck ? // Hier: ASCII Text, kein HTML response.setContentType("text/plain"); // Output liefern wir ueber "normale" Java IO PrintWriter pw = response.getWriter(); pw.println("Hello World"); pw.close(); }
9
Hello World beide ? import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // Was liefern wir zurueck ? // Hier: ASCII Text, kein HTML response.setContentType("text/plain"); // Output liefern wir ueber "normale" Java IO PrintWriter pw = response.getWriter(); pw.println("Hello World"); pw.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response);
10
Initialisierung Zur Initialisierung kann die init-Methode überschrieben werden public void init(ServletConfig conf) throws ServletException { super.init(conf); count = 0; } z.B. Verbindung zur DB herstellen evtl. schlechte Idee (Fehlerbehandlung) Verbindungen zu factories,... aufsetzen Konfigurationsinformationen lesen ...
11
Parameter HttpServletRequest.getParameter(name) String par = request.getParameter("ID"); liefert den Wert des Parameters (hier ID) als String Ggf. Konvertierung, z.B. int value = Integer.parseInt(par) double value = Double.parseDouble(par) bei GET und POST Problem: Parameter mit Sonderzeichen Lösung: URL-encoding z.B. ' ' (blank) als +
12
Beispiel: Parameter public class HelloWorldPar extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // Was liefern wir zurueck ? // Hier: ASCII Text, kein HTML response.setContentType("text/plain"); String par = request.getParameter("ID"); // Output liefern wir ueber "normale" Java IO PrintWriter pw = response.getWriter(); pw.println("Hello World"); pw.println(par); pw.close(); }
13
Session Wie werden Informationen von einer Seite zur anderen transportiert ? etwa Benutzername, DB Verbindung,... z.B. Cookies, URL-rewriting,... manuell oder automatisch: Session Objekt HttpServletRequest.getSession() liefert HttpSession Methoden getAttribute(name)/setAttribute(name,Wert) liefert/setzt beliebiges Object cast nötig HttpSession session = request.getSession(); count =(Integer)session.getAttribute("COUNT");
14
Beispiel: Session public class HelloWorldSession extends HttpServlet {
private Integer count; public void init(ServletConfig conf) throws ServletException { super.init(conf); count = new Integer(0); } .... pw.println("Hello World"); HttpSession session = request.getSession(); count = (Integer) session.getAttribute("COUNT"); if (count == null) pw.println(count); count=new Integer(count.intValue()+1); session.setAttribute("COUNT",count);
15
Header modifizieren public class Uhr extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException // Was liefern wir zurueck ? response.setHeader("Refresh","5"); response.setContentType("text/html"); // Output liefern wir ueber "normale" Java IO PrintWriter pw = response.getWriter(); Date D = new Date(); pw.println("<HTML><BODY><h1>"); pw.println(D); pw.println("</h1></BODY></HTML>"); pw.close(); }
16
Zugriff auf Datenbank public class TestEmpServlet extends HttpServlet { ... out.println("<html><body>"); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost/ba","till","haenisch"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ( "select empno,ename from EMP"); while (rset.next()) { out.println(rset.getInt(1) + " " + rset.getString(2) + "<br>"); } catch (Exception e) { out.println(e.getMessage());
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.