Ajax - 基础教程第八章例子学习四
来源:互联网 发布:安知玉如意男主 编辑:程序博客网 时间:2024/06/05 17:31
股票行情版块
作者是从 http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx 这里获取服务的,像天气预报版块,我们要用WSDL2Java这个工具从http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx?WSDL这里获得服务的Java类.
在eclipse中,点击项目-》右击-》运行方式-》运行-》弹出运行对话框
在对话框中,1.在左边的框中 点击java应用程序-》新建
2.在右边的框中 如果新建成功,主要-》main类是空的,先选中下面的“搜身main类是包括库”
点击搜索WSDL2Java
或者直接填 org.apache.axis.wsdl.WSDL2Java
3. 在右边的框中,点击(x=)自变量-》程序自变量 里面填下面的内容:
-o ./WEB-INF/src
-Nurn:StockQuotes ajaxdashboard.ws.stockquote
http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx?WSDL
这里说明下 -o 输出文件所在目录(“. ” -代表当前目录 )
-Nurn:命名空间 包名(这个我试了没用) wsdl
其实上面的过程就是java org.apache.axis.wsdl.WSDL2Java -o ./WEB-INF/src -Nurn:StockQuotes ajaxdashboard.ws.stockquote http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx?WSDL
查下你的WEB-INF/src是不是有个com.swanandmokashi包,包里面有8个java类,注意是8个哦
ArrayOfQuote.java
GetQuotes.java
GetQuotesResponse.java
Quote.java
StockQuotes.java
StockQuotesLocator.java
StockQuotesSoap.java
StockQuotesSoapStub.java
把包名改成ajaxdashboard.ws.stockquote就行了。
一。stockQuote.jsp页面
代码清单8-12 stockQuote.jsp
<div id="stockQuoteRoot" style="left:100px; top:200px;">
<div id="stockQuoteHandle">
<table width="100%" border="0" class="textbox">
<tr>
<td align="left" class="controls">
Stock Ticker
</td>
<td align="right">
<a class="controls" href="javascript:minimize('stockQuoteContent');">
-
</a>
<a class="controls" href="javascript:maximize('stockQuoteContent');">
+
</a>
</td>
</tr>
</table>
</div>
<div class="normalText">
Stock Tickers to Track:
<input type="text" name="stockTickers" id="stockTickers"
onkeyup="handleStockTickersChange();" class="normalText"
value="<%=ajaxdashboard.Constants.DEFAULT_STOCK_TICKERS%>"
style="text-transform:uppercase;"/>
<input type="checkbox" name="trackFlag" id="trackFlag" value="on"
onclick="handleTrackFlagClick();"
checked="checked"/>
Auto Refresh
</div>
<div id="stockQuoteContent" class="stockQuoteContent">
<%@include file="stockQuoteDetail.jsp"%>
<%--
<span id="stockQuoteDetail">
<%@include file="stockQuoteDetail.jsp"%>
</span>
--%>
</div>
</div>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
此tag是 jstl1.1的核心tag
<div id="stockQuoteRoot" style="left:100px; top:200px;">
<div id="stockQuoteHandle">
这个页面中,最外层的是id为stockQuoteRoot的DIV,stockQuoteRoot里面有鼠标拖动id为stockQuoteHandle的DIV,一个包含输入框跟选择框的DIV,最下面是显示股票行情的DIV。
ajaxDashboard.js中实现鼠标拖动的函数是
//stock quotes
initDomDrag("stockQuoteHandle", "stockQuoteRoot");
启动ajax服务的是
updateStockQuote();
startUpdateStockQuoteInterval();//这个是设置循环定时器
<div class="normalText">
Stock Tickers to Track:
<input type="text" name="stockTickers" id="stockTickers"
onkeyup="handleStockTickersChange();" class="normalText"
value="<%=ajaxdashboard.Constants.DEFAULT_STOCK_TICKERS%>"
style="text-transform:uppercase;"/>
<input type="checkbox" name="trackFlag" id="trackFlag" value="on"
onclick="handleTrackFlagClick();"
checked="checked"/>
Auto Refresh
</div>
这里面输入框的默认值是<%=ajaxdashboard.Constants.DEFAULT_STOCK_TICKERS%>,由于DEFAULT_STOCK_TICKERS是一个static的变量,所以可以直接引用,源代码中的默认值中的3个股票就剩一个还有资料而已了,所以我把默认值改为了" MSFT YHOO GE ",这也是官方推荐用的默认值。、
整个页面:
stockQuoteRootDIV{
stockQuoteHandleDIV{
table{
tr{Stock Ticker -+}
}
}
DIV{
Stock Tickers to Track: 输入框 check box
}
stockQuoteContentDIV{
股票行情内容
}
}
二。 在股票行情主页面中,include了一个页面,这是个显示具体股票行情的页面,看下它的代码清单吧
代码清单8-13 stockQuoteDetail.jsp
<c:forEach var="quote" items="${quotesArray}">
<table>
<tbody>
<tr>
<td colspan="2" style="font-weight:bold;">
${quote.companyName} (${quote.stockTicker})
</td>
</tr>
<tr>
<td>Current Price:</td>
<td>${quote.stockQuote}</td>
</tr>
<tr>
<td>Change:</td>
<td>${quote.change}</td>
</tr>
<tr>
<td>Last Updated:</td>
<td>${quote.lastUpdated}</td>
</tr>
</tbody>
</table>
</c:forEach>
通过前面的3篇,应该都这个不陌生了吧,其中${quotesArray}是在UpdateStockQuoteServlet.java中request.setAttribute("quotesArray", quotesArray);传进来的,quotesArray是一个类Quote.java对象数组。
三。整个版块的工作过程
1. 加载页面时,ajaxDashboard.js运行函数updateStockQuote();(这个是我自己添加的),这个函数是在stockQuote.js中定义的,
function updateStockQuote() {
var ajaxRequest = new AjaxRequest("UpdateStockQuote");
ajaxRequest.addFormElementsById("stockTickers");
ajaxRequest.sendRequest();
}
启动一个ajax请求,使用的servlet是UpdateStockQuote,传递的参数的是stockTickers(输入框的id)。
然后ajaxDashboard.js运行函数startUpdateStockQuoteInterval();,这个函数是在stockQuote.js中定义的,
var stockTickerUpdateIntervalID = 0;
function startUpdateStockQuoteInterval() {
stockTickerUpdateIntervalID = window.setInterval("updateStockQuote()", 90000);
}
作用是启动一个90秒的循环定时器,每90秒运行updateStockQuote方法。
2. UpdateStockQuoteServlet.java
在web.xml中添加
<servlet-name>UpdateStockQuoteServlet</servlet-name>
<servlet-class>ajaxdashboard.servlet.UpdateStockQuoteServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpdateStockQuoteServlet</servlet-name>
<url-pattern>/UpdateStockQuote</url-pattern>
</servlet-mapping>
代码清单9-14 UpdateStockQuoteServlet.java
import ajaxdashboard.service.StockQuoteService;
import ajaxdashboard.ws.stockquote.GetQuotesResponse;
import ajaxdashboard.ws.stockquote.Quote;
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
public class UpdateStockQuoteServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
String stockTickers = request.getParameter("stockTickers").toUpperCase();
GetQuotesResponse quotesResponse =
new StockQuoteService().getStockQuotesFor(stockTickers);
Quote[] quotesArray = quotesResponse.getGetQuotesResult().getQuote();
request.setAttribute("quotesArray", quotesArray);
System.out.println(" **** Stock quotes updated at: "
+ new Date().toString());
request.getRequestDispatcher("/stockQuote/stockQuoteAjax.jsp")
.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
代码清单8-15 StockQuoteService.java
import ajaxdashboard.ws.stockquote.GetQuotes;
import ajaxdashboard.ws.stockquote.GetQuotesResponse;
import ajaxdashboard.ws.stockquote.Quote;
import ajaxdashboard.ws.stockquote.StockQuotesLocator;
import ajaxdashboard.ws.stockquote.StockQuotesSoap;
import javax.xml.rpc.ServiceException;
public class StockQuoteService {
public GetQuotesResponse getStockQuotesFor(String ticker) {
GetQuotes quotes = new GetQuotes(ticker);
GetQuotesResponse quotesResponse = null;
try {
quotesResponse = getStockQuotesSoap().getStockQuotes(quotes);
} catch(java.rmi.RemoteException ex) {
// TODO handle remote exception
}
Quote[] quotesArray = quotesResponse.getGetQuotesResult().getQuote();
Quote quote = null;
for(int i = 0; i < quotesArray.length; i++) {
quote = quotesArray[i];
// System.out.println("Quote for: " + quote.getCompanyName()
// + " (" + quote.getStockTicker()+ ")"
// + " Quote:" + quote.getStockQuote()
// + " LastUpdate:" + quote.getLastUpdated()
// + " Change:" + quote.getChange());
}
return quotesResponse;
}
private StockQuotesSoap getStockQuotesSoap() {
StockQuotesSoap stockQuotesSoap = null;
try {
stockQuotesSoap = new StockQuotesLocator().getStockQuotesSoap();
} catch (ServiceException ex) {
ex.printStackTrace();
}
return stockQuotesSoap;
}
}
首先在StockQuoteService中,GetQuotes.java,GetQuotesReponse.java,在天气预报那个WSDL中,生成的类只有6个,但在这个版块中,生成的类有8个,其他的基本一样,但多了上面这两个类,通过GetQuotes取得股票对象,在通过StockQuotesSoap的方法取得GetQuotesReponse对象,在GetQuotesReponse对象中,保存了Quote对象的数组集了,而这个数组集包括了我们想要得到的数据了。
3. 再来看看使用了taconite框架的页面
代码清单8-16 stockQuoteAjax.jsp
<%@ taglib uri="http://taconite.sf.net/tags" prefix="tac" %>
<tac:taconiteRoot>
<tac:replaceChildren contextNodeID="stockQuoteContent" parseOnServer="true">
<%@include file="stockQuoteDetail.jsp"%>
</tac:replaceChildren>
</tac:taconiteRoot>
contextNodeID=" stockQuoteContent" 这个id为stockQuoteContent的DIV在stockQuote.jsp页面的最下面。
替换的内容是stockQuoteDetail.jsp,这是显示股票行情的具体内容的页面。
下一部分新闻搜索版块的说明
http://blog.csdn.net/lin49940/archive/2007/09/11/1780994.aspx
- Ajax - 基础教程第八章例子学习四
- Ajax - 基础教程第八章例子学习一
- Ajax - 基础教程第八章例子学习二
- Ajax - 基础教程第八章例子学习三
- Ajax - 基础教程第八章例子学习五
- jQuery基础教程第八章学习
- 《Objective-C基础教程》学习笔记第八章
- 《Ajax基础教程》学习笔记---第2章
- 学习《Ajax基础教程》点滴
- Python基础教程第八章学习笔记——异常
- Ajax基础教程整理,学习笔记
- JS中ajax学习基础教程
- 学习java基础教程收获四
- python基础教程学习笔记四
- Access基础教程--第八章 使用VBA编程
- jquery基础教程的第八章-购物che
- Objective-C基础教程(第一版)-学习笔记第八章Foundation Kit快速教程
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- Dealing with Adversity
- Ajax open 用法
- 爱情中的四个精致和残忍
- 为树节点(TreeNode)添加右键菜单
- 使用模板实现多态性
- Ajax - 基础教程第八章例子学习四
- 奔向成功的十个好习惯--希望能成为自己的警钟!
- 游戏中 ----三维空间中的 向量
- 网站验证码的技术原理和实例解析
- 有关UNICODE、ANSI字符集和相关字符串操作的总结!
- DWR变量未定义错误
- vc++中各种字符串的表示法
- C# 语法学习笔记
- PHP分页类,拿别人的加了一个小功能