摘要:简介在本教程中,我们将通过解释性的例子介绍 Apache Tika 框架并解释它的概念(比如 N-gram、解析、mime 检测以及内容分析),这些例子不仅适用于老练的软件开发人员,而且也同样适用于内容分析和编程的初学者。我们假设您具有 Java™ 编程语言的应用知识以及用于分析的足够内容。通过本教程,您将学会:Apache Tika 的 API、最相关的模块以及相关的函数Apache Nutch (Tika 的先驱之一)以及它的 NgramProfiler 和 LanguageIdentifier 类,它们最近被移植到了 Tika代码页检测器项目 cpdetector 及其功能什么是 Apa
阅读全文
10 2012 档案
该文被密码保护。
摘要:前不久,刚学习了jms的简单入门,后面紧接着就做了一个关于jms的负载均衡的项目,做完之后颇有打通任督二脉的感觉,感觉很多之前不是很理解的东西,都有些理解了,比如服务器端的监听、具体的jms的使用等,收获有点大。流程如下图所示:客户端:xml配置,这里用到了两台服务器,connectionFactory便可以看出,因为传的是对象,用到了转换器<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans&q
阅读全文
摘要:这几天刚学习了一下消息队列,一直苦于找不到很好很简单的上手资料,苦找几天的资料,自己终于把这一块搞的差不多理解了,下面是自己的学习小demo,仅供上手,大致理解怎么跑,方便那些和我一样苦苦找寻资料的用户吧,废话不多说,直接上代码:1、首先引入activeMQ和spring的jar包 ,直接上图上面的jar包第一个是activeMQ的,还有spring的commos-logging,spring综合包,里面包括了spring-jms,另外还要引入slf4j的两个包 (jar包见管理--文件中的 activeMQ所需jar包 如果不能看的,要么留下联系方式我看到了发给你们,要么网上找也好找 -.-
阅读全文
摘要:转载http://huangrongyou.iteye.com/blog/1533129将已经有的MQ的Demo代码发送到博客上如何部署自己部署MQJML理论WSAD环境下JMS异步通信全攻略 (1) 学习其对JMS说明部分使用 Apache Geronimo 和 JMS 构建事件驱动的框架JMS 基本可靠性机制 和 事务机制配置参数:关于ActiveMQ的配置 好像还不错Activemq 安全机制以及稳定性研究 主要讲如何配置Active MQ教程ActiveMq官网ActiveMQ_in_Action_中文.pdf 中文版本的JSM教程Apache ActiveMQ教程ActiveMQ i
阅读全文
摘要:项目的后台要求在更改密码后发送邮件通知用户,为了避免发送邮件时程序对用户操作的阻塞,之前中文版中使用了线程来发送邮件,而在英文版中,我决定使用JMS来异步发送邮件,让用户更改密码的操作和发送邮件的操作更进一步解耦,也在实际环境中试试JMS。 我们的环境是Spring 2.5, Tomcat 5.5,使用ActiveMQ来实现JMS传送和接收。 首先,我们在Spring中加入ActiveMQ Broker的配置: <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean"
阅读全文
摘要:java5引入了很多新的并发容器和工具,极大的简化了并发程序的编写。本文先介绍Collections.synchronizedXXX工厂方法创建的同步容器的不足,再介绍ConcurrentHashMap,CopyOnWriterArrayList,BlockingQueue,CountDownLatch,Semaphore,CyclicBarrier和显示锁类。一、引言所有的并发问题都来源于如何协调访问并发状态,可变状态越少,并发控制也就越容易容易。没有可变状态的对象永远是现成安全。对有可变状态的对象的并发访问必须进行加锁,对每个方法都加锁并不能保证并发访问一定处于一致的状态。在构建并发程序的
阅读全文
摘要:Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为:并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执行,Executor.execute(Runnalbe)。Executor在执行时使用内部的线程池完成操作。一、创建线程池Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService
阅读全文
摘要:这里提供两种在指定时间后启动线程的方法。一是通过java.util.concurrent.DelayQueue实现;二是通过java.util.concurrent.ScheduledThreadPoolExecutor实现。1. java.util.concurrent.DelayQueue类DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。它接受实现Delayed接口的实例作为元素。<<interface>>Delayed.javapackagejava.util.concurrent;importjava.util.*;publicinte
阅读全文
摘要:1.类Executors此类中提供的一些方法有:1.1 public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。1.2 public static ExecutorService newFixedThreadPool(intnThreads)创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。1.3 public static ExecutorService newSingleThreadE
阅读全文
摘要:我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担.万幸的是,在JDK1.5出现之后,Sun大神(Doug Lea)终于为我们这些可怜的小程序员推出了java.util.conc
阅读全文
摘要:输入输出是指应用程序与外部设备及其他计算机进行数据交流的操作,如读写硬盘数据、向显示器输出数据、通过网络读取其他节点的数据等。任何一种编程语言必须拥有输入输出的处理方式,Java语言也不例外。Java语言的输入输出数据是以流的形式出现的,并且Java提供了大量的类来对流进行操作,从而实现了输入输出功能。所谓流是指同一台计算机或网络中不同计算机之间有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽象为数据流。数据流可分为输入流和输出流,输入流代表从其他设备流入计算机的数据序列,输出流代表从计算机流向外部设备的数据序列。流序列中的数据可以是没有进行加工的原始数据(二进制字节数据),也
阅读全文
摘要:转载http://www.itzhai.com/java-based-notebook-object-serialization-and-deserialization-of-its-implementation-and-use-of.html1、对象持久化:将一个对象保存到永久存储的设备上的机制。2、对象序列化(serialization):将对象转换为字节流保存起来是把一个对象的状态写入一个字节流的过程。在需要时还原此对象的机制。在一个对象图表中,如果试图序列化一个顶层的对象,所有其他引用的对象都被循环的定位和序列化。同样,在反序列化过程中,所有的这些对象以及他们的引用都被正确恢复。2.1
阅读全文
摘要:转载http://www.itzhai.com/java-based-notebook-the-object-of-deep-and-shallow-copy-copy-copy-implement-the-cloneable-interface-serializing-deep-deep-copy.html深复制与浅复制:浅复制(deep clone):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制(shallow clone):被复制对象的所有变量都含有与原来的对象相同的值,除去
阅读全文
摘要:SingletonClient.getHttpClient().execute(post2,localContext);这里是采用httpclient组件提交http请求,需要导入相应的依赖<!--httpclient--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.2.1</version></dependency><de
阅读全文
摘要:HttpConnectionManager.javapackagespider;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Date;importjava.util.zip.GZIPInputStream;i
阅读全文
该文被密码保护。
该文被密码保护。
摘要:转载http://www.cnblogs.com/549294286/archive/2012/09/04/2670601.htmlHTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:?publicParser ();publicParser (Lexer lexer, ParserFeedback fb);publicParser (URLConnection connection, ParserFeedback fb) throwsParserException;publicParser (St
阅读全文
摘要:转载http://blog.csdn.net/rongyongfeikai2/article/details/7826057看过Robin的一篇文章,就是反爬虫的。他提到了几种反爬虫的方法:1.手工拒绝,即爬虫的并发量相当高,那么按照80端口进行并发排序,然后手动的把爬虫的IP给禁掉。2.根据User-Agent拒绝,比如如果我们用Java程序进行爬取时,如果没有设header的话,User-Agent就是java,那么就禁掉User-Agent不为浏览器那样的请求。3.根据流量统计和日志分析来屏蔽爬虫,封掉流量特别大的爬虫。4.实时屏蔽,即如果一个IP在一段时间内请求特别频繁,就为爬虫,加入
阅读全文
摘要:转载http://blog.csdn.net/rongyongfeikai2/article/details/7798838最近,在看博客园上的文章。希望能够爬取指定的博客园的文章,并保存为WORD文档的形式。所以,趁着周末休息,花了半天时间把它给做了出来。完整代码下载地址:http://download.csdn.net/detail/rongyongfeikai2/4462085首先,我们爬取的文章,应该包括三个部分:标题、链接和正文。所以,我们用一个POJO来存储文章。[java]view plaincopypackagecom.BlogCrawler.Model;/**author:T
阅读全文
摘要:先看看多种java通信方式的特点1.阻塞式服务器收到了一个连接,当通信完毕后释放连接,接收新的连接2.阻塞式+线程池可利用java库类中现成的线程池,做起来比较简单为每个用户分配一个线程缺点:虽然可以通过线程池限制线程数防止服务器效率过低,但是线程调度毕竟要消耗资源3.非阻塞式用A,B方式A用1个线程当用一个线程时,采用轮询的方式。看连接,可读,可写3个事件有谁就绪了,就处理谁。例如:如果一个线程连接就绪了,但是可读没有就绪,此时是接受新的连接任务的。对比1(阻塞式)不用像阻塞式一样把一个连接的3个事件(连接,可读,可写就绪)处理完了,才能处理下一个连接对比2(阻塞式+线程池)少了线程调度的开
阅读全文
摘要:转载http://souljava.blog.163.com/blog/static/255571212007111693218434/先看段打开网页的代码:URLurl=newURL("http://souljava.blog.163.com/");URLConnectionconnection=url.openConnection();connection.getInputStream();问题1:客户端浏览器怎么判断接受到的是什么数据类型?回答:java的附带浏览器JEditorPane会按以下方式,依次判断URLConnectiongetContentType()U
阅读全文
摘要:转载http://www.cnblogs.com/dlutxm/archive/2011/12/13/2286862.html最近一直在学习搜索引擎的相关知识,在对于原始的HTML网页的处理是其中非常重要的一个环节,也就是所说的“去噪”,比如去掉相关的标签和不需要的JS代码等等,HTMLParser(http://htmlparser.sourceforge.net/)是一个对现有的HTML进行分析的快速实时的解析工具。它是一个开源的项目,通过它可以准确高效地对HTML文本中的格式、数据进行处理。利用它可以很容易地对网页的内容进行分析、过滤和抓取。它的主要功能分为以下几个部分: 文本信息抽取.
阅读全文
摘要:利用HTMLParser来抽取指定标签具有某属性的的文本内容,比如说抽取div标签,具有class属性问hd,抽取其中的文本内容(一)Filter类顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。判断类Filter:TagNameFilterHasAttributeFilterHasChildFilterHasParentFilterHasSiblingFilterIsEqualFilter逻辑运算Filter:AndFilterNotFilterOrFilt
阅读全文
摘要:HttpClient 与 HtmlParser 简介本小结简单的介绍一下 HttpClinet 和 HtmlParser 两个开源的项目,以及他们的网站和提供下载的地址。HttpClient 简介HTTP 协议是现在的因特网最重要的协议之一。除了 WEB 浏览器之外, WEB 服务,基于网络的应用程序以及日益增长的网络计算不断扩展着 HTTP 协议的角色,使得越来越多的应用程序需要 HTTP 协议的支持。虽然 JAVA 类库 .net 包提供了基本功能,来使用 HTTP 协议访问网络资源,但是其灵活性和功能远不能满足很多应用程序的需要。而 Jakarta Commons HttpClient
阅读全文
摘要:转载http://blog.csdn.net/zhengzhb/article/category/926691java的动态绑定 所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承体系中的覆盖就是动态绑定的,看一下如下的代码:[java]view plaincopyclassFather{publicvoidmethod(){System.out.println("ThisisFather'smethod");}}classSon1extendsFather{publicvoidmethod()
阅读全文
摘要:HttpClient程序包是一个实现了 HTTP协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。对于HTTP协议来说,无非就是用户请求数据,服务器端响应用户请求,并将内容结果返回给用户。HTTP1.1由以下几种请求组成:GET,HEAD, POST, PUT, DELETE, TRACE ,OPTIONS,因此对应到HttpClient程序包中分别用HttpGet,HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, HttpOptions 这几个类来创建请求。所有的这些类均实现了HttpUriRequest接口,故可以作为e
阅读全文
摘要:HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放在这里。HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的
阅读全文
摘要:在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就是线程数量的剧增,大量的线程会增大服务器的开销。大多数的实现为了避免这个问题,都采用了线程池模型,并设置线程池线程的最大数量,这由带来了新的问题,如果线程池中有200个线程,而有200个用户都在进行大
阅读全文
摘要:在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()相当于创建了一个指定大小的数组,并把它包装为缓冲区对象。或者我们也可以直接将一个现有的数组,包装为缓冲区对象,如下示例代码所示:[java]view plaincopyprint?publicclassBufferWrap{publicvoidmyMeth
阅读全文
摘要:在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。本文为NIO使用及原理分析的第二篇,将会分析NIO中的Buffer对象。在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪:position:指定了下一个将要被写入或者读取的元素索引,它的值由get()/put()方法自动更新,在新创建一个Buffer对象时,pos
阅读全文
摘要:最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念。在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个
阅读全文
摘要:关于本系列本系列文章旨在将您的思维方式向函数式思维方式调整,使您以全新的角度来思考常见问题,并提高您的日常编码工作。本系列介绍了函数式编程概念,函数式编程在Java 语言中运行的框架、在JVM 上运行的函数式编程语言、以及语言设计未来的一些方向。本系列主要面向了解Java 以及其抽象层的工作方式,但缺乏函数式语言使用经验的开发人员。在本系列的第一期中,我首先讨论函数编程的一些特点,并演示如何在Java和其他函数语言中体现这些观念。在本文中,我将继续讨论这些概念,讲解一级函数、优化和闭包。但本期的内在主题是控制:什么时候想要控制、什么时候需要控制、什么时候应该放弃控制。一级(First-clas
阅读全文
摘要:面向对象的编程通过封装可变动的部分来构造能够让人读懂的代码,函数式编程则是通过最大程度地减少可变动的部分来构造出可让人读懂的代码。— Michael Feathers,Working with Legacy Code一文的作者,这篇文章是通过微博发表的关于本系列本系列的目标是重新塑造您对函数式编程思想的看法,帮助您从新的角度看待常见问题,找到改进日常编码的途径。它探讨了函数式编程的概念,支持在Java 语言中进行函数式编程的框架,运行在JVM 上的函数式编程语言,以及语言设计的一些未来发展方向。本系列面向想了解Java 及其抽象工作、但在使用功能性语言方面经验很少或根本没有经验的开发人员。
阅读全文
摘要:Sometimes, you project will have dependency on a jar which is not in officialmavenrepository, and maybe it is propriety jar file which will never be part ofmavenrepository. In this case, you have to put it to your localrepositoryyour self to solve the dependency.There is a install plug in to do this
阅读全文
摘要:转载http://fancyboy2050.iteye.com/blog/1300037最近使用spring mvc开发一个web系统,发现在controller里发生未捕获异常时不出日志。分析DispatcherServlet,初始化handlerExceptionResolversJava代码 /** *Initializethestrategyobjectsthatthisservletuses. *<p>Maybeoverriddeninsubclassesinordertoinitialize *furtherstrategyobjects. ...
阅读全文
摘要:转载http://blog.csdn.net/lin_bei/article/details/1067506我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在介绍的时候有个专题,是从两个模式来看Java/IO库,完这个专题后,个人感觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适配器模式的理解,现和大家分享下这个在我看来很伟大的成果,同时说明下,以下大部分文字跟图片是来自<<Java与模式>
阅读全文
摘要:我将按照基类的顺序:InputStream、OutPutStream、Reader、Writer来分别对Java I/O加以总结。java中的流,简单理解就是管道里有流水,这个管道连接了程序和文件。InputStream、OutPutStream是字节输入流的所有类的超类。Reader、Writer是字符输入流的所有类的超类。Java IO流对象(其实大家都和懂啦,我这里再赘述一下)1.输入字节流InputStreamIO 中输入字节流的继承图可见上图,可以看出:InputStream 是所有的输入字节流的父类,它是一个抽象类。ByteArrayInputStream、StringBuffer
阅读全文
摘要:转载http://blog.csdn.net/hust_is_lcd/article/details/7884320[-] 认识装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过...
阅读全文
摘要:java中io包运用到了装饰器模式,下面是java中io的类结构图:无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的地(称为流汇或Sink of Stream)去的。由流的方向,可以分成输入流和输出流,一个程序从输入流读取数据向输出流写数据。 如,一个程序可以用FileInputStream类从一个磁盘文件读取数据,如下图所示: 像FileInputStream这样的处理器叫做流.
阅读全文