基于Spring的批量下载器(1)摘要

很多动力来推动我来写这组文章,包括:

  • 很多网站的资源非常不错,例如图片和视频,我们应该借助一些工具将它们下载并保存;
  • 世面上很多流行的下载工具并不能满足对一个网站下所有或一部分资源的下载的要求,所以我自己来实现一个;
  • 将一些不错的技术融入到一个小型应用中加以实践,能够对这些技术有更加深入的了解;
  • 乘着Spring3.X的东风,这个应用应该由它来支撑,并通过这个应用来实战Spring框架为我们提供的诸多功能;
  • HttpClient也是值得我们关注的一个开源框架,很多WebService框架都在用它。

我将通过这部连载文章,向大家一步一步展现一个批量资源下载器的设计和实现。正如上面提到的,写这个程序并不是目的,而是要通过这个程序来实战一些主流框架。这个程序最终能够将 The Big Picture 的所有图片批量下载并保存,并且能够自动检测更新。

这个程序的大致结构如下图所示:


基于Spring的批量下载器(1)摘要_第1张图片

程序的名称定为“BatchDownloader”,主要由以下模块构成:

  • DataBase Access. 该模块用来完成对数据库的操作,在这部分功能里,我们将使用Hibernate框架来完成数据库持久化功能;
  • HTTP & HTML. 该模块来处理http请求和html解析。对于http操作,我们将使用Apache的HttpClient来完成;对于html,我们将使用JSoup来解析html,这部分功能将作为资源被Spring管理;
  • Engine & Schedule. 顾名思义,Engine是整个程序的驱动者,它负责按照一定的周期到指定的网站上去嗅探感兴趣的资源,并将这些资源封装成下载任务交友下载者去下载。对于Engine的任务调度,我们将使用Spring的内置Schedule功能来实现;
  • Download & Executor. 这部分功能用来处理Engine委派下来的任务,通常情况下将有多于一个的下载器来处理任务,所以这就涉及到了多任务的Execute,这部分功能我们也采用Spring内置的Execute调度功能来实现;
  • Event & listener. 这部分功能是前几部分功能解耦的关键,我们希望任务的分配、数据库的持久化等操作都能够异步进行从而提高效率,所以我们采用Spring的Event模型来处理这部分功能。

从这些功能来看,几乎每个模块都与Spring框架有或多或少的关系;从另外一方面看,既然这些功能都在Spring的控制之下,也从一个侧面说明了Spring作为容器框架的强大功能。这个应用旨在展现Spring的这些特性,是我们加深对它的理解和应用。该程序将使用Spring3.X,并且力争按照Spring所建议的Best Practise 去做,例如本程序将大量采用Annotation来代替XML从而避免XML配置的枯燥冗长。

这个程序将作为一个web应用发布,所以需要一个servlet容器,例如tomcat,但不需要J2EE容器。将这个程序做成web应用纯粹是为了演示如何搭建一个基于Spring的web工程,并非它就必须运行在servlet容器中,它甚至没有界面,所以它并不是一个典型的SSH应用,只能说是SH应用,Spring+Hibernate。欢迎有兴趣的同志们给它写几个基于web的UI,或者干脆将它改写成一个standalone应用。其实这些并不重要,这些也不是本系列文章讨论的主题,记住我们的目的,玩玩Spring,再干点有趣的事情

从下一篇起,我将按照顺序向大家呈现我的思路历程。节奏我会灵活把握,也欢迎大家拍砖!

 

你可能感兴趣的:(spring,框架,Hibernate,Web,webservice)