internet technologies1 xml messaging a powerwarning application using servlets and sax the...

30
Internet Technologies 1 Internet Technologies ML Messaging A PowerWarning application using servlets The PowerWarning Application is from “XML and Java” by Maruyama, Tamura, and Uramoto, Addison-Wesley.

Post on 19-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 1

Internet Technologies

XML Messaging

A PowerWarning application using servlets and SAX

The PowerWarning Application is from “XML and Java” by Maruyama, Tamura, and Uramoto, Addison-Wesley.

Page 2: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 2

XML Messaging Part I

The PowerWarning application allows users to registertheir geographical position and their temperature concerns.

Users will receive e-mail when the temperature exceeds the userspecified parameters.

This example is from

“XML and Java” by Maruyama, Tamura, and Uramoto, Addison-Wesley.

The web container is called Jigsaw from the W3C.

Page 3: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 3

[1] <html>[2] <head>[3] <title>Weather Report</title>[4] </head>[5] <body>[6] <h2>Weather Report -- White Plains, NY </h2>[7] <table border=1>[8] <tr><td>Date/Time</td><td align=center>11 AM EDT Sat Jul 25

1998</td></tr>[9] <tr><td>Current Tem.</td><td align=center>70&#176;</td></tr>[10] <tr><td>Today’s High</td><td align=center>82&#176;</td></tr>[11] <tr><td>Today’s Low</td><td align=center>62&#176;</td><tr>[12] </table>[13] </body>[14] </html>

Suppose that we know that the weather information is availablefrom the web at http://www.xweather.com/White_Plains_NY_US.html.

Page 4: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 4

•Strategy 1:

For the current temperature of White Plains, go to line 9,column 46 of the page and continue until reaching the nextampersand.

•Strategy 2:

For the current temperature of the White Plains, go to thefirst <table> tag, then go to the second <tr> tag within thetable, and then go to the second <tg> tag within the row.

Neither of these seems very appealing…

Page 5: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 5

<?xml version=“1.0”?>

<!DOCTYPE WeatherReport SYSTEM

“http>//www.xweather.com/WeatherReport.dtd”>

<WeatherReport>

<City>White Plains</City>

<State>NY</State>

<Date>Sat Jul 25 1998</Date>

<Time>11 AM EDT</Time>

<CurrTemp unit=“Farenheit”>70</CurrTemp>

<High unit=“Farenheit”>82</High>

<Low unit=“Farenheit”>62</Low>

</Weather Report>

XML would help

Page 6: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 6

•Strategy 3:

For the current temperature of White Plains, N.Y., go to the <CurrTemp> tag.

Page 7: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 7

XML

Mobile users

PC usersHttp://www.xweather.com

WeatherReportapplication

WML

HTML

PowerWarningapplication

Applicationprograms

XML

Email notifications

RegistrationsXML

XSLT

Page 8: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 8

The XML Describing the Weather

<?xml version="1.0" encoding="UTF-8"?><WeatherReport> <City>Pittsburgh</City> <State>PA</State> <Date>Wed. April 11, 2001</Date> <Time>3</Time> <CurrTemp Unit = "Farenheit">70</CurrTemp> <High Unit = "Farenheit">82</High> <Low Unit = "Farenheit">62</Low> </WeatherReport>

This file is behindJigsaw in the fileWww/weather/weather.xml.

Perhaps this is being served upby www.xweather.com

for ½ cents per hit.

Page 9: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 9

Serving the weather// This servlet file is stored in Www/Jigsaw/servlet/GetWeather.java// This servlet returns a user selected xml weather file from// the Www/weather directory and returns it to the client.

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

public class GetWeather extends HttpServlet {

This data would notnormally be retrievedfrom a file.

Page 10: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 10

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

String theData = ""; /* For simplicity we get the user’s request from the path. */ String extraPath = req.getPathInfo(); extraPath = extraPath.substring(1);

// read the file try { // open file and create a DataInputStream FileInputStream theFile = new FileInputStream("c:\\Jigsaw\\Jigsaw\\”+ “Jigsaw\\Www\\weather\\"+extraPath);

Page 11: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 11

InputStreamReader is = new InputStreamReader(theFile); BufferedReader br = new BufferedReader(is);

// read the file into the string theData String thisLine; while((thisLine = br.readLine()) != null) { theData += thisLine + "\n"; } } catch(Exception e) { System.err.println("Error " + e); } PrintWriter out = res.getWriter(); out.write(theData); System.out.println("Wrote document to client"); out.close(); }}

Page 12: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 12

XML

Mobile users

PC usersHttp://www.xweather.com

WeatherReportapplication

WML

HTML

PowerWarningapplication

Applicationprograms

XML

Email notifications

RegistrationsXML

XSLT

Page 13: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 13

Registrations (HTML) <!-- PowerWarningForm.html --><html><head><title>PowerWarning</title></head><body> <form method="post" action="/servlet/PowerWarn"> E-Mail <input type="text" name = "User"> <p> State <input type="text" name = "State"> <p> City <input type="text" name = "City"> <p> Temperature <input type="text" name = "Temperature"> <p> Duration <input type="text" name = "Duration"> <p> <input type = "submit"> </form></body></html>

Page 14: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 14

Registrations (Servlet)

On servlet initialization, we will start up an object whose responsibility it is to periodically wake up and tell the watcherobjects to check the weather.

The servlet will create a watcher object for each registered user. The watcher object will be told of each user’s locationand temperature requirements. Each watcher object will runin its own thread and may or may not notify its assigneduser by email.

Page 15: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 15

Registrations (Servlet)

/* This servlet is called by an HTML form. The form passes the user email, state, city, temperature and duration.*/

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

public class PowerWarn extends HttpServlet {

Page 16: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 16

static Hashtable userTable; /* Holds (email,watcher) pairs */

public void init(ServletConfig conf) throws ServletException { super.init(conf); PowerWarn.userTable = new Hashtable(); Scheduler scheduler = new Scheduler(); scheduler.start(); /* Run the scheduler */ } /* The scheduler can see the hash table. It has package access. */

Page 17: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 17

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

/* Collect data from the HTML form */

String par_user = req.getParameter("User"); String par_state = req.getParameter("State"); String par_city = req.getParameter("City"); int par_temp = Integer.parseInt( req.getParameter("Temperature")); int par_duration = Integer.parseInt( req.getParameter("Duration"));

Page 18: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 18

/* Assign a watcher to this user. */ Watcher watcher = new Watcher(par_user, par_state, par_city, par_temp, par_duration);

/* Place the (email,watcher) pair in the hash table. */ PowerWarn.userTable.put(par_user, watcher);

res.setContentType("text/html"); PrintWriter writer = res.getWriter(); writer.print("<html><head></head><body><b>” + “You'll be notified by email</b></body></html>"); writer.close(); }

}

Page 19: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 19

[email protected]

[email protected]

PowerWarn.userTable

User data

User data

User data

User data

Watcher

Watcher

Scheduler

Http Request

Http Request

Email

Email

Servlet

Page 20: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 20

The Schedulerimport java.util.Enumeration;public class Scheduler extends Thread {

public void run() { System.out.println("Running scheduler"); while(true) { Enumeration en = PowerWarn.userTable.elements(); while(en.hasMoreElements()) { Watcher wa = (Watcher)en.nextElement(); new Thread(wa).start(); }

Page 21: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 21

try { /* put this thread to sleep for 15 seconds */ Thread.sleep(1000 * 15); } catch(InterruptedException ie) { // ignore }

} /* end while */ }

public Scheduler() { super(); }}

Fifteen seconds for testing.

Page 22: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 22

The Watcher Class

The Watcher objects make HTTP requests to get XML.

SAX.

JavaMail.

How should we handle the XML? SAX or DOM?

How do we send email?

Page 23: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 23

import org.xml.sax.*;import org.xml.sax.helpers.ParserFactory;import java.io.*;import java.net.*;import org.w3c.dom.Document;

import javax.xml.parsers.SAXParserFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;

Page 24: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 24

public class Watcher extends HandlerBase implements Runnable {

String user, state, city; int temp, duration, overTemp;

public Watcher(String user, String state, String city, int temp, int duration) {

super(); this.user = user; this.state = state; this.city = city; this.temp = temp; this.duration = duration; this.overTemp = 0; }

Page 25: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 25

public void run() { // called by scheduler

System.out.println("Running watcher"); /* Set up to call the weather service. */ String weatheruri = “http://mccarthy.heinz.cmu.edu:8001/servlet/GetWeather”+ “/weather.xml";

/* For simplicity we won’t take the appropriate approach. */ /* String weatheruri = "http://mccarthy.heinz.cmu.edu:8001/servlet/GetWeather/?city=" + URLEncoder.encode(this.city); */ /* Create an InputSource object for the parser to use. */ InputSource is = new InputSource(weatheruri);

Page 26: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 26

try { /* Set up to handle incoming XML */ SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser parser = factory.newSAXParser();

parser.parse(is, this); /* The parser makes the calls. */ } catch(Exception e) { e.printStackTrace(); return; } /* The parsing and callbacks are done by this time. */

int currentTempNumber; try { currentTempNumber = Integer.parseInt(this.currentTemp.trim()); } catch( NumberFormatException e) {e.printStackTrace(); return; }

Page 27: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 27

/* See if the user wants to be alerted. */if(currentTempNumber > this.temp) { this.overTemp++; if(this.overTemp >= this.duration) { warning(); } } else { this.overTemp = 0; }}

/* Send email via JavaMail. The Mailer class is based on the JavaMail API. */public void warning() { System.out.println("Sending email"); Mailer mailman = new Mailer(this.user, "[email protected]", "It's hot"); mailman.send();}

Page 28: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 28

/* Handle SAX events. */StringBuffer buffer;String currentTemp;

public void startDocument() throws SAXException { this.currentTemp = null; }

public void startElement(String name, AttributeList aMap) throws SAXException {

if(name.equals("CurrTemp")) { /* Prepare for next event. */ this.buffer = new StringBuffer();

} }

Page 29: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 29

public void endElement(String name) throws SAXException { if(name.equals("CurrTemp")) {

this.currentTemp = this.buffer.toString(); this.buffer = null;

} }

public void characters(char[] ch, int start, int length) throws SAXException {

if(this.buffer != null) this.buffer.append(ch,start,length);

} }

Page 30: Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,

Internet Technologies 30

XML

Mobile users

PC usersHttp://www.xweather.com

WeatherReportapplication

WML

HTML

PowerWarningapplication

Applicationprograms

XML

Email notifications

RegistrationsXML