Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund...

36
Servlet II Anwendungen • Formular Auswertung • Zähler • Zähler mit Zwischenspeicherung • Hintergrund Berechnung • Passwort Abfrage

Transcript of Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund...

Page 1: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Servlet II

Anwendungen• Formular Auswertung

• Zähler

• Zähler mit Zwischenspeicherung

• Hintergrund Berechnung

• Passwort Abfrage

Page 2: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Auswertung eines Formulars

Servlet Container

processformular

http://www.sdf.... Webserver

index.html

Response

Response

Post Request

Get Request

Page 3: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

<FORM>

<form method="POST" action="processformular">

<input type="text" name=name size=50 >

<input type="submit" >

</form>

http

Request

HTML

Formular

Servlet

Auswertung

get <form method=“GET" doGet(…

post <form method="POST" doPost(…

HTML

Page 4: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Formular erstellen

Page 5: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Auswertung

package counter;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;

public class formular extends HttpServlet { private static final String CONTENT_TYPE = "text/html";

public void init() throws ServletException { }

public void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {

response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); String name = req.getParameter("name"); String s1 = req.getParameter("is-gift"); String s2 = req.getParameter("address-line-1"); String s3 = req.getParameter("address-line-2"); String s4 = req.getParameter("city");

Page 6: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Auswertung

String s5 = req.getParameter("state"); String s6 = req.getParameter("country"); String s7 = req.getParameter("phone-number"); String s8 = req.getParameter("shipping-billing"); out.println("<HTML>"); out.println("<HEAD><TITLE>Formular</TITLE></HEAD>"); out.println("<BODY>"); out.println("Name: " + name +"<BR>"); out.println("Geschenk: " + s1 +"<BR>"); out.println("Adr: " + s2 +"<BR>"); out.println("Adr2: " + s3 +"<BR>"); out.println("Stadt: " + s4 +"<BR>"); out.println("Land: " + s6 +"<BR>"); out.println("Tel: " + s7 +"<BR>"); out.println("Rechnung: " + s8 +"<BR>"); out.println("</BODY></HTML>"); } public void destroy() {}}

Page 7: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Simple Counter

package counter;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class SimpleCounter extends HttpServlet {

int count = 0;

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/plain");

PrintWriter out = res.getWriter();

count++;

out.println("Since loading, this servlet has been accessed " + count + " times.");

}

}

Page 8: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Internet Mehrfach Anfragen

Page 9: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Daten Inkonsistenz

Kein Problem bei lokalen Variablen Vorsicht bei Instanz VariablenBsp: Simple Counter count++; // Thread 1 count++; // Thread 2 out.println("Since loading, ….. // Thread 1 out.println("Since loading, ….. // Thread 2

Hilfe: synchronized Blocks:Nur ein einzelner Thread darf einen synchronized Block ausführen

Page 10: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Simple Counter synchronized

package counter;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class SimpleCounter extends HttpServlet {

int count = 0;

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/plain");

PrintWriter out = res.getWriter();

synchronized(this) { count++;

out.println("Since loading, this servlet has been accessed "+count +" times.");

}

}

}

Page 11: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Counter IIpackage counter;

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HolisticCounter extends HttpServlet {

static int classCount = 0; // verteilt auf alle Instanzen

int count = 0; // Nur für dieses Servlet

static Hashtable instances = new Hashtable(); // verteilt auf alle Instanzen

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/plain");

PrintWriter out = res.getWriter();

count++;

out.println("Since loading, this servlet instance has been accessed " +

count + " times.");

Page 12: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Counter II

// Trick: Die Instanzen werden gezählt, indem sie in eine

// Hashtable eingetragen werden. Gleiche Einträge werden ignoriert.

// Die size() Methode liefert die Zahl der einzelnen Instanzen.

instances.put(this, this);

out.println("There are currently " +

instances.size() + " instances.");

classCount++;

out.println("Across all instances, this servlet class has been " +

"accessed " + classCount + " times.");

}

}

Page 13: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Lebenszyklus

• Initialisierung

• Antworten auf Anfragen

• Zerstörung

Persistenz

DB Verbindung

Information von früheren Transaktionen

Page 14: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Counter III

package counter;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class InitDestroyCounter extends HttpServlet {

int count;

public void init() throws ServletException {

// Versuch den gespeicherten Zustand des Zählers zu laden

FileReader fileReader = null;

BufferedReader bufferedReader = null;

try {

fileReader = new FileReader("InitDestroyCounter.initial");

bufferedReader = new BufferedReader(fileReader);

String initial = bufferedReader.readLine();

count = Integer.parseInt(initial);

return;

}

Page 15: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

catch (FileNotFoundException ignored) { } // kein gespeicherter Zähler catch (IOException ignored) { } // Problem beim lesen catch (NumberFormatException ignored) { } // Korruptes File finally { // Schliessen des Files try { if (bufferedReader != null) {bufferedReader.close(); } } catch (IOException ignored) { } } // Überprüfe ob ein Initialisierungsparameter vorhanden ist. String initial = getInitParameter("initial"); try { count = Integer.parseInt(initial); return; } catch (NumberFormatException ignored) { } // null or non-integer value // Default 0 count = 0; }

InitDestroyCounter

Page 16: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/plain");

PrintWriter out = res.getWriter();

count++;

out.println("Since the beginning, this servlet has been accessed " +

count + " times.");

}

public void destroy() {

super.destroy();

saveState();

}

InitDestroyCounter

Page 17: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

public void saveState() {

// Versuch den Counter zu speichern

FileWriter fileWriter = null;

PrintWriter printWriter = null;

try {

fileWriter = new FileWriter("InitDestroyCounter.initial");

printWriter = new PrintWriter(fileWriter);

printWriter.println(count);

return;

}

catch (IOException e) { // Problem beim Schreiben

}

finally {

// Zur Sicherheit das File schliessen

if (printWriter != null) {

printWriter.close();

}

}

}

}

InitDestroyCounter

Page 18: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

PrimSearcher

package counter;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;

public class PrimeSearcher extends HttpServlet implements Runnable {

long lastprime = 0; // letzte gefundene Primzahl Date lastprimeModified = new Date(); // Zeit Thread searcher; // Hintergrund Thread

public void init() throws ServletException { searcher = new Thread(this); searcher.setPriority(Thread.MIN_PRIORITY); searcher.start(); }

http://www.mindview.net/Books/DownloadSites/

Page 19: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

PrimSearcher

public void run() { long candidate = 1000000000000001L;

while (true) { if (isPrime(candidate)) { lastprime = candidate; // aktuelle Primzahl lastprimeModified = new Date(); // Zeit der letzten gefunden

Primzahl } candidate += 2; // keine geraden Primzahlen

try { searcher.sleep(200); // an andere Prozesse denken } catch (InterruptedException ignored) { } }

Page 20: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

PrimSearcherprivate static boolean isPrime(long candidate) { // Dividiere die Zahl durch alle ungeraden Zahlen zwischen 3 und sqrt(z) long sqrt = (long) Math.sqrt(candidate); for (long i = 3; i <= sqrt; i += 2) { if (candidate % i == 0) return false; // Ein Faktor gefunden }

return true; //kein Faktor } public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); if (lastprime == 0) { out.println("Still searching for first prime..."); } else { out.println("The last prime discovered was " + lastprime); out.println(" at " + lastprimeModified); } } public void destroy() { searcher.stop();}}

http://archive.coreservlets.com/

Page 21: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

package protectedpage;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.Properties;

import sun.misc.BASE64Decoder;public class ProtectedPage extends HttpServlet { private Properties passwords; private String passwordFile;

public void init(ServletConfig config) throws ServletException { super.init(config); try { passwordFile = config.getInitParameter("passwordFile"); passwords = new Properties(); passwords.load(new FileInputStream(passwordFile)); } catch(IOException ioe) {} }

Protected Page

Page 22: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Protected Page

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String authorization = request.getHeader("Authorization");

if (authorization == null) {

askForPassword(response);

} else {

Page 23: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Protected Page

String userInfo = authorization.substring(6).trim();

BASE64Decoder decoder = new BASE64Decoder();

String nameAndPassword = new String(decoder.decodeBuffer(userInfo));

int index = nameAndPassword.indexOf(":");

String user = nameAndPassword.substring(0, index);

String password = nameAndPassword.substring(index+1);

String realPassword = passwords.getProperty(user);

if ((realPassword != null) &&

(realPassword.equals(password))) {

String title = "Welcome to the Protected Page";

out.println(ServletUtilities.headWithTitle(title) +

Page 24: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Protected Page

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + title + "</H1>\n" +

"Congratulations. You have accessed a\n" +

"highly proprietary company document.\n" +

"Shred or eat all hardcopies before\n" +

"going to bed tonight.\n" +

"</BODY></HTML>");

} else {

askForPassword(response);

}

}

}

Page 25: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Protected Page

private void askForPassword(HttpServletResponse response) {

response.setStatus(response.SC_UNAUTHORIZED); // Ie 401

response.setHeader("WWW-Authenticate",

"BASIC realm=\"privileged-few\"");

}

/** Handle GET and POST identically. */

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

Page 26: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Praktikum

Kundenangaben mit PW Abfrage:

1. http Passwortabfrage

2. Formular mit Passwortabfrage

3. Alle Adressen im Container werden angezeigt.

4. Formular zur Eingabe von weiteren Adressen

(5.) Save & Edit & Delete

Page 27: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

3.) alle Daten anzeigen

Ihr Job

1.)

4.) Eingabe2.)

Page 28: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

1.) Neues Projekt

Page 29: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

2.) HTML Files in Projekt Ordner kopieren und hinzufügen

Page 30: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.
Page 31: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

3. Neues Servlet oder Webanwendung erzeugen

Page 32: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

HTML Files zur Webanwendung hinzufügen

Page 33: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

web.xml File anpassen

Page 34: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Servlet Class-File Angaben

Page 35: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.

Servlet Mapping Angaben

Page 36: Servlet II Anwendungen Formular Auswertung Zähler Zähler mit Zwischenspeicherung Hintergrund Berechnung Passwort Abfrage.