<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    基于EXT+XSL的的RSS訂閱系統

    Posted on 2009-01-13 22:42 Robert Su 閱讀(1831) 評論(8)  編輯  收藏
    后臺是spring + hibernate + freemarker

    這個模塊也是整個系統中的一小部門。從中對于XSL的使用,XSL很好很強。



    并且對EXT中的vtype驗證方式有了更加全面的總結。


    貼代碼:RssAction.java

    public class RssAction extends BaseActionSuport {
        private static RssService rssService;
        private Collection<Rss> rsses;
        private static final Logger logger = Logger.getLogger(RssAction.class);
        private String rssname; // RSS名稱
        private String rssurl; // RSS地址
        private String defaultUrl; // defaultUrl地址
        private String url;// URl地址
        private String rssPath;
        private Long deleteId;

        public Long getDeleteId() {
        return deleteId;
        }

        public void setDeleteId(Long deleteId) {
        this.deleteId = deleteId;
        }

        public String getRssname() {
        return rssname;
        }

        public void setRssname(String rssname) {
        this.rssname = rssname;
        }

        public String getRssurl() {
        return rssurl;
        }

        public void setRssurl(String rssurl) {
        this.rssurl = rssurl;
        }

        public String deal() {
        try {
            Rss rss = new Rss();
            logger.debug("rssname:" + rssname);
            logger.debug("rssurl:" + rssurl);
            rss.setName(rssname);
            rss.setUrl(rssurl);
            rssService.create(rss);
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        return this.SUCCESS;
        }

        public String rssDelete() {
        try {
            logger.debug("deleteId:" + deleteId);
            rssService.deleteById(deleteId);
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        return this.SUCCESS;

        }

        public String listAll() {
        try {
            rsses = rssService.listAllRss();
            return this.SUCCESS;
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        }

        public String getRss() {
        HttpURLConnection conn = null;
        InputStream ios = null;
        ByteArrayOutputStream out = null;
        ActionContext ctx = ActionContext.getContext();
        HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);

        try {

            URL addr = null;
            if (url == null || url.trim().length() == 0) {
            addr = new URL(defaultUrl);
            } else {
            addr = new URL(url);
            }
            conn = (HttpURLConnection) addr.openConnection();
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
            conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            conn.setRequestProperty("Accept-Language", "zh-cn");
            conn.setRequestProperty("Accept-Charset", "gb2312,gbk,utf-8;q=0.7,*;q=0.7");
            String contentType = conn.getContentType();
            String contentEncoding = conn.getContentEncoding();
            int statusCode = conn.getResponseCode();
            int length = conn.getContentLength();

            if (logger.isDebugEnabled()) {

            // logger.debug("contentType:" + contentType);
            // logger.debug("contentEncoding:" + contentEncoding);
            // logger.debug("statusCode:" + statusCode);
            // logger.debug("length:" + length);
            }
            if (contentEncoding == null) {
            if (contentType != null) {
                contentEncoding = getCharSet(contentType);
            }
            if (contentEncoding == null) {
                contentEncoding = "UTF-8";
            }
            else if(contentEncoding.equals("ansi"))
                contentEncoding = "GBK";
            }
            ios = conn.getInputStream();
            out = new ByteArrayOutputStream();
            
            byte buffer[] = new byte[1024];

            int len = 0;
            while ((len = ios.read(buffer)) != -1) {
            out.write(buffer, 0, len);
            }
            out.flush();
            logger.debug("contentEncoding:" + contentEncoding);
            String rssData = new String(out.toByteArray(), contentEncoding);
            //logger.debug("rssData:"+rssData);
            String rssDa = rssxsl(rssData);
            request.setAttribute("rssData", rssDa);
            request.setAttribute("Encoding", contentEncoding);
            return this.SUCCESS;
        } catch (Exception e) {
            logger.error(e.toString());
            e.printStackTrace();
            return this.ERROR;
        } finally {

            if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }
            if (ios != null) {
            try {
                ios.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }

            if (conn != null)
            conn.disconnect();

        }
        }

        public RssService getRssService() {
        return rssService;
        }

        public void setRssService(RssService rssService) {
        this.rssService = rssService;
        }

        public Collection<Rss> getRsses() {
        return rsses;
        }

        public void setRsses(Collection<Rss> rsses) {
        this.rsses = rsses;
        }

        public String getName() {
        return rssname;
        }

        public void setName(String name) {
        this.rssname = rssname;
        }

        public String getRssPath() {
        return rssPath;
        }

        public void setRssPath(String rssPath) {
        this.rssPath = rssPath;
        }

        public String getRssUrl() {
        return rssurl;
        }

        public void setRssUrl(String rssUrl) {
        this.rssurl = rssurl;
        }

        public String getUrl() {
        return url;
        }

        public void setUrl(String url) {
        this.url = url;
        }

        public String getDefaultUrl() {
        return defaultUrl;
        }

        public void setDefaultUrl(String defaultUrl) {
        this.defaultUrl = defaultUrl;
        }

        private String getCharSet(String contentTypeEnd) {
        if (contentTypeEnd != null) {

            int pointer = contentTypeEnd.indexOf('=');
            if (pointer > 0) {
            String result = contentTypeEnd.substring(pointer + 1);
            result = result.trim();
            if (result != null) {
                if (result.length() > 0) {
                if (result.charAt(0) == '"') {
                    if (result.charAt(result.length() - 1) == '"') {
                    result = result.substring(1, result.length() - 1);
                    }
                } else if (result.charAt(0) == '"'') {
                    if (result.charAt(result.length() - 1) == '"'') {
                    result = result.substring(1, result.length() - 1);
                    }
                }
                }
            }
            return result.trim().toLowerCase();
            }
        }
        return null;
        }

        private String rssxsl(String rssData) {
        String formerStr = "";
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        String path = request.getRealPath("");
        path = path + rssPath;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        XMLWriter writer = null;
        try {
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(path));
            transformer.transform(new javax.xml.transform.stream.StreamSource(new StringReader(rssData)), new javax.xml.transform.stream.StreamResult(out));
            formerStr = new String(out.toByteArray(), "UTF-8");
            formerStr = removeXmlHead(formerStr);

        } catch (Exception e) {
            logger.error(e.toString());
        } finally {
            if (writer != null) {
            try {
                writer.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }
            try {
            out.close();
            } catch (IOException e) {
            logger.error(e.toString());
            }

        }
        return formerStr;

        }

        private String removeXmlHead(String content) {
        if (content == null) {
            return null;
        }
        content = content.trim();
        if (content.indexOf("<?xml") != 0) {
            return content;
        }
        int index = content.indexOf("?>");
        if (index < 0) {
            return content;
        }
        content = content.substring(index + 2);
        return content;
        }
    }


    RssServic.java代碼

    import java.util.Collection;
    import gov.ict.mcg.vbm.pojo.Rss;

    public interface RssService {
         public void create(Rss rss) throws Exception;
         public void deleteById(Long id) throws Exception;

         public Collection<Rss> listAllRss() throws Exception;
    }

    RssServiceImp.java 代碼:

    import java.util.Collection;

    import org.apache.log4j.Logger;

    import gov.ict.mcg.vbm.dao.RssDao;
    import gov.ict.mcg.vbm.pojo.Rss;
    import gov.ict.mcg.vbm.services.RssService;

    public class RssServiceImpl extends BaseService implements RssService {

        private static final Logger logger = Logger.getLogger(RssServiceImpl.class);
        private RssDao rssDao;

        public RssDao getRssDao() {
        return rssDao;
        }

        public void setRssDao(RssDao rssDao) {
        this.rssDao = rssDao;
        }

        public void create(Rss rss) throws Exception {
        try {
            rssDao.create(rss);
        } catch (Exception e) {
            throw new Exception();
        }
        }

        public Collection<Rss> listAllRss() throws Exception {
        return rssDao.listAll();
        }

        public void deleteById(Long id) throws Exception {
        try {
            rssDao.deleteByIdCommit(id);
        } catch (Exception e) {
            throw new Exception();
        }
        }

    }

    下面是控制顯示的simple.xsl

    <xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
    version="1.0" exclude-result-prefixes="xsl ddwrt msxsl rssaggwrt"
    xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
    xmlns:rssaggwrt="http://schemas.microsoft.com/WebParts/v3/rssagg/runtime"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:rssFeed="urn:schemas-microsoft-com:sharepoint:RSSAggregatorWebPart"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:rss1="http://purl.org/rss/1.0/" xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
    xmlns:atom2="http://purl.org/atom/ns#" xmlns:ddwrt2="urn:frontpage:internal">

    <xsl:template match="/">
    <xsl:for-each select="/rss/channel/item">
    <div class="item">
     <div><h4><a href="{./link}" target="_blank"><xsl:value-of select="./title"/></a></h4></div>
     <div>
         <font style="font-weight: bold" face="Courier New" size="2" bold="true">標簽: </font><font face="Courier New" size="2">
         <xsl:value-of select="./itunes:keywords"/>     ||       
         <xsl:value-of select="./pubDate"/></font>
    </div>

     <div class="content" id="content">
     <xsl:value-of select="./description" disable-output-escaping="yes"/>
     <xsl:if test="system-property('xsl:vendor')='Transformiix'">
     <script type="text/javascript">
     var element = document.getElementById("content");
     element.innerHTML = element.textContent;
     </script>
     </xsl:if>
     </div>
    </div>
    </xsl:for-each>
    </xsl:template>

    </xsl:stylesheet>

    Feedback

    # re: 基于EXT+XSL的的RSS訂閱系統[未登錄]  回復  更多評論   

    2009-01-14 09:49 by 1
    ????什么意思

    # re: 基于EXT+XSL的的RSS訂閱系統[未登錄]  回復  更多評論   

    2009-01-14 10:58 by haha
    源代碼 在哪呢?

    # re: 基于EXT+XSL的的RSS訂閱系統  回復  更多評論   

    2009-01-14 12:12 by Robert Su
    @haha
    源代碼我過幾天有時間整理下發上來

    # re: 基于EXT+XSL的的RSS訂閱系統[未登錄]  回復  更多評論   

    2009-01-19 17:03 by moon
    請盡快發哦,急需

    # re: 基于EXT+XSL的的RSS訂閱系統  回復  更多評論   

    2009-01-19 23:52 by 墻頭草
    怎么沒有源碼................




    =================================================================
    Struts2中paramsPrepareParamsStack攔截器的PO id注入問題
    Struts2實現的6位數字的驗證碼程序
    Struts2中實現可編輯的表格
    Struts2開發環境搭建

    更多Struts

    # re: 基于EXT+XSL的的RSS訂閱系統  回復  更多評論   

    2009-02-10 12:14 by babymouse
    @moon
    已經發了

    # re: 基于EXT+XSL的的RSS訂閱系統[未登錄]  回復  更多評論   

    2009-02-18 12:47 by sking
    源碼在哪兒呢?樓主能不能發個壓縮包?非常感謝!

    # re: 基于EXT+XSL的的RSS訂閱系統  回復  更多評論   

    2009-02-19 10:33 by babymouse
    @sking

    不是已經把代碼都貼出來了么~

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 103, comments - 104, trackbacks - 0, articles - 5

    Copyright © Robert Su

    主站蜘蛛池模板: 亚洲无线一二三四区手机| 亚洲AV永久无码精品成人| 亚洲成av人片在线看片| 免费观看在线禁片| 久久国产精品亚洲综合| 免费国产成人α片| 色噜噜综合亚洲av中文无码| 一区二区三区在线免费看| 亚洲欧洲日韩国产综合在线二区| 久久久久久国产精品免费免费男同 | 一个人免费观看视频在线中文 | 曰批全过程免费视频在线观看无码| 国外亚洲成AV人片在线观看| 亚洲国产美女精品久久久久| **实干一级毛片aa免费| 91亚洲自偷在线观看国产馆| 无码人妻精品中文字幕免费东京热| 亚洲最大在线视频| 永久免费看bbb| 香港一级毛片免费看| 亚洲一级Av无码毛片久久精品| 好猛好深好爽好硬免费视频| 亚洲成熟xxxxx电影| 真人做A免费观看| MM1313亚洲国产精品| 国内精品99亚洲免费高清| 99re免费在线视频| 亚洲中文字幕无码av永久| 免费一看一级毛片人| 美女内射无套日韩免费播放| 亚洲一区二区三区在线观看网站 | 日韩免费观看一级毛片看看| 羞羞视频在线观看免费| 亚洲邪恶天堂影院在线观看| 成年女人视频网站免费m| 污污污视频在线免费观看| 国产精品国产亚洲精品看不卡| 一个人免费观看视频www| 日本特黄特色AAA大片免费| 亚洲日本在线看片| 四虎影视永久免费观看|