java实现多线程、断点下载

发表于3年前(Jun 8, 2015 11:58:42 AM)  阅读 543  评论 0

分类: Java 类库工具

标签: 多线程下载 断点下载 Content-Disposition RANGE Content-Range

1、知识预备

平时我们用下载工具用的很多,下载工具具有多线程下载,断点续传等优点。多线程下载简单来说就是向服务器发起多个连接,一般来说服务器会给当前连接的每个客户端平均分配带宽,如果你的连接多,自然而然的速度就比别人快。不过现在很多服务器都有安全机制,一般会限制每个ip的连接数,碰到这种情况的话,就要靠代理ip来解决了。

使用多线程下载主要是发起连接时,向服务器说明此次连接需要获取的数据段,通过URLConnection类的setRequestProperty("RANGE","bytes=0-23245")来设定,如果服务器支持的话,在response的header里面将会带入Content-Range属性,里面标示了这次返回的字节范围。

断点续传的话就比较简单,无非记录本次下载的进度,下次连接时,还是通过制定数据字节范围,继续未完成的下载。麻烦的地方主要在于如何记录进度,记录的频率,还有异常的情况发生,这里异常的情况指的是,用户强行结束进程,电脑宕机断电等情况,如何在这些情况发

......

java解析华为网盘真实下载地址

发表于3年前(Jun 3, 2015 4:22:35 PM)  阅读 478  评论 0

分类: Java 类库工具

标签: 华为网盘 外链 解析下载地址

1、背景:

这几年涌现出一大批网盘运营商,对于很多服务器磁盘有限的站长也经常将要提供下载的文件上传到网盘,以节省自己的空间。一般来说,都是链接到网盘页面,然后用户点击下载开始下载文件,其中不乏有些网盘需要登录,需要提取码等等,这些操作能不能简化,一次性过呢?是可以的,笔者写的这个java类是针对华为网盘,通过网盘的链接地址,获取到该页面下载列表里面的所有文件的真实下载地址。获得真实下载地址后,其实直接可以使用该地址作为图片、音乐等等的外链了。不过最后测试的时候,笔者发现,华为网盘的下载地址是有时效性的,过一段时间后必须重新加密计算,做外链的话多了一次解析加密的过程。

2、原理:

华为网盘的真实下载地址主要由两个字段计算出来,一个是encryKey,一个是downloadurl,downloadurl是一大长串字符,每个文件唯一对应,而encryKey不是固定的,每个下载页面对应一个encryKey(时效性就跟这个值有关),同一个下载页面的所有文件encryKey相同。

加密所需要的两个字段都在下载页面

......

org.apache.tomcat.util.http.parser.TokenMgrError

发表于3年前(May 24, 2015 8:30:46 PM)  阅读 922  评论 0

分类: Java 异常

标签: TokenMgrError setContentType

1、TokenMgrError

前两天同事搭建项目环境,在eclipse部署完启动项目时出现如下报错:

org.apache.tomcat.util.http.parser.TokenMgrError: Lexical error at line 1, column 16. Encountered: "," (44), after : ""

同事环境跟笔者唯一不同的地方就是tomcat使用的版本是7,而笔者使用的是6。

2、错误定位

根据错误提示,定位到报错的代码应该是如下一行:

this.getRespone().setContentType("text/javascript,charset=UTF-8");

text/javascript是在服务器返回json数据时设置,这里同时设置了字符集为UTF-8,两者之间使用的","分隔,就是这个逗号出现了问题。

......

JAVA生成RSS订阅--ROME

发表于3年前(May 7, 2015 7:22:52 PM)  阅读 1088  评论 0

分类: Java

标签: RSS订阅 ROME feed

1、什么是RSS

RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。

2、为什么要使用RSS

举个例子,如果用户获取到了网站的RSS文件,就可以获取该网站最新发布的文章信息。用户可以使用一些聚合功能来阅读这些信息,笔者就喜欢使用QQ邮箱的订阅以及Foxmail的RSS订阅功能,由此可见,RSS对网站的推广具有很大的作用,所以网站必须提供标准的RSS文件。RSS协议有很多版本,0.9,1.0,2.0,现在使用较多的应该是2.0了。

3、什么是ROME

ROME是一组Atom/RSS工具类,它用Java来操作大部份RSS。ROME可能是目前最完善的开源聚合工具,ROM

......

hibernate-jpa与persistence-api冲突

发表于3年前(Apr 18, 2015 9:23:30 AM)  阅读 1227  评论 0

分类: Java 开发运维环境

标签: junit javax.persistence.Table.indexes[Ljavax/persistence/Index javax.persistence.JoinColumn.foreignKeyLjavax/persistence/ForeignKey hibernate4.3 persistence-api hibernate-jpa

1、背景

hibernate版本使用的是4.3.8,项目架构是jpa,使用注解注册实体。启动tomcat容器测试时,运行无问题,使用junit运行单元测试时,报出几种错误,网上搜索有如下信息:

错误一
错误信息:javax.persistence.Table.indexes([Ljavax/persistence/Index 
原因:Hibernate4.3不支持@table(name="tablename")
解决方案:使用@entity(name="tablename")代替@table(name="tablename")

错误二
错误信息:javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey
原因:Hibernate4.3在多对一映射的时候不能使用@JoinColu

......

junit spring单元测试方法不执行

发表于3年前(Apr 18, 2015 8:58:28 AM)  阅读 2342  评论 0

分类: Java 开发运维环境

标签: junit MultipleFailureException spring-test

1、背景

junit测试service方法,引入spring-test框架,使用注解初始化spring容器,junit测试类spring环境配置如下:

运行测试类时,java控制台无错误报出,junit报出MultipleFailureException,java控制台输出如下:

2015-04-18 08:30:26.716 DEBUG [SpringJUnit4ClassRunner.java:113] SpringJUnit4ClassRunner constructor called with [class com.***.service.TestSecurityService].
2015-04-18 08:30:26.732 DEBUG [BootstrapUtils.java:78] Instantiating TestContextBootstrapper from class [org.springframework.test.cont
......

Spring MVC Mapping重复定义

发表于3年前(Apr 17, 2015 8:46:59 PM)  阅读 1615  评论 0

分类: Java

标签: annotation spring mvc mapping AbstractHandlerMethodMapping registerHandlerMethod 映射覆盖

1、背景

用过Spring MVC的都清楚一点,controller中的url mapping是不能重复的,如果重复定义了url,在Spring容器初始化时,将会报出"Ambiguous mapping found. Cannot map ***  There is already **  mapped."的错误。追寻源码,mapping的建立可以追溯到spring-webmvc.jar包AbstractHandlerMethodMapping中的registerHandlerMethod方法:

	protected void registerHandlerMethod(Object handler, Method method, T mapping) {
		HandlerMethod newHandlerMethod = createHandlerMethod(handler, method);
		HandlerMe
......

配置error-page出错

发表于3年前(Apr 17, 2015 7:44:54 PM)  阅读 522  评论 0

分类: Java 开发运维环境

标签: error-page location 404

1、背景

web.xml配置了error-page,部署在tomcat时启动没有报错,部署在weblogic时启动报错,错误类似如下:

2015-4-17 下午05时22分10秒 GMT+08:00> <Error> <J2EE> <BEA-160197> <Unable to load descriptor /opt/weblogic/software3.5/casp/WEB-INF/web.xml of module casp. The error is weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND
  problem: cvc-datatype-valid.1.1: string value 'auth/problem.jsp' does not match pattern for war-pathType in namesp
......

跨域跳转相关问题

发表于3年前(Jan 27, 2015 10:29:58 AM)  阅读 646  评论 0

分类: Java 开发运维环境

标签: 跨域 forward nginx sendRedirect

1、背景:

昨天有同学碰到这么一个问题,有服务器A部署了系统A,有服务器B部署了系统B,A系统使用IFrame嵌入了B系统相关功能。因为网络权限控制得比较严格,用户暂时只有访问服务器A的权限,与服务器B的网络是不通的,所以用户访问系统A的时候,嵌入系统B的功能页面将是空白。后咨询得知,网络不通的情况只是暂时的,但还是想先通过其他手段能先进行常规的开发和测试。

2、分析:

首先,Iframe本身跨域是没有问题的,只要客户浏览器能正常访问B服务器即可。如果客户跟B服务器网络不通,那Iframe直接嵌入肯定是行不通的。

其次,如果使用转发跳转,在java里面有sendRedirect和forward两种,其中sendRedirect是浏览器转发,所以其实还是浏览器访问目标地址,而forward则是服务器转发,浏览器并不需要具有目标地址的访问权限,但forward不能跨域。

反向代理是唯一可

......

反射获取方法参数必须完全匹配

发表于3年前(Jan 26, 2015 10:35:19 AM)  阅读 911  评论 0

分类: Java

标签: java反射 getMethod searchMethods 向上就近匹配 重载

java里面有个方法重载机制,重载的原则是向上就近匹配原则,而反过来向下匹配是不行的,我们只能强制转换。

本文稍微分析了一下源码,解释java反射获取方法是如何运作的。

反射获取方法参数必须完全匹配的,如果我们需要它执行向上就近匹配原则该怎么做,在使用java反射机制时需要注意什么。