实现rss

阅读更多
一:什么是RSS
 RSS(really simple syndication) :网页内容聚合器。RSS的格式是XML。必须符合XML 1.0规范。
 RSS的作用:订阅BLOG,订阅新闻
二:RSS的历史版本:
  http://blogs.law.harvard.edu/tech/rssVersionHistory
 RSS的版本有很多个,0.90、0.91、0.92、0.93、0.94、1.0 和 2.0。与RSS相对的还有ATOM。
 国内主要是RSS2.0,国外主要用ATOM0.3.
 由于RSS出现2派,导致混乱场面。其中RSS2.0规范由哈佛大学定义并锁定。
 地址:http://blogs.law.harvard.edu/tech/rss
三:RSS 文件形式
    1:例子:
 
 
   
    The channel's name goes here
    http://www.urlofthechannel.com/
    This channel is an example channel for an article.
   

    en-us
   
      The image title goes here
      http://www.urlofthechannel.com/images/logo.gif
      http://www.urlofthechannel.com/
   
   
      The Future of content
      http://www.itworld.com/nl/ecom_in_act/11122003/
      The issue of people distributing and reusing
      digital media is a problem for many businesses. It may also be
      a hidden opportunity. Just as open source licensing has opened
      up new possibilities in the world of technology, it promises to do
      the same in the area of creative content.

   

   
      Online Music Services - Better than free?
      http://www.itworld.com/nl/ecom_in_act/08202003/
      More people than ever are downloading music from
      the Internet. Many use person-to-person file sharing programs like
      Kazaa to share and download music in MP3 format, paying nothing.
      This has made it difficult for companies to setup online music
      businesses. How can companies compete against free?

   

 

 

    2:RSS文件由一个 元素及其子元素组成。除了频道内容本身之外,
 还以项的形式包含表示频道元数据的元素 —— 比如 、<link> 和 <description>。 <br> 项通常是频道的主要部分,包含经常变化的内容。 <br>    3:频道(channel)用<channel>表示 <br> 频道一般有三个元素,提供关于频道本身的信息: <br> <title>:频道或提要的名称。 <br> <link>:与该频道关联的 Web 站点或者站点区域的 URL。 <br> <description>:简要介绍该频道是做什么的。 <br> 许多频道子元素都是可选的。常用的 <image> 元素包含三个必需的子元素: <br> <url>:表示该频道的 GIF、JPEG 或 PNG 图像的 URL。 <br> <title>:图象的描述。当频道以 HTML 呈现时,用作 HTML <image> 标签的 ALT 属性。 <br> <link>:站点的 URL。如果频道以 HTML 呈现,该图像作为到这个站点的链接。 <br> <image> 还有三个可选的子元素: <br> <width>:数字,表示图象的像素宽度,最大值是 188,默认值为 88。 <br> <height>:数字,表示图象的像素高度。最大值是 400,默认值为 31。 <br> <description>:包含文本,在呈现时可以作为围绕着该图像形成的链接元素的 title 属性。 <br> 此外还可以使用许多其他可选的频道元素。多数都是不言自明的: <br> <language>:en-us <br> <copyright>:Copyright 2003, James Lewin <br> <managingEditor>: dan@spam_me.com (Dan Deletekey) <br> <webMaster>: dan@spam_me.com (Dan Deletekey) <br> <pubDate>:Sat, 15 Nov 2003 0:00:01 GMT <br> <lastBuildDate>:Sat, 15 Nov 2003 0:00:01 GMT <br> <category>:ebusiness <br> <generator>:Your CMS 2.0 <br> <docs>: http://blogs.law.harvard.edu/tech/rss <br> <cloud>:允许进程注册为“cloud”,频道更新时通知它,为 RSS 提要实现了一种轻量级的发布-订阅协议。 <br> <ttl>:存活时间 是一个数字,表示提要在刷新之前缓冲的分钟数。 <br> <rating>:关于该频道的 PICS 评价。 <br> <textInput>:定义可与频道一起显示的输入框。 <br> <skipHours>:告诉聚集器哪些小时的更新可以忽略。 <br> <skipDays>:告诉聚集器那一天的更新可以忽略。 <br>    4:摘要(feed)用<item>表示,<item>的格式如下: <br> 每个摘要通常包含三个元素: <br> <title>:这是项的名称,在标准应用中被转换成 HTML 中的标题。 <br> <link>:这是该项的 URL。title 通常作为一个链接,指向包含在 <link> 元素中的 URL。 <br> <description>:通常作为 link 中所指向的 URL 的摘要或者补充。 <br> 所有的元素都是可选的,但是一个项至少要么 包含一个 <title>,要么包含一个 <description>。 <br> 项还有其他一些可选的元素: <br> <author>:作者的 e-mail 地址。 <br> <category>:支持有组织的记录。 <br> <comments>:关于项的注释页的 URL。 <br> <enclosure>:支持和该项有关的媒体对象。 <br> <guid>:唯一与该项联系在一起的永久性链接。 <br> <pubDate>:该项是什么时候发布的。 <br> <source>:该项来自哪个 RSS 频道,当 <br>四:主流java rss lib及其评测: <br> 主要有一下几种: <br>    1:Rome: http://wiki.java.net/bin/view/Javawsxml/Rome <br> Rome是 java.net 上的一个开源项目,现在的版本是0.5。为什么叫Rome呢,按它的介绍上的说法,有个“条条大路通罗马”的意思,有些RSS的意味。Rome可能是 sun 公司从自己某个子项目中抽离出来的,package和类的命名就象j2sdk一样感觉规范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS类似的一种内容聚合的方式)。Rome 本身是提供API和功能实现. <br>    2:rssutils: http://gceclub.sun.com.cn/staticcontent/html/2004-04-22/rss.html <br> rssutils是一个工具包,sun 的 develope站点上有文章 RSS Utilities: A Tutorial 专门介绍用taglib 显示RSS内容,附带的可以下载这个工具包,但我从网上搜索不到它的出处,自然也无法看到它的源码。但从反编译的代码来看,也是sun公司内部高手所做,设计精巧,代码简练。实现一个handler,用sax的方式解析xml内容,handler内部用反射和javabean的机制构造RSS元素对象并赋值。 <br>    3:rsslib4j: http://sourceforge.net/projects/rsslib4j <br> rsslib4j 是 sourceforget 上的项目,同样支持所有RSS版本。 <br>    4:rsslibj:http://enigmastation.com/rsslibj/ <br>    5:总结 <br> Rome: <br> 优 - 1)可扩展性好,有前途。2)功能强大,除了用来解析RSS,还可以聚合和构造RSS。 <br> 劣 - 1)兼容性待加强,2)绑定jdom。 <br> rssutils: <br> 优 - 1)代码设计精妙,值得学习。2)附带 taglib 实现,直接可在 jsp 中应用。 <br> 劣 - 1)没有源码。 2)兼容性有待加强。 3)功能较弱,只能用来解析RSS,没有聚合和构造RSS功能。 <br> rsslib4j: <br> 优 - 1)简单有效,体积小。2)兼容性不错。 <br> 劣 - 1)有小bug。2)功能较弱,只能用来解析RSS,没有聚合和构造RSS功能。 <br> rsslibj: <br> 优 - 1)简单有效,体积小,才25K。2)能解析和生成RSS(动态和静态) <br> 劣 - 1)有小bug。2)版本很久没有更新了,陈旧. </div> <div> 五:选择ROME作为RSS实现工具 <br> 在官网 http://wiki.java.net/bin/view/Javawsxml/Rome下载rome-0.8.jar, <br> rome用到了jdom1.0,下载地址:http://www.jdom.org <br> rome支持:rss_0.9 <br>   rss_0.91 <br>   rss_0.92 <br>   rss_0.93 <br>   rss_0.94 <br>   rss_1.0 <br>   rss_2.0 <br>   atom_0.3 <br>   atom_1.0 <br> 生成RSS类新需要在程序中指定,如:rss_2.0 <br>六:包结构 <br> com.sun.syndication.feed 提供RSS and Atom beans的父类 <br> com.sun.syndication.feed.atom 提供实现Atom feeds核心元素的beans <br> com.sun.syndication.feed.module 提供处理聚合modules的beans <br> com.sun.syndication.feed.rss 提供实现Rss feeds核心元素的beans <br> com.sun.syndication.feed.synd 我们主要用的就是这个包,SyndFeed and SyndEntryImpl <br> com.sun.syndication.io  提供对读取和分析feeds的输入和输出 <br>七:实例: </div> <div> 1:读取远端url的rss,然后输出到控制台: <br>/** <br> * 关键代码: <br> * SyndFeedInput input = new SyndFeedInput(); <br> * SyndFeed feed = input.build(new XmlReader(feedUrl)); <br> */ </div> <div> package com.sun.syndication.samples; </div> <div> import com.sun.syndication.feed.synd.SyndFeed; <br>import com.sun.syndication.io.SyndFeedInput; <br>import com.sun.syndication.io.XmlReader; <br>import java.net.URL; </div> <div> /** <br> * It Reads and prints any RSS/Atom feed type. <br> */ <br>public class FeedReader { </div> <div>     public static void main(String[] args) { <br>        boolean ok = false; <br>        if (args.length==0) { <br>            try { <br>                URL feedUrl = new URL(" http://seu.org.cn/bbs/rss.php"); <br>  //SyndFeedInput:从远程读到xml结构的内容转成SyndFeedImpl实例 <br>                SyndFeedInput input = new SyndFeedInput(); <br>  //rome按SyndFeed类型生成rss和atom的实例, <br>  //SyndFeed是rss和atom实现类SyndFeedImpl的接口 <br>                SyndFeed feed = input.build(new XmlReader(feedUrl)); <br>  //打印到控制台 <br>                System.out.println(feed); <br>                ok = true; <br>            } <br>            catch (Exception ex) { <br>                ex.printStackTrace(); <br>                System.out.println("ERROR: "+ex.getMessage()); <br>            } <br>        } </div> <div>         if (!ok) { <br>            System.out.println(); <br>            System.out.println("FeedReader reads and prints any RSS/Atom feed type."); <br>            System.out.println("The first parameter must be the URL of the feed to read."); <br>            System.out.println(); <br>        } <br>    } <br>} <br>2:将多个远程RSS在本地聚集成一个RSS <br>package com.sun.syndication.samples; </div> <div> import java.net.URL; <br>import java.io.InputStreamReader; <br>import java.io.PrintWriter; <br>import java.util.List; <br>import java.util.ArrayList; </div> <div> import com.sun.syndication.feed.synd.SyndFeed; <br>import com.sun.syndication.feed.synd.SyndFeedImpl; <br>import com.sun.syndication.io.SyndFeedOutput; <br>import com.sun.syndication.io.SyndFeedInput; <br>import com.sun.syndication.io.XmlReader; </div> <div> /** <br> * It aggregates a list of RSS/Atom feeds (they can be of different types) <br> * into a single feed of the specified type. <br> * <p> <br> * @author Alejandro Abdelnur <br> * <br> */ <br>public class FeedAggregator { </div> <div>     public static void main(String[] args) { <br>        boolean ok = false; <br>        if (args.length>=2) { <br>            try { <br>                String outputType = args[0]; </div> <div>                 SyndFeed feed = new SyndFeedImpl(); <br>                feed.setFeedType(outputType); </div> <div>                 feed.setTitle("Aggregated Feed"); <br>                feed.setDescription("Anonymous Aggregated Feed"); <br>                feed.setAuthor("anonymous"); <br>                feed.setLink(" http://www.anonymous.com"); </div> <div>                 List entries = new ArrayList(); <br>                feed.setEntries(entries); </div> <div>                 for (int i=1;i<args.length;i++) { <br>                    URL inputUrl = new URL(args[i]); </div> <div>                     SyndFeedInput input = new SyndFeedInput(); <br>                    SyndFeed inFeed = input.build(new XmlReader(inputUrl)); </div> <div>                     entries.addAll(inFeed.getEntries()); </div> <div>                 } </div> <div>                 SyndFeedOutput output = new SyndFeedOutput(); <br>                output.output(feed,new PrintWriter(System.out)); </div> <div>                 ok = true; <br>            } <br>            catch (Exception ex) { <br>                System.out.println("ERROR: "+ex.getMessage()); <br>            } <br>        } </div> <div>         if (!ok) { <br>            System.out.println(); <br>            System.out.println("FeedAggregator aggregates different feeds into a single one."); <br>            System.out.println("The first parameter must be the feed type for the aggregated feed."); <br>            System.out.println(" [valid values are: rss_0.9, rss_0.91U, rss_0.91N, rss_0.92, rss_0.93, ]"); <br>            System.out.println(" [                  rss_0.94, rss_1.0, rss_2.0 & atom_0.3  ]"); <br>            System.out.println("The second to last parameters are the URLs of feeds to aggregate."); <br>            System.out.println(); <br>        } <br>    } </div> <div> } <br>3:将动态生成的RSS存盘,形成静态RSS <br>package com.sun.syndication.samples; </div> <div> import com.sun.syndication.feed.synd.*; <br>import com.sun.syndication.io.SyndFeedOutput; </div> <div> import java.io.FileWriter; <br>import java.io.Writer; <br>import java.text.DateFormat; <br>import java.text.SimpleDateFormat; <br>import java.util.ArrayList; <br>import java.util.List; </div> <div> /** <br> * It creates a feed and writes it to a file. <br> * <p> <br> * @author Alejandro Abdelnur <br> * <br> */ <br>public class FeedWriter { </div> <div>     private static final String DATE_FORMAT = "yyyy-MM-dd"; </div> <div>     public static void main(String[] args) { <br>        boolean ok = false; <br>        if (args.length==0) { <br>            try { <br>                String feedType = "rss_2.0";//指定rss类型 <br>                String fileName = "F:\\ss.xml";//静态rss存放目录 </div> <div>                 DateFormat dateParser = new SimpleDateFormat(DATE_FORMAT); </div> <div>   //feed是通过SyndFeedImpl的实例  <br>                SyndFeed feed = new SyndFeedImpl(); <br>                feed.setFeedType(feedType); </div> <div>                 feed.setTitle("Sample Feed (created with Rome)"); <br>                feed.setLink(" http://rome.dev.java.net"); <br>                feed.setDescription("This feed has been created using Rome (Java syndication utilities"); <br>   <br>  //entries就是item集合 <br>                List entries = new ArrayList(); <br>  //一个entry就是一个item <br>                SyndEntry entry; <br>                SyndContent description; <br>   <br>  //第一个item <br>                entry = new SyndEntryImpl(); <br>                entry.setTitle("Rome v1.0"); <br>                entry.setLink(" http://wiki.java.net/bin/view/Javawsxml/Rome01"); <br>                entry.setPublishedDate(dateParser.parse("2004-06-08")); <br>                description = new SyndContentImpl(); <br>                description.setType("text/plain"); <br>                description.setValue("Initial release of Rome"); <br>                entry.setDescription(description); <br>                entries.add(entry); </div> <div>   //第二个item <br>                entry = new SyndEntryImpl(); <br>                entry.setTitle("Rome v2.0"); <br>                entry.setLink(" http://wiki.java.net/bin/view/Javawsxml/Rome02"); <br>                entry.setPublishedDate(dateParser.parse("2004-06-16")); <br>                description = new SyndContentImpl(); <br>                description.setType("text/xml"); <br>                description.setValue("Bug fixes, <xml>XML</xml> minor API changes and some new features"); <br>                entry.setDescription(description); <br>                entries.add(entry); </div> <div>   //第三个item <br>                entry = new SyndEntryImpl(); <br>                entry.setTitle("Rome v3.0"); <br>                entry.setLink(" http://wiki.java.net/bin/view/Javawsxml/Rome03"); <br>                entry.setPublishedDate(dateParser.parse("2004-07-27")); <br>                description = new SyndContentImpl(); <br>                description.setType("text/html"); <br>                description.setValue("<p>More Bug fixes, mor API changes, some new features and some Unit testing</p>"+ <br>                                     "<p>For details check the <a href=\" http://wiki.java.net/bin/view/Javawsxml/RomeChangesLog#RomeV03\">Changes Log</a></p>"); <br>                entry.setDescription(description); <br>   <br>  //将所有item存入entries <br>                entries.add(entry); <br>   <br>  //将entries加入channel <br>                feed.setEntries(entries); </div> <div>                 Writer writer = new FileWriter(fileName); <br>                SyndFeedOutput output = new SyndFeedOutput(); <br>  //存盘,形成静态rss <br>                output.output(feed,writer); <br>                writer.close(); <br>                </div> <div>                 System.out.println("The feed has been written to the file ["+fileName+"]"); <br>                System.out.println(feed); </div> <div>                 ok = true; <br>            } <br>            catch (Exception ex) { <br>                ex.printStackTrace(); <br>                System.out.println("ERROR: "+ex.getMessage()); <br>            } <br>        } </div> <div>         if (!ok) { <br>            System.out.println(); <br>            System.out.println("FeedWriter creates a RSS/Atom feed and writes it to a file."); <br>            System.out.println("The first parameter must be the syndication format for the feed"); <br>            System.out.println("  (rss_0.90, rss_0.91, rss_0.92, rss_0.93, rss_0.94, rss_1.0 rss_2.0 or atom_0.3)"); <br>            System.out.println("The second parameter must be the file name for the feed"); <br>            System.out.println(); <br>        } <br>    } </div> <div> } </div> <div> 4:动态生成rss,给一个blog站点动态生成rss <br>package com.vaga.rss.web.admin; </div> <div> import java.io.IOException; <br>import java.text.DateFormat; <br>import java.text.ParseException; <br>import java.text.SimpleDateFormat; <br>import java.util.ArrayList; <br>import java.util.Iterator; <br>import java.util.List; </div> <div> import javax.servlet.http.HttpServletRequest; <br>import javax.servlet.http.HttpServletResponse; </div> <div> import org.springframework.web.servlet.ModelAndView; <br>import org.springframework.web.servlet.mvc.ParameterizableViewController; </div> <div> import com.sun.syndication.feed.synd.SyndContent; <br>import com.sun.syndication.feed.synd.SyndContentImpl; <br>import com.sun.syndication.feed.synd.SyndEntry; <br>import com.sun.syndication.feed.synd.SyndEntryImpl; <br>import com.sun.syndication.feed.synd.SyndFeed; <br>import com.sun.syndication.feed.synd.SyndFeedImpl; <br>import com.sun.syndication.io.FeedException; <br>import com.sun.syndication.io.SyndFeedOutput; <br>import com.sun.syndication.feed.synd.SyndContent; <br>import com.sun.syndication.feed.synd.SyndEntry; <br>import com.totsp.xml.syndication.content.ContentModule; <br>import com.vaga.blog.model.WeblogEntry; <br>import com.vaga.blog.model.Website; <br>import com.vaga.blog.service.WeblogEntryManager; <br>import com.vaga.blog.service.WebsiteManager; </div> <div> public class SiteRssViewController  extends ParameterizableViewController { <br> // Constants <br>  /** Namespace URI for content:encoded elements */ <br>   private static final String CONTENT_NS =" http://purl.org/rss/1.0/modules/content/"; <br>   private static final String FEED_TYPE = "type"; <br>   private static final String MIME_TYPE = "application/xml; charset=UTF-8"; <br>   private static final String COULD_NOT_GENERATE_FEED_ERROR = "Could not generate feed"; <br>   private static final String _defaultFeedType="rss_2.0"; <br>   private static final String DATE_FORMAT = "yyyy-MM-dd"; <br>   //controller starts <br>   private WeblogEntryManager weblogEntryManager;//spring依赖注入 <br>   private WebsiteManager websiteManager; //spring依赖注入 <br> //spring依赖注入 <br>   public void setWeblogEntryManager(WeblogEntryManager weblogEntryManager) { <br>  this.weblogEntryManager = weblogEntryManager; <br>   } <br> //spring依赖注入 <br>   public void setWebsiteManager(WebsiteManager websiteManager) { <br>  this.websiteManager = websiteManager; <br>   } <br>  <br> protected ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception { <br> try { <br>           SyndFeed feed = getFeed(request); <br>           String feedType = request.getParameter(FEED_TYPE);//null <br>           feedType = (feedType!=null) ? feedType : _defaultFeedType; <br>           feed.setFeedType(feedType);//rss_2.0 <br>           response.setContentType(MIME_TYPE); <br>           SyndFeedOutput output = new SyndFeedOutput(); <br>           output.output(feed,response.getWriter());//向发出请求的用户输出该RSS(xml格式) <br>       } <br>       catch (FeedException ex) { <br>           String msg = COULD_NOT_GENERATE_FEED_ERROR; <br>           log(msg,ex); <br>           response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,msg); <br>       } <br>  return null; <br> } <br>  </div> <div>     /** <br>    * 请求的类型如下: <br>    * siteRss.htm?websiteId=21   |ID=66的个人站点最新20条文章 <br>    * siteRss.htm?websiteId=21&entryType=hot |ID=66的个人站点最热20条文章 <br>    * <br>    * @param request <br>    */ <br>    protected SyndFeed getFeed(HttpServletRequest request) throws IOException,FeedException { <br>       DateFormat dateParser = new SimpleDateFormat(DATE_FORMAT); <br>       //feed就是channel <br>       SyndFeed feed = new SyndFeedImpl(); <br>       //item集合 <br>       List entries = new ArrayList(); <br>       //一个entry就是代表一个item <br>       SyndEntry entry; <br>       SyndContent description; <br>       setFeed(request,feed); <br>       Iterator iterator = setIterator(request); <br>  //将文章的20记录转成20个item <br>           while(iterator.hasNext()){ <br>            entry = new SyndEntryImpl(); <br>            WeblogEntry weblogEntry = (WeblogEntry)iterator.next(); <br>            entry.setTitle(weblogEntry.getTitle()); <br>            entry.setLink(feed.getLink()+"?weblogEntryId="+weblogEntry.getId()); <br>            try { <br>             entry.setPublishedDate(dateParser.parse(weblogEntry.getPubTime().toString())); <br>            } <br>            catch (ParseException ex) { <br>             ex.printStackTrace(); <br>            } <br>            //该item的description <br>            description = new SyndContentImpl(); <br>            description.setType("text/plain"); <br>            String text=null; <br>            if(weblogEntry.getText().length()>500){ <br>             text = weblogEntry.getText().substring(0, 500); <br>            }else{ <br>             text = weblogEntry.getText(); <br>            } <br>            description.setValue(text); <br>            entry.setDescription(description); <br>            addFooter(entry); <br>            entries.add(entry); <br>           } </div> <div>        <br>       //将所有的item存入channel <br>       feed.setEntries(entries); <br>       return feed; <br>   } <br> private SyndFeed setFeed(HttpServletRequest request,SyndFeed feed){ <br>    //blog中的website   <br>    Website website = websiteManager.getWebsite(request.getParameter("websiteId")); <br>    设置当前website的channel属性 <br>    feed.setTitle(website.getName()); <br>    feed.setAuthor(website.getCreator()); <br>    feed.setCopyright(website.getEmailAddress()); <br>    feed.setLink(" http://wxz.vaga.com.cn:8080/blog/weblog/"+website.getHandle()); <br>    feed.setDescription(website.getDescription()); <br>       return feed;   <br> } </div> <div>  //从数据库中获得20条该website的文章 <br> private Iterator setIterator(HttpServletRequest request){ <br>  if(request.getParameter("entryType")==null){ <br>   return weblogEntryManager.getRecentWeblogEntriesForRss(request.getParameter("websiteId"), null, "PUBLISHED", 21).iterator(); <br>  }else{ <br>   return weblogEntryManager.getHotWeblogEntriesForRss(request.getParameter("websiteId"), null, 21).iterator(); <br>  } <br> } </div> <div> <br>    /** <br>     * Add footer to an entry.给每个文章摘要添加页脚 <br>     * @param entry <br>     */ <br>    public static void addFooter(SyndEntry entry) <br>    { <br>        // Prep variables used in loops <br>        String title = entry.getTitle(); <br>        String link = entry.getLink(); </div> <div>         // Use the add-on ContentModule to handle <br>        // <content:encoded/> elments within the feed <br>        ContentModule module =((ContentModule) entry.getModule(CONTENT_NS)); </div> <div>         // If content:encoded is found, use that. <br>        if(module!=null) <br>        { <br>            // Container for footer-appended HTML strings <br>            List newStringList = new ArrayList(); </div> <div>             // Iterate through encoded HTML, creating footers <br>            Iterator oldStringIter =module.getEncodeds().iterator(); <br>            while (oldStringIter.hasNext()) <br>            { <br>                String original = (String) oldStringIter.next(); <br>                newStringList.add(createFooter(original,link, title)); <br>            } </div> <div>             // Set new encoded HTML strings on entry <br>            module.setEncodeds(newStringList); <br>        } <br>        else <br>        { <br>            // Fall back to adding footer in <description/> <br>            // This results in escaped HTML.  Ugly, but common. <br>         //Target the description node <br>         SyndContent content = entry.getDescription(); <br>            // Create and set a footer-appended description <br>            String original = content.getValue(); <br>            content.setValue(createFooter(original,link, title)); <br>            <br>        } <br>    } </div> <div>     /** <br>     * Create a feed item footer of immediate actions <br>     * by using information from the feed item itself <br>     * @param original  The original text of the feed item <br>     * @param link      The link for the feed item <br>     * @param title     The title of the feed item <br>     * @return <br>     */ <br>    private static String createFooter(String original, String link,String title) <br>    {  <br>     // Use StringBuffer to create a sb <br>     StringBuffer sb; <br>     if(original==null){ <br>      sb=new StringBuffer("<br />"); <br>     }else{ <br>      sb= new StringBuffer(original); <br>     }               <br>        sb.append("\n\n<div class='feedwarmer'><hr/>"); <br>        sb.append("<i>相关操作:</i> "); </div> <div>         // Add email link using title and item link <br>        sb.append("<a href='mailto:?body=Check this out: "); <br>        sb.append(link).append("'>推荐该链接</a> | "); </div> <div>         // Add delicious link using item title link <br>        sb.append("<a href='http://del.icio.us/post/?url="); <br>        sb.append(link).append("&title=").append(title); <br>        sb.append("'>添加到delicious</a> | "); </div> <div>         // Add Google Blogs Search link using item title <br>        sb.append("<a href='http://blogsearch.google.com/"); <br>        sb.append("blogsearch?hl=en&q=").append(title); <br>        sb.append("'>搜索相关内容</a>"); </div> <div>         // Finish and return the sb <br>        sb.append("</div>\n"); <br>        return sb.toString(); <br>    } <br>} </div>  <br> <br> <p></p> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1177084106777899008"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(SUN,Spring,XML,.net,Servlet)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835508131489214464.htm" title="高级编程--XML+socket练习题" target="_blank">高级编程--XML+socket练习题</a> <span class="text-muted">masa010</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.北京华北2114.8万人上海华东2,500万人广州华南1292.68万人成都华西1417万人(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socketTCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socketTCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j</div> </li> <li><a href="/article/1835504217729626112.htm" title="Python教程:一文了解使用Python处理XPath" target="_blank">Python教程:一文了解使用Python处理XPath</a> <span class="text-muted">旦莫</span> <a class="tag" taget="_blank" href="/search/Python%E8%BF%9B%E9%98%B6/1.htm">Python进阶</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代</div> </li> <li><a href="/article/1835503965563875328.htm" title="python os.environ_python os.environ 读取和设置环境变量" target="_blank">python os.environ_python os.environ 读取和设置环境变量</a> <span class="text-muted">weixin_39605414</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/os.environ/1.htm">os.environ</a> <div>>>>importos>>>os.environ.keys()['LC_NUMERIC','GOPATH','GOROOT','GOBIN','LESSOPEN','SSH_CLIENT','LOGNAME','USER','HOME','LC_PAPER','PATH','DISPLAY','LANG','TERM','SHELL','J2REDIR','LC_MONETARY','QT_QPA</div> </li> <li><a href="/article/1835499052125483008.htm" title="Git常用命令-修改远程仓库地址" target="_blank">Git常用命令-修改远程仓库地址</a> <span class="text-muted">猿大师</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>查看远程仓库地址gitremote-v返回结果originhttps://git.coding.net/*****.git(fetch)originhttps://git.coding.net/*****.git(push)修改远程仓库地址gitremoteset-urloriginhttps://git.coding.net/*****.git先删除后增加远程仓库地址gitremotermori</div> </li> <li><a href="/article/1835494762388484096.htm" title="【目标检测数据集】卡车数据集1073张VOC+YOLO格式" target="_blank">【目标检测数据集】卡车数据集1073张VOC+YOLO格式</a> <span class="text-muted">熬夜写代码的平头哥∰</span> <a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1073标注数量(xml文件个数):1073标注数量(txt文件个数):1073标注类别数:1标注类别名称:["truck"]每个类别标注的框数:truck框数=1120总框数:1120使用标注工具:labelImg标注</div> </li> <li><a href="/article/1835492742713667584.htm" title="钢筋长度超限检测检数据集VOC+YOLO格式215张1类别" target="_blank">钢筋长度超限检测检数据集VOC+YOLO格式215张1类别</a> <span class="text-muted">futureflsl</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):215标注数量(xml文件个数):215标注数量(txt文件个数):215标注类别数:1标注类别名称:["iron"]每个类别标注的框数:iron框数=215总框数:215使用标注工具:labelImg标注规则:对类别进</div> </li> <li><a href="/article/1835486185015832576.htm" title="【无标题】达瓦达瓦" target="_blank">【无标题】达瓦达瓦</a> <span class="text-muted">JhonKI</span> <a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a> <div>博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️‍111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️‍111❤️111111111111111总结11</div> </li> <li><a href="/article/1835486185468817408.htm" title="上图为是否色发" target="_blank">上图为是否色发</a> <span class="text-muted">JhonKI</span> <a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a> <div>博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️‍111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️‍111❤️111111111111111总结11</div> </li> <li><a href="/article/1835483159140069376.htm" title="143234234123432" target="_blank">143234234123432</a> <span class="text-muted">JhonKI</span> <a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a> <div>博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️‍111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️‍111❤️111111111111111总结11</div> </li> <li><a href="/article/1835479758033481728.htm" title="SpringBlade dict-biz/list 接口 SQL 注入漏洞" target="_blank">SpringBlade dict-biz/list 接口 SQL 注入漏洞</a> <span class="text-muted">文章永久免费只为良心</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>SpringBladedict-biz/list接口SQL注入漏洞POC:构造请求包查看返回包你的网址/api/blade-system/dict-biz/list?updatexml(1,concat(0x7e,md5(1),0x7e),1)=1漏洞概述在SpringBlade框架中,如果dict-biz/list接口的后台处理逻辑没有正确地对用户输入进行过滤或参数化查询(PreparedSta</div> </li> <li><a href="/article/1835477362700021760.htm" title="Python中深拷贝与浅拷贝的区别" target="_blank">Python中深拷贝与浅拷贝的区别</a> <span class="text-muted">yuxiaoyu.</span> <div>转自:http://blog.csdn.net/u014745194/article/details/70271868定义:在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复</div> </li> <li><a href="/article/1835471059135066112.htm" title="你可能遗漏的一些C#/.NET/.NET Core知识点" target="_blank">你可能遗漏的一些C#/.NET/.NET Core知识点</a> <span class="text-muted">追逐时光者</span> <a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/.NET/1.htm">.NET</a><a class="tag" taget="_blank" href="/search/DotNetGuide%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8D%97/1.htm">DotNetGuide编程指南</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/.netcore/1.htm">.netcore</a><a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a> <div>前言在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NETCore拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。拾遗补漏GitHub开源地址https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/D</div> </li> <li><a href="/article/1835461728423473152.htm" title="第1步win10宿主机与虚拟机通过NAT共享上网互通" target="_blank">第1步win10宿主机与虚拟机通过NAT共享上网互通</a> <span class="text-muted">学习3人组</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS要实现宿主机与虚拟机通信,原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址,实现可以互通。1、查看虚拟机的IP地址2、编辑虚拟机的虚拟网络的NAT和DHCP的配置,设置虚拟机的网卡选择NAT共享模式3、宿主机的IP配置,确保vnet8的IPV4属性与虚拟机在同一网段4、ping测试连通性[root@localh</div> </li> <li><a href="/article/1835458199755517952.htm" title="spring如何整合druid连接池?" target="_blank">spring如何整合druid连接池?</a> <span class="text-muted">惜.己</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/junit/1.htm">junit</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/idea/1.htm">idea</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>目录spring整合druid连接池1.新建maven项目2.新建mavenModule3.导入相关依赖4.配置log4j2.xml5.配置druid.xml1)xml中如何引入properties2)下面是配置文件6.准备jdbc.propertiesJDBC配置项解释7.配置druid8.测试spring整合druid连接池1.新建maven项目打开IDE(比如IntelliJIDEA,Ecl</div> </li> <li><a href="/article/1835449364223455232.htm" title="SpringCloudAlibaba—Sentinel(限流)" target="_blank">SpringCloudAlibaba—Sentinel(限流)</a> <span class="text-muted">菜鸟爪哇</span> <div>前言:自己在学习过程的记录,借鉴别人文章,记录自己实现的步骤。借鉴文章:https://blog.csdn.net/u014494148/article/details/105484410Sentinel介绍Sentinel诞生于阿里巴巴,其主要目标是流量控制和服务熔断。Sentinel是通过限制并发线程的数量(即信号隔离)来减少不稳定资源的影响,而不是使用线程池,省去了线程切换的性能开销。当资源</div> </li> <li><a href="/article/1835448366310453248.htm" title="光盘文件系统 (iso9660) 格式解析" target="_blank">光盘文件系统 (iso9660) 格式解析</a> <span class="text-muted">穷人小水滴</span> <a class="tag" taget="_blank" href="/search/%E5%85%89%E7%9B%98/1.htm">光盘</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/1.htm">文件系统</a><a class="tag" taget="_blank" href="/search/iso9660/1.htm">iso9660</a><a class="tag" taget="_blank" href="/search/deno/1.htm">deno</a><a class="tag" taget="_blank" href="/search/GNU%2FLinux/1.htm">GNU/Linux</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>越简单的系统,越可靠,越不容易出问题.光盘文件系统(iso9660)十分简单,只需不到200行代码,即可实现定位读取其中的文件.参考资料:https://wiki.osdev.org/ISO_9660相关文章:《光盘防水嘛?DVD+R刻录光盘泡水实验》https://blog.csdn.net/secext2022/article/details/140583910《光驱的内部结构及日常使用》ht</div> </li> <li><a href="/article/1835448238103162880.htm" title="springboot+vue项目实战一-创建SpringBoot简单项目" target="_blank">springboot+vue项目实战一-创建SpringBoot简单项目</a> <span class="text-muted">苹果酱0567</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一</div> </li> <li><a href="/article/1835448239185293312.htm" title="科幻游戏 《外卖员模拟器》 主要地理环境设定 (1)" target="_blank">科幻游戏 《外卖员模拟器》 主要地理环境设定 (1)</a> <span class="text-muted">穷人小水滴</span> <a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E5%B9%BB/1.htm">科幻</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1/1.htm">设计</a> <div>游戏名称:《外卖员模拟器》(英文名称:waimai_se)作者:穷人小水滴本故事纯属虚构,如有雷同实属巧合.故事发生在一个(架空)平行宇宙的地球,21世纪(超低空科幻流派).相关文章:https://blog.csdn.net/secext2022/article/details/141790630目录1星球整体地理设定2巨蛇国主要设定3海蛇市主要设定3.1主要地标建筑3.2交通3.3能源(电力)</div> </li> <li><a href="/article/1835448111909138432.htm" title="react-intl——react国际化使用方案" target="_blank">react-intl——react国际化使用方案</a> <span class="text-muted">苹果酱0567</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>国际化介绍i18n:internationalization国家化简称,首字母+首尾字母间隔的字母个数+尾字母,类似的还有k8s(Kubernetes)React-intl是React中最受欢迎的库。使用步骤安装#usenpmnpminstallreact-intl-D#useyarn项目入口文件配置//index.tsximportReactfrom"react";importReactDOMf</div> </li> <li><a href="/article/1835447985601867776.htm" title="Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net" target="_blank">Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net</a> <span class="text-muted">佛一脚</span> <a class="tag" taget="_blank" href="/search/error/1.htm">error</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>背景每天都能遇到奇怪的问题,做个记录,以便有缘人能得到帮助!换了一台电脑开发nextjs程序。需要连接mongodb数据,对数据进行增删改查。上一台电脑好好的程序,新电脑死活连不上mongodb数据库。同一套代码,没任何修改,搞得我怀疑人生了,打开浏览器进入mongodb官网毫无问题,也能进入线上系统查看数据,网络应该是没问题。于是我尝试了一下手机热点,这次代码能正常跑起来,连接数据库了!!!是不</div> </li> <li><a href="/article/1835447606348705792.htm" title="C++ lambda闭包消除类成员变量" target="_blank">C++ lambda闭包消除类成员变量</a> <span class="text-muted">barbyQAQ</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>原文链接:https://blog.csdn.net/qq_51470638/article/details/142151502一、背景在面向对象编程时,常常要添加类成员变量。然而类成员一旦多了之后,也会带来干扰。拿到一个类,一看成员变量好几十个,就问你怕不怕?二、解决思路可以借助函数式编程思想,来消除一些不必要的类成员变量。三、实例举个例子:classClassA{public:...intfu</div> </li> <li><a href="/article/1835446723661623296.htm" title="tiff批量转png" target="_blank">tiff批量转png</a> <span class="text-muted">诺有缸的高飞鸟</span> <a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a> <div>目录写在前面代码完写在前面1、本文内容tiff批量转png2、平台/环境opencv,python3、转载请注明出处:https://blog.csdn.net/qq_41102371/article/details/132975023代码importnumpyasnpimportcv2importosdeffindAllFile(base):file_list=[]forroot,ds,fsin</div> </li> <li><a href="/article/1835443822654484480.htm" title="遥感影像的切片处理" target="_blank">遥感影像的切片处理</a> <span class="text-muted">sand&wich</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a> <div>在遥感影像分析中,经常需要将大尺寸的影像切分成小片段,以便于进行详细的分析和处理。这种方法特别适用于机器学习和图像处理任务,如对象检测、图像分类等。以下是如何使用Python和OpenCV库来实现这一过程,同时确保每个影像片段保留正确的地理信息。准备环境首先,确保安装了必要的Python库,包括numpy、opencv-python和xml.etree.ElementTree。这些库将用于图像处理</div> </li> <li><a href="/article/1835443696431099904.htm" title="笋丁网页自动回复机器人V3.0.0免授权版源码" target="_blank">笋丁网页自动回复机器人V3.0.0免授权版源码</a> <span class="text-muted">希希分享</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E5%B8%8C%E7%BD%9158soho_cn/1.htm">软希网58soho_cn</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%B5%84%E6%BA%90/1.htm">源码资源</a><a class="tag" taget="_blank" href="/search/%E7%AC%8B%E4%B8%81%E7%BD%91%E9%A1%B5%E8%87%AA%E5%8A%A8%E5%9B%9E%E5%A4%8D%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">笋丁网页自动回复机器人</a> <div>笋丁网页机器人一款可设置自动回复,默认消息,调用自定义api接口的网页机器人。此程序后端语言使用Golang,内存占用最高不超过30MB,1H1G服务器流畅运行。仅支持Linux服务器部署,不支持虚拟主机,请悉知!使用自定义api功能需要有一定的建站基础。源码下载:https://download.csdn.net/download/m0_66047725/89754250更多资源下载:关注我。安</div> </li> <li><a href="/article/1835443569968640000.htm" title="Spring MVC 全面指南:从入门到精通的详细解析" target="_blank">Spring MVC 全面指南:从入门到精通的详细解析</a> <span class="text-muted">一杯梅子酱</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%A0%88%E5%AD%A6%E4%B9%A0/1.htm">技术栈学习</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>引言:SpringMVC,作为Spring框架的一个重要模块,为构建Web应用提供了强大的功能和灵活性。无论是初学者还是有一定经验的开发者,掌握SpringMVC都将显著提升你的Web开发技能。本文旨在为初学者提供一个全面且易于理解的学习路径,通过详细的知识点分析和实际案例,帮助你快速上手SpringMVC,让学习过程既深刻又高效。一、SpringMVC简介1.1什么是SpringMVC?Spri</div> </li> <li><a href="/article/1835438028768768000.htm" title="Spring Boot中实现跨域请求" target="_blank">Spring Boot中实现跨域请求</a> <span class="text-muted">BABA8891</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在SpringBoot中实现跨域请求(CORS,Cross-OriginResourceSharing)可以通过多种方式,以下是几种常见的方法:1.使用@CrossOrigin注解在SpringBoot中,你可以在控制器或者具体的请求处理方法上使用@CrossOrigin注解来允许跨域请求。在控制器上应用:importorg.springframework.web.bind.annotation.</div> </li> <li><a href="/article/1835437775344726016.htm" title="博客网站制作教程" target="_blank">博客网站制作教程</a> <span class="text-muted">2401_85194651</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java</div> </li> <li><a href="/article/1835431853746647040.htm" title="【树一线性代数】005入门" target="_blank">【树一线性代数】005入门</a> <span class="text-muted">Owlet_woodBird</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>Index本文稍后补全,推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/141874376分析实现总结本文稍后补全,推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/141874376已知非空二叉树T的结点值均为正整数,采用顺序存储方式保存,数据结构定义如下:t</div> </li> <li><a href="/article/1835428695603507200.htm" title="RabbitMQ生产者重复机制与确认机制" target="_blank">RabbitMQ生产者重复机制与确认机制</a> <span class="text-muted">java炒饭小能手</span> <a class="tag" taget="_blank" href="/search/java-rabbitmq/1.htm">java-rabbitmq</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>重复机制生产者发送消息时,出现了网络故障,导致与MQ的连接中断。为了解决这个问题,SpringAMQP提供的消息发送时的重试机制。即:当RabbitTemplate与MQ连接超时后,多次重试。需要修该发送端模块的application.yaml文件,添加下面的内容:spring:rabbitmq:connection-timeout:1s#设置MQ的连接超时时间template:retry:ena</div> </li> <li><a href="/article/1835420248896008192.htm" title="使用由 Python 编写的 lxml 实现高性能 XML 解析" target="_blank">使用由 Python 编写的 lxml 实现高性能 XML 解析</a> <span class="text-muted">hunyxv</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>转载自:文章lxml简介Python从来不出现XML库短缺的情况。从2.0版本开始,它就附带了xml.dom.minidom和相关的pulldom以及SimpleAPIforXML(SAX)模块。从2.4开始,它附带了流行的ElementTreeAPI。此外,很多第三方库可以提供更高级别的或更具有python风格的接口。尽管任何XML库都足够处理简单的DocumentObjectModel(DOM</div> </li> <li><a href="/article/107.htm" title="web报表工具FineReport常见的数据集报错错误代码和解释" target="_blank">web报表工具FineReport常见的数据集报错错误代码和解释</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%86%E5%8C%96%E5%B7%A5%E5%85%B7/1.htm">可视化工具</a> <div>在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下。   NS-war-remote=错误代码\:1117 压缩部署不支持远程设计 NS_LayerReport_MultiDs=错误代码</div> </li> <li><a href="/article/234.htm" title="Java的WeakReference与WeakHashMap" target="_blank">Java的WeakReference与WeakHashMap</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%B1%E5%BC%95%E7%94%A8/1.htm">弱引用</a> <div>首先看看 WeakReference wiki 上 Weak reference 的一个例子: public class ReferenceTest { public static void main(String[] args) throws InterruptedException { WeakReference r = new Wea</div> </li> <li><a href="/article/361.htm" title="Linux——(hostname)主机名与ip的映射" target="_blank">Linux——(hostname)主机名与ip的映射</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/hostname/1.htm">hostname</a> <div>一、 什么是主机名 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 linuxsir.org 这样的; 主机名是用于什么的呢? 答:在一个局域网中,每台机器都有一个主</div> </li> <li><a href="/article/488.htm" title="oracle 常用技巧" target="_blank">oracle 常用技巧</a> <span class="text-muted">18289753290</span> <div>oracle常用技巧 ①复制表结构和数据   create table  temp_clientloginUser as   select distinct userid from tbusrtloginlog ②仅复制数据 如果表结构一样 insert into  mytable  select  * &nb</div> </li> <li><a href="/article/615.htm" title="使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException" target="_blank">使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近访问压力增大后台tomcat的日志里面频繁出现 com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResou</div> </li> <li><a href="/article/742.htm" title="IT系统分析师如何学习大数据" target="_blank">IT系统分析师如何学习大数据</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>我是一名从事大数据项目的IT系统分析师。在深入这个项目前需要了解些什么呢?学习大数据的最佳方法就是先从了解信息系统是如何工作着手,尤其是数据库和基础设施。同样在开始前还需要了解大数据工具,如Cloudera、Hadoop、Spark、Hive、Pig、Flume、Sqoop与Mesos。系 统分析师需要明白如何组织、管理和保护数据。在市面上有几十款数据管理产品可以用于管理数据。你的大数据数据库可能</div> </li> <li><a href="/article/869.htm" title="spring学习——简介" target="_blank">spring学习——简介</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发,从简单性,可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。其主要特征是依赖注入、AOP、持久化、事务、SpringMVC以及Acegi Security 为了降低Java开发的复杂性,</div> </li> <li><a href="/article/996.htm" title="自定义颜色的xml文件" target="_blank">自定义颜色的xml文件</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div><?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#FFFFFF</color> <color name="black">#000000</color> &</div> </li> <li><a href="/article/1123.htm" title="运营到底是做什么的?" target="_blank">运营到底是做什么的?</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E8%90%A5%E5%88%B0%E5%BA%95%E6%98%AF%E5%81%9A%E4%BB%80%E4%B9%88%E7%9A%84%EF%BC%9F/1.htm">运营到底是做什么的?</a> <div>文章来源:夏叔叔(微信号:woshixiashushu),欢迎大家关注!很久没有动笔写点东西,近些日子,由于爱狗团产品上线,不断面试,经常会被问道一个问题。问:爱狗团的运营主要做什么?答:带着用户一起嗨。为什么是带着用户玩起来呢?究竟什么是运营?运营到底是做什么的?那么,我们先来回答一个更简单的问题——互联网公司对运营考核什么?以爱狗团为例,绝大部分的移动互联网公司,对运营部门的考核分为三块——用</div> </li> <li><a href="/article/1250.htm" title="js面向对象类和对象" target="_blank">js面向对象类和对象</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/1.htm">面向对象</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0%E5%88%9B%E5%BB%BA%E7%B1%BB%E5%92%8C%E5%AF%B9%E8%B1%A1/1.htm">函数创建类和对象</a> <div>接触js已经有几个月了,但是对js的面向对象的一些概念根本就是模糊的,js是一种面向对象的语言 但又不像java一样有class,js不是严格的面向对象语言 ,js在java web开发的地位和java不相上下  ,其中web的数据的反馈现在主流的使用json,json的语法和js的类和属性的创建相似   下面介绍一些js的类和对象的创建的技术   一:类和对</div> </li> <li><a href="/article/1377.htm" title="web.xml之资源管理对象配置 resource-env-ref" target="_blank">web.xml之资源管理对象配置 resource-env-ref</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联 <resource-env-ref> <resource-env-ref-name>资源名</resource-env-ref-name> <resource-env-ref-type>查找资源时返回的资源类</div> </li> <li><a href="/article/1504.htm" title="Create a composite component with a custom namespace" target="_blank">Create a composite component with a custom namespace</a> <span class="text-muted">sunjing</span> <div>https://weblogs.java.net/blog/mriem/archive/2013/11/22/jsf-tip-45-create-composite-component-custom-namespace   When you developed a composite component the namespace you would be seeing would </div> </li> <li><a href="/article/1631.htm" title="【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter" target="_blank">【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div> 一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does not have a copy of data set and cannot become a primary. Replica sets may have arbiters to add a </div> </li> <li><a href="/article/1758.htm" title="Javascript开发笔记" target="_blank">Javascript开发笔记</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div> 获取iframe内的元素 通常我们使用window.frames["frameId"].document.getElementById("divId").innerHTML这样的形式来获取iframe内的元素,这种写法在IE、safari、chrome下都是通过的,唯独在fireforx下不通过。其实jquery的contents方法提供了对if</div> </li> <li><a href="/article/1885.htm" title="Web浏览器Chrome打开一段时间后,运行alert无效" target="_blank">Web浏览器Chrome打开一段时间后,运行alert无效</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/chorme/1.htm">chorme</a><a class="tag" taget="_blank" href="/search/alert/1.htm">alert</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E6%95%88/1.htm">无效</a> <div>今天在开发的时候,突然间发现alert在chrome浏览器就没法弹出了,很是怪异。 试了试其他浏览器,发现都是没有问题的。 开始想以为是chorme浏览器有啥机制导致的,就开始尝试各种代码让alert出来。尝试结果是仍然没有显示出来。 这样开发的结果,如果客户在使用的时候没有提示,那会带来致命的体验。哎,没啥办法了 就关闭浏览器重启。   结果就好了,这也太怪异了。难道是cho</div> </li> <li><a href="/article/2012.htm" title="编程之美-高效地安排会议 图着色问题 贪心算法" target="_blank">编程之美-高效地安排会议 图着色问题 贪心算法</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class GraphColoringProblem { /**编程之美 高效地安排会议 图着色问题 贪心算法 * 假设要用很多个教室对一组</div> </li> <li><a href="/article/2139.htm" title="机器学习相关概念和开发工具" target="_blank">机器学习相关概念和开发工具</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>基本概念: 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。 开发工具 M</div> </li> <li><a href="/article/2266.htm" title="[宇宙经济学]关于在太空建立永久定居点的可能性" target="_blank">[宇宙经济学]关于在太空建立永久定居点的可能性</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BB%8F%E6%B5%8E/1.htm">经济</a> <div>        大家都知道,地球上的房地产都比较昂贵,而且土地证经常会因为新的政府的意志而变幻文本格式........        所以,在地球议会尚不具有在太空行使法律和权力的力量之前,我们外太阳系统的友好联盟可以考虑在地月系的某些引力平衡点上面,修建规模较大的定居点</div> </li> <li><a href="/article/2393.htm" title="oracle 11g database control 证书错误" target="_blank">oracle 11g database control 证书错误</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF/1.htm">证书错误</a><a class="tag" taget="_blank" href="/search/oracle+11G+%E5%AE%89%E8%A3%85/1.htm">oracle 11G 安装</a> <div>oracle 11g database control 证书错误  win7 安装完oracle11后打开 Database control 后,会打开em管理页面,提示证书错误,点“继续浏览此网站”,还是会继续停留在证书错误页面 解决办法: 是 KB2661254 这个更新补丁引起的,它限制了 RSA 密钥位长度少于 1024 位的证书的使用。具体可以看微软官方公告:</div> </li> <li><a href="/article/2520.htm" title="Java I/O之用FilenameFilter实现根据文件扩展名删除文件" target="_blank">Java I/O之用FilenameFilter实现根据文件扩展名删除文件</a> <span class="text-muted">游其是你</span> <a class="tag" taget="_blank" href="/search/FilenameFilter/1.htm">FilenameFilter</a> <div>在Java中,你可以通过实现FilenameFilter类并重写accept(File dir, String name) 方法实现文件过滤功能。 在这个例子中,我们向你展示在“c:\\folder”路径下列出所有“.txt”格式的文件并删除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </div> </li> <li><a href="/article/2647.htm" title="C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例" target="_blank">C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/array/1.htm">array</a> <div># include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; //a 是数组的名字 5是表示数组元素的个数,并且这五个元素分别用a[0], a[1]...a[4] int i; for (i=0; i<5; ++i) printf("%d\n",</div> </li> <li><a href="/article/2774.htm" title="PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引" target="_blank">PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/primary/1.htm">primary</a> <div>PRIMARY, INDEX, UNIQUE 这3种是一类PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表有下列字段:会员编号   INT会员姓名  </div> </li> <li><a href="/article/2901.htm" title="java集合辅助类 Collections、Arrays" target="_blank">java集合辅助类 Collections、Arrays</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a><a class="tag" taget="_blank" href="/search/Arrays/1.htm">Arrays</a><a class="tag" taget="_blank" href="/search/HashCode/1.htm">HashCode</a> <div>  Arrays、Collections   1 )数组集合之间转换 public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }      a)Arrays.asL</div> </li> <li><a href="/article/3028.htm" title="Spring Security(10)——退出登录logout" target="_blank">Spring Security(10)——退出登录logout</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/logout/1.htm">logout</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E9%80%80%E5%87%BA%E7%99%BB%E5%BD%95/1.htm">退出登录</a><a class="tag" taget="_blank" href="/search/logout-url/1.htm">logout-url</a><a class="tag" taget="_blank" href="/search/LogoutFilter/1.htm">LogoutFilter</a> <div>       要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain。当我们指定了http元素的auto-config属性为true时logout定义是会自动配置的,此时我们默认退出登录的URL为“/j_spring_secu</div> </li> <li><a href="/article/3155.htm" title="透过源码学前端 之 Backbone 三 Model" target="_blank">透过源码学前端 之 Backbone 三 Model</a> <span class="text-muted">逐行分析JS源代码</span> <a class="tag" taget="_blank" href="/search/backbone/1.htm">backbone</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/1.htm">源码分析</a><a class="tag" taget="_blank" href="/search/js%E5%AD%A6%E4%B9%A0/1.htm">js学习</a> <div>Backbone 分析第三部分  Model 概述: Model 提供了数据存储,将数据以JSON的形式保存在 Model的 attributes里, 但重点功能在于其提供了一套功能强大,使用简单的存、取、删、改数据方法,并在不同的操作里加了相应的监听事件, 如每次修改添加里都会触发 change,这在据模型变动来修改视图时很常用,并且与collection建立了关联。 </div> </li> <li><a href="/article/3282.htm" title="SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter" target="_blank">SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter</a> <span class="text-muted">乒乓狂魔</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>这一篇文章主要介绍下HttpMessageConverter整个注册过程包含自定义的HttpMessageConverter,然后对一些HttpMessageConverter进行具体介绍。 HttpMessageConverter接口介绍: public interface HttpMessageConverter<T> { /** * Indicate</div> </li> <li><a href="/article/3409.htm" title="分布式基础知识和算法理论" target="_blank">分布式基础知识和算法理论</a> <span class="text-muted">bluky999</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%87%B4%E6%80%A7%E5%93%88%E5%B8%8C/1.htm">一致性哈希</a><a class="tag" taget="_blank" href="/search/paxos/1.htm">paxos</a> <div>  分布式基础知识和算法理论 BY NODEXY@2014.8.12 本文永久链接:http://nodex.iteye.com/blog/2103218   在大数据的背景下,不管是做存储,做搜索,做数据分析,或者做产品或服务本身,面向互联网和移动互联网用户,已经不可避免地要面对分布式环境。笔者在此收录一些分布式相关的基础知识和算法理论介绍,在完善自我知识体系的同</div> </li> <li><a href="/article/3536.htm" title="Android Studio的.gitignore以及gitignore无效的解决" target="_blank">Android Studio的.gitignore以及gitignore无效的解决</a> <span class="text-muted">bell0901</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/gitignore/1.htm">gitignore</a> <div>  github上.gitignore模板合集,里面有各种.gitignore : https://github.com/github/gitignore   自己用的Android Studio下项目的.gitignore文件,对github上的android.gitignore添加了       # OSX files      //mac os下      .DS_Store </div> </li> <li><a href="/article/3663.htm" title="成为高级程序员的10个步骤" target="_blank">成为高级程序员的10个步骤</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a> <div>What 软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。   Why 得到更多的报酬!因为你的薪水会随着你水平的提高而增加 提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进 历经更大的挑战。随着你的成长,各种影响力也会提高。 </div> </li> <li><a href="/article/3790.htm" title="mongdb在linux下的安装" target="_blank">mongdb在linux下的安装</a> <span class="text-muted">xtuhcy</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>一、查询linux版本号: lsb_release -a  LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noa</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>