1 / 16

Dynamische Webseiten

Dynamische Webseiten. Java servlets. Browser. Webserver. Servlet- Engine. Servlet. Servlet. Servlet. Servlet. Browser. Servlet- Engine mit eingebautem Webserver. Servlet. Servlet. Servlet. Servlet. Architektur. Genauer. Quelle: http://www.research.ibm.com/journal/sj/373/bayeh1.gif.

Download Presentation

Dynamische Webseiten

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Dynamische Webseiten Java servlets

  2. Browser Webserver Servlet-Engine Servlet Servlet Servlet Servlet Browser Servlet-Engine miteingebautemWebserver Servlet Servlet Servlet Servlet Architektur

  3. Genauer ... Quelle: http://www.research.ibm.com/journal/sj/373/bayeh1.gif

  4. Servlet Engines • Java Webserver (SUN) • 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 • generisch • javax.servlet.http • http • Java Klasse • 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ötigHttpSession 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) count = new Integer(0); 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()); }

More Related