Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,"— Presentation transcript:

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

2 Internet Technologies2 XML Messaging Part I The PowerWarning application allows users to register their geographical position and their temperature concerns. Users will receive e-mail when the temperature exceeds the user specified parameters. This example is from “XML and Java” by Maruyama, Tamura, and Uramoto, Addison-Wesley. The web container is called Jigsaw from the W3C.

3 Internet Technologies3 [1] [2] [3] Weather Report [4] [5] [6] Weather Report -- White Plains, NY [7] [8] Date/Time 11 AM EDT Sat Jul 25 1998 [9] Current Tem. 70° [10] Today’s High 82° [11] Today’s Low 62° [12] [13] [14] Suppose that we know that the weather information is available from the web at http://www.xweather.com/White_Plains_NY_US.html.

4 Internet Technologies4 Strategy 1: For the current temperature of White Plains, go to line 9, column 46 of the page and continue until reaching the next ampersand. Strategy 2: For the current temperature of the White Plains, go to the first tag, then go to the second tag within the table, and then go to the second tag within the row. Neither of these seems very appealing…

5 Internet Technologies5 <!DOCTYPE WeatherReport SYSTEM “http>//www.xweather.com/WeatherReport.dtd”> White Plains NY Sat Jul 25 1998 11 AM EDT 70 82 62 XML would help

6 Internet Technologies6 Strategy 3: For the current temperature of White Plains, N.Y., go to the tag.

7 Internet Technologies7 XML Mobile users PC users Http://www.xweather.com WeatherReport application WML HTML PowerWarning application Application programs XML Email notifications Registrations XML XSLT

8 Internet Technologies8 The XML Describing the Weather Pittsburgh PA Wed. April 11, 2001 3 70 82 62 This file is behind Jigsaw in the file Www/weather/ weather.xml. Perhaps this is being served up by www.xweather.com www.xweather.com for ½ cents per hit.

9 Internet Technologies9 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 not normally be retrieved from a file.

10 Internet Technologies10 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);

11 Internet Technologies11 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(); }

12 Internet Technologies12 XML Mobile users PC users Http://www.xweather.com WeatherReport application WML HTML PowerWarning application Application programs XML Email notifications Registrations XML XSLT

13 Internet Technologies13 Registrations (HTML) PowerWarning E-Mail State City Temperature Duration

14 Internet Technologies14 Registrations (Servlet) On servlet initialization, we will start up an object whose responsibility it is to periodically wake up and tell the watcher objects 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 location and temperature requirements. Each watcher object will run in its own thread and may or may not notify its assigned user by email.

15 Internet Technologies15 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 {

16 Internet Technologies16 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. */

17 Internet Technologies17 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"));

18 Internet Technologies18 /* 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(" ” + “You'll be notified by email "); writer.close(); }

19 Internet Technologies19 mm6@andrew.cmu.edu w@whitehouse.gov PowerWarn.userTable User data Watcher Scheduler Http Request Email Servlet

20 Internet Technologies20 The Scheduler import 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(); }

21 Internet Technologies21 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.

22 Internet Technologies22 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?

23 Internet Technologies23 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;

24 Internet Technologies24 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; }

25 Internet Technologies25 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”+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);

26 Internet Technologies26 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; }

27 Internet Technologies27 /* 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, "mm6@andrew.cmu.edu", "It's hot"); mailman.send(); }

28 Internet Technologies28 /* 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(); }

29 Internet Technologies29 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); } }

30 Internet Technologies30 XML Mobile users PC users Http://www.xweather.com WeatherReport application WML HTML PowerWarning application Application programs XML Email notifications Registrations XML


Download ppt "Internet Technologies1 XML Messaging A PowerWarning application using servlets and SAX The PowerWarning Application is from “XML and Java” by Maruyama,"

Similar presentations


Ads by Google