Servlets Java

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("");
    out.println("Stock Price Fetcher");
    out.println("

Please submit a new valid stock symbol

");
    //make sure method="post" so that the servlet service method
    //calls doPost in the response to this form submit
    out.println("        + request.getContextPath() + "/stockservlet\" >");
    out.println("");
    out.println("Stock symbol:   ");
    out.println("");
    out.println("");
    out.println("");
    out.println("");
    out.println("");
  } //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("");
    out.println("Latest stock value");
    if (!isValid) {
      out
          .println("

Sorry, the stock symbol parameter was either empty or null

");
    } else {
      out.println("

Here is the latest value of " + symbol + "

");
      price = getLatestPrice(symbol);
      //price < 1 ? "The symbol is probably invalid." :
      out.println((price == 0 ? "The symbol is probably invalid." : ""
          + price));
    }
    out.println("");
  }// 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