Dynamische webseiten
This presentation is the property of its rightful owner.
Sponsored Links
1 / 16

Dynamische Webseiten PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on
  • Presentation posted in: General

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Dynamische webseiten

Dynamische Webseiten

Java servlets


Architektur

Browser

Webserver

Servlet-Engine

Servlet

Servlet

Servlet

Servlet

Browser

Servlet-Engine miteingebautemWebserver

Servlet

Servlet

Servlet

Servlet

Architektur


Genauer

Genauer ...

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


Servlet engines

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


Servlet

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


Lebenszyklus eines servlets

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


Hello world

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();

}

}


Hello world1

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();

}

}


Hello world2

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);

}

}


Initialisierung

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

    • ...


Parameter

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 +


Beispiel parameter

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();

}


Session

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");


Beispiel session

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);


Header modifizieren

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();

}


Zugriff auf datenbank

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());

}


  • Login