首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

用js直接读取Rss资讯的两种方法

2012-11-23 
用js直接读取Rss新闻的两种方法在这里我主要是用了两种方法:第一种是直接用js来访问,这种方法的优点是简单

用js直接读取Rss新闻的两种方法

在这里我主要是用了两种方法:

第一种是直接用js来访问,这种方法的优点是简单,但缺点是不能在firefox上使用

第二种是用prototype进行实现,当然对ie和firefox就都能满足了

但不论你是用哪种方法,都会面临一个问题:

由于客户端浏览器的安全设置问题,从客户端JavaScript脚本中用XMLHttpRequest直接访问第三方的网址是被禁止的。

/** * */package com.sech.web.servlet;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import java.net.URLConnection;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;/** * * <p> * Copyright: Copyright (c) 2009 * </p> * * @author sech * * @version 1.0 */public class RssRead extends HttpServlet {/** * */private static final long serialVersionUID = 4431127246599359389L;private static int READ_BUFFER_SIZE = 1024;/** * */public RssRead() {// TODO Auto-generated constructor stub}public void init() throws ServletException {}// Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String urlString = request.getParameter("url");writeResponse(response, urlString);}private void writeResponse(HttpServletResponse response, String urlString)throws ServletException {try {URL url = new URL(urlString);URLConnection urlConnection = url.openConnection();response.setContentType(urlConnection.getContentType());InputStream ins = urlConnection.getInputStream();OutputStream outs = response.getOutputStream();byte[] buffer = new byte[READ_BUFFER_SIZE];int bytesRead = 0;while ((bytesRead = ins.read(buffer, 0, READ_BUFFER_SIZE)) != -1) {outs.write(buffer, 0, bytesRead);}outs.flush();outs.close();ins.close();} catch (Exception e) {try {response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());} catch (IOException ioe) {throw new ServletException(ioe);}}}// Process the HTTP Post requestpublic void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}// Clean up resourcespublic void destroy() {}}<servlet> <servlet-name>rssread</servlet-name> <servlet-class>com.sech.web.servlet.RssRead</servlet-class> </servlet> <servlet-mapping> <servlet-name>rssread</servlet-name> <url-pattern>/rssread</url-pattern> </servlet-mapping>这样我们就可以直接访问:http://localhost/rssread 了
function get_news(servername){var URL,i;var s_wz,e_wz,str,htmlText;htmlText = "";URL = servername+"rssread?url=http://news.sohu.com/rss/shehui.xml";var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async=false;xmlDoc.load(URL);nodes = xmlDoc.documentElement.childNodes;var ItemN = xmlDoc.getElementsByTagName("item");for(i=0;i<7;i++){TextTitle = ItemN[i].selectSingleNode("title").text;//获取title内容TextLink = ItemN[i].selectSingleNode("link").text;//获取link内容//Textdescription = ItemN[0].selectSingleNode("description").text;//s_wz = Textdescription.indexOf("src='");//e_wz = Textdescription.indexOf("'",s_wz+5);//Imgurl = Textdescription.slice(s_wz+5,e_wz);htmlText = htmlText + "<LI><a href='"+TextLink+"' target=_blank>"+TextTitle+"</a></LI>"}return htmlText;}<DIV class=textDiv id="news"><UL><script language="JavaScript"> document.writeln(sendRequest('http://localhost/')) </script> </UL></DIV>var SendRequestAjax = Class.create();SendRequestAjax.prototype ={ initialize: function(servername) { this.servername = servername; }, sendRequest:function(){ var url =this.servername+"rssread?url=http://news.sohu.com/rss/shehui.xml"; var pars = ""; var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: this.sendRequestCompleted.bind(this)});}, sendRequestCompleted:function(res){ var results= res.responseXML; var title = null; var item = null; var link = null; var htmlText=""; var items = results.getElementsByTagName("item"); for(var i = 0; i < 7; i++) { item = items[i]; link=items[i].getElementsByTagName("link")[0].firstChild.nodeValue; title = items[i].getElementsByTagName("title")[0].firstChild.nodeValue; htmlText = htmlText + "<LI><a href='"+link+"' target=_blank>"+title+"</a></LI>" } $("news").innerHTML="<UL>"+htmlText+"</UL>"; }}; function sendRequest(servername) { var oSendRequestAjax = new SendRequestAjax(servername); oSendRequestAjax.sendRequest(); } <script type="text/javascript" src="js/prototype.js"></script><DIV class=textDiv id="news"><script language="JavaScript"> (sendRequest('http://localhost/')) </script> </DIV>?OK.这样两种方法就都搞定了.

热点排行