这是源代码:import java.io.*;
import java.net.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class StockInfoProvider extends HttpServlet
{
public static final String PROXY_HOST = "proxy.jackwind.net";
public static final String PROXY_PORT = "8080";

public static final boolean VERBOSE = true;
public static final String paramExchange = "E";
public static final String paramSymbol  = "S";
public static final String paramType  = "T";
public static final String STATUS_BAD  = "0";
public static final String STATUS_GOOD  = "1"; public static final String URL_LIVE_HEADER = "http://finance.yahoo.com/d/quotes.csv?s=";
public static final String URL_LIVE_FOOTER = "&f=sl1d1t1c1ohgv&e=.csv"; public static final String URL_TABLE_HEADER = "http://table.finance.yahoo.com/table.csv?a=";
public static final String URL_TABLE_FOOTER = "&y=0&g=d&ignore=.csv"; int exchange; // From which exchange (provider) - 'E'
String symbol; // the stock symbol. - 'S' int serviceType; // 0 - Stock validation
// 1 - Stock live information
// 2-6 - Stock historical data - 'T' int status; // 0 - Error
// 1 - OK PrintWriter out; public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { // res.setContentType("text/plain");
out = res.getWriter(); // All the Get params must present! //
if( req.getParameter(paramExchange) == null ||
req.getParameter(paramSymbol) == null ||
req.getParameter(paramType) == null ) { out.print(STATUS_BAD);
return;
} try {
// Copy passed data.
exchange  = Integer.parseInt(req.getParameter(paramExchange));
symbol  = req.getParameter(paramSymbol);
serviceType = Integer.parseInt(req.getParameter(paramType));
}catch(Exception e) { out.print(STATUS_BAD);
return;
}

System.out.println("Setting system property ...");
   System.setProperty("http.proxyHost", PROXY_HOST);
   System.setProperty("http.proxyPort", PROXY_PORT); if(serviceType == 0) { // Validation
if(validate()) {
out.print(STATUS_GOOD);
}else{
out.print(STATUS_BAD);
}
}else if(serviceType == 1) { // Live data
out.print(STATUS_GOOD);
getLive();
}else{
out.print(STATUS_GOOD + "*");
getHistorical();
}
} /**
 * retrive historical data.
 */
public void getHistorical() {
String dateString = null;
int year = 0;
int month = 0;
int date = 0;
int highPrice = 0;
int lowPrice = 0;
int volume = 0;
        String URL_TABLE="";
/// Smart cache.
String  lastMonthString = "";
int lastMonth = 0;
Calendar calendar = Calendar.getInstance();
int c = calendar.get(Calendar.YEAR);
int a = calendar.get(Calendar.MONTH);
        int b = calendar.get(Calendar.DAY_OF_MONTH);
        switch(serviceType)
        {
case(2):
   calendar.add(calendar.MONTH, -1);
   c = calendar.get(Calendar.YEAR);
   a = calendar.get(Calendar.MONTH);
   b = calendar.get(Calendar.DAY_OF_MONTH);
   break;
case(3):
   calendar.add(calendar.MONTH, -3);
   c = calendar.get(Calendar.YEAR);
   a = calendar.get(Calendar.MONTH);
   b = calendar.get(Calendar.DAY_OF_MONTH);
   break;
case(4):
   calendar.add(calendar.MONTH, -6);
   c = calendar.get(Calendar.YEAR);
   a = calendar.get(Calendar.MONTH);
   b = calendar.get(Calendar.DAY_OF_MONTH);
   break;
case(5):
   calendar.add(calendar.YEAR, -1);
   c = calendar.get(Calendar.YEAR);
   a = calendar.get(Calendar.MONTH);
   b = calendar.get(Calendar.DAY_OF_MONTH);
   break; default: return;
}        URL_TABLE = URL_TABLE_HEADER + (a+1)+"&b="+b+"&c="+c+"&s="+symbol+URL_TABLE_FOOTER;
        try {
URL url = new URL(URL_TABLE); /// DEBUG
//out.println(URL_TABLE); InputStream is = url.openStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); in.readLine(); // Skip the title line. String data = null;
data = in.readLine(); // Process line by line;
while(data != null && data.length() > 0) {
StringTokenizer st = new StringTokenizer(data, ",");
dateString = st.nextToken(); StringTokenizer dateSt = new StringTokenizer(dateString, "-");
date = Integer.parseInt(dateSt.nextToken()); String monthString = dateSt.nextToken();
if(monthString.equals(lastMonthString)) {
month = lastMonth;
}else if(monthString.equals("Jan")) {
month = 1;
}else if(monthString.equals("Feb")) {
month = 2;
}else if(monthString.equals("Mar")) {
month = 3;
}else if(monthString.equals("Apr")) {
month = 4;
}else if(monthString.equals("May")) {
month = 5;
}else if(monthString.equals("Jun")) {
month = 6;
}else if(monthString.equals("Jul")) {
month = 7;
}else if(monthString.equals("Aug")) {
month = 8;
}else if(monthString.equals("Sep")) {
month = 9;
}else if(monthString.equals("Oct")) {
month = 10;
}else if(monthString.equals("Nov")) {
month = 11;
}else if(monthString.equals("Dec")) {
month = 12;
} if(month != lastMonth) {
lastMonth = month;
lastMonthString = monthString;
} year = Integer.parseInt(dateSt.nextToken()); st.nextToken(); // Open highPrice = (int) (Float.parseFloat(st.nextToken()) * 1000);
lowPrice  = (int) (Float.parseFloat(st.nextToken()) * 1000); st.nextToken(); // Close volume = Integer.parseInt(st.nextToken()); out.print(year + "-" + month + "-" + date + " " +
highPrice + " " + lowPrice + " " + volume + "*"); // Read next line
data = in.readLine(); } // End while loop. }catch (Exception e) {
if(VERBOSE)
out.println(e.toString());
} } // END OF METHOD
/**
 * retrieve stock live info.
 * Note: All price has been amplified by 1000
 */
public void getLive() {
int lastPrice  = 0;
int changePrice = 0;
int openPrice = 0;
int highPrice  = 0;
int lowPrice = 0;
int volume = 0; try {
URL url = new URL(URL_LIVE_HEADER + symbol + URL_LIVE_FOOTER);
InputStream is = url.openStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is));
String data = in.readLine();
data = data.replace('"', ',');
StringTokenizer st = new StringTokenizer(data, ","); // Skipping
st.nextToken(); // Symbol lastPrice = (int) (Float.parseFloat(st.nextToken()) * 1000); st.nextToken(); // Date
st.nextToken(); // Time changePrice = (int) (Float.parseFloat(st.nextToken()) * 1000);
openPrice = (int) (Float.parseFloat(st.nextToken()) * 1000);
highPrice = (int) (Float.parseFloat(st.nextToken()) * 1000);
lowPrice = (int) (Float.parseFloat(st.nextToken()) * 1000);
volume  = Integer.parseInt(st.nextToken()); }catch(Exception e) {
if(VERBOSE)
out.println(e.toString());
} out.print("*" + lastPrice);
out.print("*" + changePrice);
out.print("*" + openPrice);
out.print("*" + highPrice);
out.print("*" + lowPrice);
out.print("*" + volume + "*");
} /**
 * stock validation.
 */
public boolean validate() {
try {
URL url = new URL(URL_LIVE_HEADER + symbol + URL_LIVE_FOOTER);
InputStream is = url.openStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is));
String data = in.readLine();
data = data.replace('"', ',');
StringTokenizer st = new StringTokenizer(data, ","); if(symbol.equals(st.nextToken()) )
return true; }catch(Exception e) {
if(VERBOSE)
out.println(e.toString());
return false; } return false;
}
} // End of class def.

解决方案 »

  1.   

    我的访问路径是:
    http://127.0.0.1/examples/servlet/yahooProvider?E=0&S=IBM.N&T=1
    错误提示是:
    1*java.net.UnknownHostException: table.finance.yahoo.com我删除了
    URL url = new URL(URL_LIVE_HEADER + symbol + URL_LIVE_FOOTER);
    InputStream is = url.openStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is));
    能正常运行,不出错,我想是不是环境变量设置的有问题啊,我才学习这个
    Java,有点晕。