Session Tracking - Universität Basel

Werbung
Session Tracking
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
5-1
4. Servlet – JSP Framework Struts
1. Grundlagen
4
4
4
4
1.1.
1.2.
1.3.
1.4.
4
4
1.5.
1.6.
JAR Files
TCP/IP, Sockels
HTTP
Java Web Service Developer
Pack (WSDP)
Ant
JAVA Fehlermeldungen
4
4
4
4
4
4
4
4
4
4
4
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
2.10.
2.11.
Servlet Framework
Tomcat Servlet Container
Lebenszyklus
Hello World Servlet
Implizite Objekte
Einfache Servlets
Konfiguration (web.xml)
Anfrage weiterleiten
Filter
Cookies
Session Tracking
4
4
4
4
4
4
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
Architektur
Syntax, Skripte, Direktiven
Implizite Objekte
Aktionen
JavaBeans
Custom Tags
2. Servlets
3. JSP
Institut für Informatik
Universität Basel
www.ifi.unibas.ch/studies
4
4.1.Architektur
4.2.Planung einer
Webanwendung
4.3.Implementierung
4
4
4
4
4
4
5.1.Grundlagen
5.2.DTD & Schemata
5.3.Parser (SAX, DOM)
5.4.XPath
5.5.XSLT
5.6.XSL-FO
4
4
5. XML
6. XML Framework Cocoon
4
4
4
4
6.1.Architektur
6.2.Cocoon Beispiel
6.3.Sitemap
6.4.XSP
7. JAVA Webservices
4
4
4
4
7.1.SOAP
7.2.UDDI / ebXML
7.3.WSDL
7.4.Implementierung eines
Webservice
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-2
1
JSP
1.
2.
3.
4.
5.
6.
7.
Architektur
Syntax
Skripte
Direktiven
Implizite Objekte
Aktionen
JavaBeans
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-3
Quellenangaben
Offizielle Spezifikationen, Klassenbibliotheken & dokumentation
4http://java.sun.com/products/jsp/
4http://jakarta.apache.org/
Tutorials
4http://java.sun.com/j2ee/tutorial/
4http://java.sun.com/docs/books/tutorial/servlets/
4http://www.intelinfo.com/it_training_materials_and
_books/free_java_training_materials.html
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-4
2
Wie sieht eine JSP-Seite aus
<HTML>
<%@ page language=="java" imports=="com.wombat.JSP.*" %>
<H1>Welcome</H1>
<P>Today is </P>
<jsp:useBean id=="clock" class=="calendar.jspCalendar" />
<UL>
<LI>Day: <%==clock.getDayOfMonth() %>
<LI>Year: <%==clock.getYear() %>
</UL>
<% if (Calendar.getInstance().get(Calendar.AM_PM) ==== Calendar.AM) { %>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
<%@ include file=="copyright.html" %>
</HTML>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-5
Vergleich mit JSP,ASP,PHP -1JSP
PHP
Web Server
IIS; PWS
ASP
Apache, IIS, PWS,
Netzcape Server,
iPlanet etc.
Apache, IIS,PWS,
Netscape Server
Plattform
Windows
Unix(Solaris,
Linux,AIX,IRIX),
Windows, MacOS
Unix(Solaris,
Linux,AIX,IRIX),
Windows
KomponentenTechnologie
COM
JavaBeans, EJB
COM, JavaBeans
Selbst
definierte
Tagsyntax
Offenheit
Nicht möglich
möglich
Nicht möglich
Nein
Kooperiert von
vielen großen
Firmen(
SUN,IBM,BEA)
Opernressourcen
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-6
3
Vergleich mit JSP,ASP,PHP -2ASP
Script-Sprache
PHP
Java, ECMAScript
PHP
Geeignet für große Ja
Webservice
Ja
Nein
Ausführungsgeschwindigkeit
Schnell
Sehr schnell
Sehr schnell
Lernschwierigkeit
Niedrig
Relativ niedrig
Niedrig
Sessionverwaltung Ja
Ja
Ja
Einheitliche DBVerbindung
ADO,ODBC
JDBC
nein
Datei-suffix
asp
jsp
php,php3,phps
Institut für Informatik
Universität Basel
VBScript, JScript
JSP
Java Apache XML (JAX)
Lektion 5: JSP I
Bis jetzt Servlets …
www.ifi.unibas.ch/studies
5-7
Webserver (Tomcat)
get start
Servlet Container
generiert HTML
versendet via http
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-8
4
HTTP Server
CGI-Architektur
Request
CGI Process
Start
Process
Gen.
Data
Receive
CGI out
Process starten
kostet Zeit !!
Send
Response
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5-9
3.1 Architektur
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 10
5
HTTP Server
Receive
Request
JSP Servlet
current?
Nein
Ja
Ja
JSP Servlet
loaded?
Nein
Load
Servlet
JSP Container
Page Compiler
Parse JSP
Generate JSP
Servlet Source
Compile JSP
Servlet
JSP PAGE
Servlet
Generate
Response
Send
Institut für Informatik
Response
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 11
Potential von JSP
•
•
•
•
•
HTML + Java in spez. Tag
Mischung von HTML / XML / Java-Code
Einfachheit
Trennung von Darstellung und Logik
Definition eigener Tags
Präsentation
Darstellung
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
Implementierung
Logik
www.ifi.unibas.ch/studies
5 - 12
6
Ziel: Trennung von Aufgaben
Client
Web Layer
Daten Quellen
visuell
HTML
JSP
Page
XML
JSP
Page
WML
JSP
Page
Logik
XML
Bean
Custom
Tags
DB
Aufteilen in:
•Präsentation
•Logik
•Daten
Vereinfachung:
•Scriptprogrammierung
EBean
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 13
API javax.servlet.jsp.HttpJspPage
<%@
<%@ page
page %>
%>
Direktiven
Direktiven
<%@
<%@ taglib
taglib %>
%>
<%!
<%! declaration
declaration %>
%>
JSP
JSP
Skripte
Skripte
<%@
<%@ include
include %>
%>
<%
<% scriptlet
scriptlet %>
%>
<%=
<%= expression
expression %>
%>
Aktionen
Aktionen
Institut für Informatik
Universität Basel
<jsp:useBean>
<jsp:useBean>
<jsp:include>
<jsp:include>
<jsp:fallback>
<jsp:fallback>
<jsp:setProperty>
<jsp:setProperty>
<jsp:forward>
<jsp:forward>
<jsp:plugin>
<jsp:plugin>
<jsp:getProperty>
<jsp:getProperty>
<jsp:params>
<jsp:params>
<benutzerdef.>
<benutzerdef.>
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 14
7
3.2 Syntax
„Standard“-Syntax
<% ... %>
XML-Syntax
<jsp:einJspTag>...</jsp:einJspTag>
Skripte (scripts)
/ Programmierung
Direktiven (directives)
/ Steuerung JSP Container
Aktionen (actions) / Kontrollfluss
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 15
3.2 Skripte
Deklaration: Definition Variablen, Methode für die aktuelle
Seite
<%!
Scriptlets: Blöcke von Code
<%
Expressions: Einzelne Linien von Code automatisch in
Seitenausgabe eingefügt.
<%=
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 16
8
3.2 Deklarationen
<%! privat int x=0,y=0;
privat String unit=“hallo“;%>
<%! Circle a = new Circle(2.0); %>
<jsp:declaration>
privat int x=0,y=0;
privat String unit=“hallo“;
</jsp:declaration>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 17
3.2 Lokale vs. Klassen Variablen
Lokal, einmal pro Instanz,
<%! private int z=0; %>
Klassen Variable, sichtbar in allen Instanzen
<%! static public int z=0; %>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 18
9
3.2 Ausdrücke (Expressions)
<%= numguess.getHint() %>
<jsp:expression> numguess.getHint() </jsp:expression>
• direkte Ausgabe in den Outputstream
• Stringkonvertierung über toString()oder String.valueOf()
• äquivalent zu out.print(...);
Spez. Ausdruck:
test_expr ? true_exp : false_exp
<%= (hours < 12) ? “AM“ : “PM“ %>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 19
Beispiel Script (Parameter einlesen)
<%
String name = null;
if (request.getParameter("name") == null) {
%>
<%@ include file="error.html" %>
<%
} else {
foo.setName(request.getParameter("name"));
if (foo.getName().equalsIgnoreCase("integra"))
name = "acura";
if (name.equalsIgnoreCase( "acura" )) {
%>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 20
10
3.2 Direktiven
Enthalten globale Informationen für den
Pagecompiler und auch den JSP-Container
Allgemeine Definitionen
4import Anweisungen
4Tag-Bibliotheken
4Anzeige von Fehler-Seiten
Erzeugen keine Ausgabe
Keine laufzeitrelevanten Inhalte
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 21
3.2 Direktive
Syntax1:
<%@ page attribute1=“value1” %>
Syntax2:
<jsp:directive.page attribute1=“value1” />
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 22
11
3.2 Direktive Page
<%@ page
[ language="java" ]
[ extends="package .class" ]
[ import="{package .class | package.*}, ..." ]
[ session="true|false" ]
[ buffer="none|8kb|sizekb" ]
[ autoFlush="true|false" ]
[ isThreadSafe="true|false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType="mimeType [ ;charset=characterSet ]" |
"text/html ; charset=ISO-8859-1" ]
[ isErrorPage="true|false" ]
%>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 23
Include
include.jsp:
<html>
<head><title>An Include
Test</title></head>
<body bgcolor="white">
<font color="blue">
The current date and time are
<%@ include file="date.jsp"
%>
</font>
</body>
</html>
Institut für Informatik
Universität Basel
date.jsp:
<%@ page
import="java.util.*" %>
<%= (new java.util.Date() )
.toLocaleString() %>
Displays in the page:
The current date and time are
Aug 30, 1999 2:38:40
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 24
12
3.3 Implizite Objekte
stehen in jeder JSP zur Verfügung
page (javax.servlet.jsp.HttpJspPage)
config (javax.servlet.ServletConfig)
request (javax.servlet.http.HttpRequest)
response (javax.servlet.http.HttpResponse)
out (javax.servlet.jsp.JspWriter)
session (javax.servlet.http.HttpSession)
application (javax.servlet.ServletContext)
pageContext (javax.servlet.jsp.PageContext)
exception (java.lang.Throwable)
…
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 25
Request Object
javax.servlet.http.HttpServletRequest
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 26
13
3.4 Aktionen
<jsp:forward>
<jsp:include>
<jsp:param>
Steuerung des
Kontrollfluss zwischen
den Seiten.
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
Zusammenspiel mit
Beans
<jsp:plugin>
<jsp:fallback>
Institut für Informatik
Universität Basel
Spezifikation für Applets.
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 27
Forward
Request
Original
Page
-----------------------------------------------------------
<jsp:forward page=“localURL“ />
---Request ---------------------
Forwarded
Page
Response
<jsp:forward page=‘<%= “message“ + statusCode + “.html“ %> />
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 28
14
Anwendungen forward
1.Parameterübergabe
<jsp:forward page=“localURL“>
<jsp:param name=“parameterName1“
value=“parameterValue1“ />
</jsp:forward>
2. Kontrollfluss
<% if (! Database.isAvailable()) { %>
<%-- Informieren den User zur Wartung der DB --%>
<jsp:forward page=“db-wartung.html“ />
<% } %>
<%-- Datenbank ist verfügbar --%>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 29
Include
Request
----------------------------------------------------------Response
Original
Page
Institut für Informatik
Universität Basel
<jsp:include page=“localURL“
flush=„true“/>
---Request ---------------------
Included
Page
Response
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 30
15
Action vs. Direktive
Direktive <@ include …>
Im Moment der Seitengenerierung wird der
Inhalt eingefügt.
Action <jsp:include …>
Der Request wird direkt auf die neue Seite
umgeleitet und der Response wird wieder
zurückgeleitet.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 31
Syntax von JSP 1
JSP
Element
Syntax
Interpretation
Notes
<%= expression %>
Expression is
evaluated and placed
in output.
JSP
Scriptlet
<% code %>
Code is inserted in
service method.
XML equivalent is
JSP
Declaration
Code is inserted in
body of servlet class,
outside of service
method.
XML equivalent is
<%! code %>
XML equivalent is
JSP
Expression
<jsp:expression>
expression
</jsp:expression> . Predefined variables are request , response , out ,
session , application , config , and pageContext (available in
scriptlets also).
<jsp:scriptlet> code</jsp:scriptlet>.
<jsp:declaration>
Code
</jsp:declaration>.
XML equivalent is
<jsp:directive.page att="val"\>. Legal attributes, with
JSP page
Directive
<%@ page att="val" %>
Institut für Informatik
Universität Basel
Directions to the
servlet engine about
general setup.
default values in bold, are:
•import="package.class "
•contentType=" MIME-Type "
•isThreadSafe="true|false"
•session="true|false"
•buffer=" sizekb|none"
•autoflush="true|false"
•extends=" package.class "
•info="message "
•errorPage="url"
•isErrorPage="true|false"
•language="java"
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 32
16
Syntax von JSP 2
JSP
include
Directive
<%@ include
file="url"%>
A file on the local
system to be
included when the
JSP page is
translated into a
servlet.
JSP
Comment
<%-- comment --%>
Comment; ignored
when JSP page is
translated into
servlet.
If you want a comment in the resultant HTML, use
regular HTML comment syntax of <-- comment -->.
The
jsp:include
Action
<jsp:include
page=" relative URL"
flush="true"/>
Includes a file at the
time the page is
requested.
If you want to include the file at the time the page is
translated, use the page directive with the include
attribute instead. Warning: on some servers, the
included file must be an HTML file or JSP file, as
determined by the server (usually based on the file
extension).
The
jsp:
useBean
Action
<jsp:useBean att=val*/> or
<jsp:useBean att=val*>
...
</jsp:useBean>
Find or build a Java
Bean.
Set bean properties,
either explicitly or by
designating that
value comes from a
request parameter.
The
<jsp:setProperty
jsp:
setPropert att=val*/>
Action
Institut für Informatik
Universität Basel
XML equivalent is
<jsp:directive.include
file="url"\>.
The URL must be a relative one. Use the jsp:include
action to include a file at request time instead of
translation time.
Possible attributes are:
•id="name"
•scope="page|request|session|application"
•class="package.class "
•type=" package.class "
•beanName=" package.class "
Legal attributes are
•name=" beanName"
•property=" propertyName|*"
•param="parameterName "
•value=" val"
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 33
Syntax von JSP 3
The
jsp:setPropert
y Action
The
jsp:getPropert
y Action
The
jsp:forward
Action
The
jsp:plugin
Action
<jsp:setProperty
att=val*/>
Set bean properties,
either explicitly or
by designating that
value comes from a
request parameter.
<jsp:getProperty
name="propertyName"
value="val"/>
Retrieve and output
bean properties.
<jsp:forward
page=" relative URL"/>
Forwards request
to another page.
<jsp:plugin
attribute="value"*> ...
</jsp:plugin>
Generates OBJECT
or EMBED tags, as
appropriate to the
browser type,
asking that an
applet be run using
the Java Plugin.
Institut für Informatik
Universität Basel
Legal attributes are
•name=" beanName"
•property=" propertyName|*"
•param="parameterName "
•value=" val"
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 34
17
Servlets vs. JSP
Servlets
4streng definiert
4„pure Java“
4mit viel Dokument-Quellcode oft
unübersichtlich
4100% objektorientierter Ansatz
JSP
4Schwammige Spezifikationen,
4Durchmischung zweier Technologien
4Mit viel Java-Code oft unübersichtlich
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 35
Beispiele
http://www.oreilly.com/catalog/javaserverpr/
http://www.moreservlets.com/
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 36
18
3.5 JSP & Komponenten
Java Entwickler
Daten
Präsentation
Anwendungs
Logik
Daten
Zugriff
DB
WEB Designer
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 37
Java Beans
Institut für Informatik
Universität Basel
5 - 38
19
Java Beans, (java.sun.com)
Support for introspection allowing a builder tool to analyze how a bean works.
Support for customization allowing a user to alter the appearance and behavior of a
bean.
Support for events allowing beans to fire events, and informing builder tools about
both the events they can fire and the events they can handle.
Support for properties allowing beans to be manipulated programatically, as well as
to support the customization mentioned above.
Support for persistence allowing beans that have been customized in an application
builder to have their state saved and restored. Typically persistence is used with an
application builder's save and load menu commands to restore any work that has
gone into constructing an application.
http://developer.java.sun.com/developer/onlineTraining/Beans
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 39
Hello World Bean
package jspcr;
import java.io.*;
public class helloworldbean implements Serializable {
private String message;
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
public String getCount10()
{
String s;
s="";
for (int i=0;i < 10 ; i++ ) {
s += i+" "; }
return s;
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 40
20
Hello World bean jsp
<html><head><title>helloworld</title></head><body>
<h1>Helloworld JSP</h1>
<jsp:useBean id="hello" class="jspcr.helloworldbean">
<jsp:setProperty
name="hello"
property="message"
value="Guten Tach, wie lauefts ????"/>
</jsp:useBean>
hier kommt die Meldung:<br><br>
<jsp:getProperty
name="hello"
property="message"/>
<br>und nun auf 10:<br>
<jsp:getProperty
name="hello"
property="count10"/>
<br></body></html>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 41
com.ora.jsp.beans.shopping.CatalogBean
package com.ora.jsp.beans.shopping;
import java.io.*;
import java.util.*;
public class CatalogBean implements Serializable {
private Map catalog = new HashMap();
/**
* Constructor. Creates all ProductBean objects and adds them
* to the catalog.
*/
public CatalogBean() {
ProductBean prod = new ProductBean();
prod.setId("1000");
prod.setName("JavaServer Pages");
prod.setDescr("Learn how to develop a JSP based web application.");
prod.setPrice(32.95f);
catalog.put("1000", prod);
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 42
21
com.ora.jsp.beans.shopping.CatalogBean
prod = new ProductBean();
prod.setId("2000");
prod.setName("Java Servlet Programming");
prod.setDescr("Learn how to develop a servlet based web application.");
prod.setPrice(32.95f);
catalog.put("2000", prod);
prod = new ProductBean();
prod.setId("3000");
prod.setName("Java In a Nutshell");
prod.setDescr("Learn the Java programming language.");
prod.setPrice(32.95f);
catalog.put("3000", prod);
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 43
com.ora.jsp.beans.shopping.CatalogBean
/**
* Returns all products as an Iterator, suitable for looping.
* @return an Iterator for all ProductBean instances
*/
public ProductBean[] getProductList() {
ProductBean[] products = new ProductBean[catalog.size()];
catalog.values().toArray(products);
return products;
}
/**
* Returns a Map with all ProductBean instances, keyed by ID.
* @return an Map of all ProductBean instances
*/
public Map getProductsById() {
return catalog;
}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 44
22
com.ora.jsp.beans.shopping.ProductBean
package com.ora.jsp.beans.shopping;
import java.io.*;
public class ProductBean implements Serializable {
private String id;
private String name;
private String descr;
private float price;
/**
* Returns the product id.
* @return the product id
*/
public String getId() {
return id;
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 45
com.ora.jsp.beans.shopping.ProductBean
/**
* Returns the product name.
*/
public String getName() {
return name;
}
/**
* Returns the product description.
*/
public String getDescr() {
return descr;
}
/**
* Returns the product price.
*/
public float getPrice() {
return price;
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 46
23
com.ora.jsp.beans.shopping.ProductBean
/**
* Sets the product id.
*/
void setId(String id) {
this.id = id;
}
/**
* Sets the product name.
*/
void setName(String name) {
this.name = name;
}
/**
* Sets the product description.
*/
void setDescr(String descr) {
this.descr = descr;
}
/**
* Sets the product price.
*/
void setPrice(float price) {
this.price = price;
}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 47
Webanwendung: Flugwetter
1. Aktuelle Daten
2. Web Architektur
3. Logik (Business Objekt)
4. Implementierung
•
•
Bean
Präsentation (JSP, CSS, HTML)
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 48
24
Daten aus dem WEB
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
Architektur
sendRedirect
www.ifi.unibas.ch/studies
5 - 49
SetAirportCode.jsp
style.css
portal.jsp
Cookie?
AirportSelection.html
weather
observation
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 50
25
Business Logic
Hilfsmethoden
getAirportCode()
setAirportCode(String airportCode)
getLocation()
getTemperature()
getTime()
getURL()
Institut für Informatik
Universität Basel
load(InputStream stream)
loadFromURL(URL url)
load(InputStream stream)
parseLocation(String line)
parseTime(String line)
parseTemperature
(String line)
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 51
Bean: Weather
package jspcr.beans.weather;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class Observation implements Serializable
{
private static final String BASEURL =
"http://weather.noaa.gov/weather/current";
private static final SimpleDateFormat DATEFMT =
new SimpleDateFormat("MMM dd, yyyy - hh:mm aa zzz");
private String airportCode;
private String location;
private Date time;
private Double temperature;
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 52
26
Bean Methoden
//
Bean accessor methods
public String getAirportCode()
{
return airportCode;
}
public void setAirportCode(String airportCode)
throws IOException
{
this.airportCode = airportCode;
loadFromURL(getURL());
}
public String getLocation()
{
return location;
}
protected void setLocation(String location)
{
this.location = location;
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 53
Load
public URL getURL() throws MalformedURLException
{
StringBuffer sb = new StringBuffer();
sb.append(BASEURL);
sb.append("/K");
sb.append(airportCode.toUpperCase());
sb.append(".html");
protected void load(InputStream stream) throws
IOException
{
location = null;
time = null;
temperature = null;
BufferedReader in =
new BufferedReader(
new InputStreamReader(stream));
return new URL(sb.toString());
}
for (;;) { // while(true)
String line = in.readLine();
if (line == null)
break;
protected void loadFromURL(URL url)
throws IOException
{
load(url.openStream());
}
if (location == null)
parseLocation(line);
if (time == null)
parseTime(line);
if (temperature == null)
parseTemperature(line);
}
in.close();
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 54
27
Parse Temperature
protected void parseTemperature(String line)
{
final String TOKEN1 = "(";
final String TOKEN2 = "C)";
int q = line.lastIndexOf(TOKEN2);
if (q != -1) {
int p = line.lastIndexOf(TOKEN1);
if (p != -1) {
p += TOKEN1.length();
String token = line.substring(p, q).trim();
try {
setTemperature(Double.parseDouble(token));
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 55
statische Dateien
AirportSelection.html
style.css
.whiteOnBlue, .blueOnWhite {
font-family: Verdana;
font-size: 9pt;
text-decoration: none;
}
.whiteOnBlue {
background-color: #005A9C;
color: #FFFFFF;
}
.blueOnWhite {
background-color: #FFFFFF;
color: #005A9C;
}
Institut für Informatik
Universität Basel
<HTML>
<HEAD>
<TITLE>Airport Selection</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="SetAirportCode.jsp">
Select airport:
<INPUT TYPE="SUBMIT" VALUE="Set Airport Code">
<P>
<SELECT NAME="airportCode" SIZE=10>
<OPTION VALUE="CLT">Charlotte Douglas International Airport
<OPTION VALUE="DFW">Dallas Fort Worth International Airport
<OPTION VALUE="DEN">Denver International Airport
<OPTION VALUE="JFK">Kennedy International Airport
<OPTION VALUE="LMT">Klamath Falls International Airport
<OPTION VALUE="LGA">La Guardia Airport
<OPTION VALUE="TVL">Lake Tahoe Airport
<OPTION VALUE="LAX">Los Angeles International Airport
<OPTION VALUE="EWR">Newark International Airport
<OPTION VALUE="SWF">Newburgh Stewart Airport
<OPTION VALUE="ROW">Roswell Industrial Air Center Airport
<OPTION VALUE="SAF">Santa Fe County Municpal Airport
<OPTION VALUE="SLC">Salt Lake City International Airport
<OPTION VALUE="SFO">San Francisco International Airport
<OPTION VALUE="SEA">Seattle Tacoma International Airport
<OPTION VALUE="EAT">Wenatchee Pangborn Memorial Airport
<OPTION VALUE="YKM">Yakima Air Terminal
</SELECT>
</FORM>
</BODY>
www.ifi.unibas.ch/studies
XML
(JAX)
</HTML>
5 - 56
Java Apache
Lektion 5: JSP I
28
setAirPort Code.jsp
<%@ page session="false" %>
<%
String airportCode = request.getParameter("airportCode");
if (airportCode != null) {
Cookie cookie = new Cookie("airportCode", airportCode);
final int ONE_YEAR = 60 * 60 * 24 * 365;
cookie.setMaxAge(ONE_YEAR);
response.addCookie(cookie);
}
response.sendRedirect("Portal.jsp");
%>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 57
Portal.jps
<%@ page session="false" %>
<HTML><HEAD><TITLE>LyricNote Portal</TITLE>
<LINK REL="stylesheet" HREF="style.css">
</HEAD><BODY>
<IMG SRC="images/lyric_note.png">
<HR COLOR="#000000">
<%-- Get weather cookie --%>
<%
String airportCode = "RDU";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("airportCode")) {
airportCode = cookie.getValue();
break;
}
}
}
%>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 58
29
Portal.jps (II)
<%-- Get the weather observation bean for that location --%>
<jsp:useBean id="wobs" class="jspcr.beans.weather.Observation">
<jsp:setProperty
name="wobs"
property="airportCode"
value="<%= airportCode %>"/>
</jsp:useBean>
<%-- Show weather information --%>
<SPAN CLASS="whiteOnBlue"> Weather </SPAN>
<SPAN CLASS="blueOnWhite">
<jsp:getProperty name="wobs" property="location"/>
<jsp:getProperty name="wobs" property="time"/>
<jsp:getProperty name="wobs" property="temperature"/> C°
</SPAN>
<A CLASS="whiteOnBlue" HREF="AirportSelection.html"> Select City </A>
<HR COLOR="#000000">
<%-- Show the rest of the web page --%>
</BODY>
</HTML>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 5: JSP I
www.ifi.unibas.ch/studies
5 - 59
30
Herunterladen