Mega Code Archive

 
Categories / Java / Servlets
 

Html Parse Servlet

import java.io.IOException; import java.io.PrintWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.MalformedURLException; import javax.servlet.*; import javax.servlet.http.*; import javax.swing.text.html.HTMLEditorKit.ParserCallback; import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.parser.ParserDelegator; public class HtmlParseServlet extends HttpServlet {   private static final String BASE_URL = "http://finance.yahoo.com/q?d=t&s=";   private ParserDelegator htmlParser = null;   private MyParserCallback callback = null;   private String htmlText = "";   private boolean lastTradeFlag = false;   private boolean boldFlag = false;   private float stockVal = 0f;   public void doGet(HttpServletRequest request, HttpServletResponse response)       throws ServletException, java.io.IOException {     //set the MIME type of the response, "text/html"     response.setContentType("text/html");     //use a PrintWriter send text data to the client who has requested the     // servlet     java.io.PrintWriter out = response.getWriter();     //Begin assembling the HTML content     out.println("<html><head>");     out.println("<title>Stock Price Fetcher</title></head><body>");     out.println("<h2>Please submit a new valid stock symbol</h2>");     //make sure method="post" so that the servlet service method     //calls doPost in the response to this form submit     out.println("<form method=\"post\" action =\""         + request.getContextPath() + "/stockservlet\" >");     out.println("<table border=\"0\"><tr><td valign=\"top\">");     out.println("Stock symbol: </td>  <td valign=\"top\">");     out.println("<input type=\"text\" name=\"symbol\" size=\"10\">");     out.println("</td></tr><tr><td valign=\"top\">");     out.println("<input type=\"submit\" value=\"Submit Info\"></td></tr>");     out.println("</table></form>");     out.println("</body></html>");   } //end doGet   public void doPost(HttpServletRequest request, HttpServletResponse response)       throws java.io.IOException {     String symbol;//this will hold the stock symbol     float price;     symbol = request.getParameter("symbol");     boolean isValid = (symbol == null || symbol.length() < 1) ? false         : true;     //set the MIME type of the response, "text/html"     response.setContentType("text/html");     //use a PrintWriter send text data to the client who has requested the     // servlet     java.io.PrintWriter out = response.getWriter();     //Begin assembling the HTML content     out.println("<html><head>");     out.println("<title>Latest stock value</title></head><body>");     if (!isValid) {       out           .println("<h2>Sorry, the stock symbol parameter was either empty or null</h2>");     } else {       out.println("<h2>Here is the latest value of " + symbol + "</h2>");       price = getLatestPrice(symbol);       //price < 1 ? "The symbol is probably invalid." :       out.println((price == 0 ? "The symbol is probably invalid." : ""           + price));     }     out.println("</body></html>");   }// doPost   private float getLatestPrice(String symbol) throws IOException,       MalformedURLException {     BufferedReader webPageStream = null;     URL stockSite = new URL(BASE_URL + symbol);     System.out.println(BASE_URL + symbol);     webPageStream = new BufferedReader(new InputStreamReader(stockSite         .openStream()));     htmlParser = new ParserDelegator();     callback = new MyParserCallback();     synchronized (htmlParser) {//the code is designed to make calling                    // parse() thread-safe       htmlParser.parse(webPageStream, callback, true);     }     return stockVal;   }//getLatestPrice   class MyParserCallback extends ParserCallback {     public MyParserCallback() {       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);       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!");           }         }         lastTradeFlag = false;         boldFlag = false;       }//if     } //handleText   }//MyParserCallback }//HttpServlet