Java tutorial
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