Mega Code Archive

 
Categories / Java / JSP
 

JSP and Java beans 3

/* <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <jsp:useBean id="priceFetcher" class="com.rntsoft.StockPriceBean" /> <html> <head><title>Price Fetch</title></head> <body> <c:choose>     <c:when test="${empty param.symbol}">    <h2>Please submit a valid stock symbol</h2>    <form method="POST" action ='<c:out value="${pageContext.request.contextPath}" />/priceFetch.jsp'>    <table border="0"><tr><td valign="top">    Stock symbol: </td>  <td valign="top"><input type="text" name="symbol" size="10"></td></tr><tr><td valign="top"><input type="submit" value="Submit Info"></td></tr></table></form>    </c:when>    <c:otherwise>    <h2>Here is the latest value of <c:out value="${param.symbol}" /></h2>        <jsp:setProperty name="priceFetcher" property="symbol" value="<%= request.getParameter(\"symbol\") %>" />        <jsp:getProperty name="priceFetcher" property="latestPrice"/>    </c:otherwise>  </c:choose>  </body> </html> */ package com.rntsoft;   import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.MalformedURLException; import javax.swing.text.html.HTMLEditorKit.ParserCallback; import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.parser.ParserDelegator; public class StockPriceBean {     /**        *   The URL base for requesting a stock price; it looks like      *   "http://finance.yahoo.com/q?d=t&s="      */      private static final String urlBase =  "http://finance.yahoo.com/q?d=t&s=";          /**        *   The character stream of HTML that is parsed for the stock price       *    returned by java.net.URL.openStream()      *         *   see java.net.URL      *   @see java.io.BufferedReader      */     private BufferedReader webPageStream = null;           /**        *   The java.net.URL object that represents the stock Web page      *         */      private URL stockSite = null;          /**        *   The ParserDelegator object for which ParserDelegator.parse() is      *   called for the Web page      *      *   @see javax.swing.text.html.parser.ParserDelegator      */      private ParserDelegator htmlParser = null;          /**        *   The MyParserCallback object (inner class); this object is an      *   argument to the ParserDelegator.parse() method      *      *   @see javax.swing.text.html.HTMLEditorKit.ParserCallback      */      private MyParserCallback callback = null;     /**        *   This String holds the HTML text as the Web page is parsed.      *         *   @see MyParserCallback      */      private String htmlText = "";    private String symbol = "";      private float stockVal = 0f;   //A JavaBean has to have a no-args constructor (we explicitly show this    //constructor as a reminder; the compiler would have generated a default   //constructor with no arguments automatically   public StockPriceBean() {}      //Setter or mutator method for the stock symbol   public void setSymbol(String symbol){          this.symbol = symbol;   }       class MyParserCallback extends ParserCallback {       //bread crumbs that lead us to the stock price       private boolean lastTradeFlag = false;        private boolean boldFlag = false;        public MyParserCallback(){            //Reset the enclosing class' instance variable     if (stockVal != 0)           stockVal = 0f;         }              public void handleStartTag(javax.swing.text.html.HTML.Tag t,       MutableAttributeSet a,int pos) {                  if (lastTradeFlag && (t == javax.swing.text.html.HTML.Tag.B )){                          boldFlag = true;        }              }//handleStartTag     public void handleText(char[] data,int pos){                        htmlText  = new String(data);          //System.out.println(htmlText);                if (htmlText.indexOf("No such ticker symbol.") != -1){                         throw new IllegalStateException(       "Invalid ticker symbol in handleText() method.");                          }  else if (htmlText.equals("Last Trade:")){                                  lastTradeFlag = true;                              } else if (boldFlag){                              try{                                  stockVal = new Float(htmlText).floatValue();             } catch (NumberFormatException ne) {                                      try{                                              // tease out any commas in the number using                      //NumberFormat                                              java.text.NumberFormat nf = java.text.NumberFormat.                       getInstance();                                          Double f = (Double) nf.parse(htmlText);                                          stockVal =  (float) f.doubleValue();                                       } catch (java.text.ParseException pe){                                               throw new IllegalStateException(                 "The extracted text " + htmlText +                          " cannot be parsed as a number!");                                           }//try             }//try                          lastTradeFlag = false;             boldFlag = false;                 }//if                        } //handleText   }//MyParserCallback   public float getLatestPrice() throws IOException,MalformedURLException {       stockSite = new URL(urlBase + symbol);               webPageStream = new BufferedReader(new InputStreamReader(stockSite.        openStream()));             htmlParser = new ParserDelegator();             callback = new MyParserCallback();//ParserCallback             synchronized(htmlParser){                htmlParser.parse(webPageStream,callback,true);        }//synchronized           //reset symbol     symbol = "";      return stockVal;   }//getLatestPrice }//StockPriceBean