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

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

Apr 06, 2015

Download

Documents

Benedikt Bohl
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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.