易截截图软件、单文件、免安装、纯绿色、仅160KB

用Java写爬网页的小工具

其实也不是爬网页,只是从一个XML文件取URL,然后抓取网页内容。
主要有几点,备忘:
1. 全局代理,设置之后所有的URL都使用此代理,这样可以直接调用FileUtils.copyURLToFile:
private void initProxy(String host, int port,
final String username, final String password) {
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username,
password.toCharArray());
}
});
System.setProperty("http.proxyType", "4");
System.setProperty("http.proxyPort",
Integer.toString(port));
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxySet", "true");
}
2. 设置User-Agent,有些站点禁止Java作为访问客户端,必须通过URLConnection设置User-Agent来模拟浏览器,所以不能用FileUtils.copyURLToFile,复制其源码小修改一下即可:
URLConnection httpConnection = new URL(url).openConnection();
httpConnection.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
File dest = new File(path);
InputStream input = httpConnection.getInputStream();
try {
FileOutputStream output = FileUtils.openOutputStream(dest);
try {
IOUtils.copy(input, output);
} finally {
IOUtils.closeQuietly(output);
}
} finally {
IOUtils.closeQuietly(input);
}
3.dom4j读取超大xml文件,使用event based模式防止堆溢出错误:
reader.addHandler("/RDF/ExternalPage", new ElementHandler() {
public void onStart(ElementPath path) {
}
public void onEnd(ElementPath path) {
Element node = path.getCurrent();
// 节点相关操作
// 关键操作,从内存的节点树中剔除节点,释放内存
node.detach();
}
});
4.多线程可以用jdk1.5新加入的线程池java.util.concurrent.ThreadPoolExecutor,方便实用。稍微要注意的就是在添加完所有任务后记得执行一下ThreadPoolExecutor.shutdown()。


相关文档:

Java中的拷贝

Java对对象和基本的数据类型的处理是不一样的。对基本的数据类型类似于C/C++中的方法(值传递)。在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对 ......

Java中Underlying input stream returned zero bytes

异常 Underlying input stream returned zero bytes 解决办法
系统环境
jdk1.5
hibernate 3.0
sql server 2000
ms jdbc driver
将一个varchar类型的字段改为text后,就出现
[Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes 的异常了。
从网上搜集资料来看,由于jdbc的bug ......

如何在Oracle中使用Java存储过程 (详解)

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
一、如何创建java存储过程?
通常有三种方法来创建java存储过程。
1. 使用oracle的sql语句来创建:
e.g. 使用create or replace and compile java source ......

Java基础、Java Web问答

1.       String、StringBuffer、StringBuilder的区别
String不变对象,StringBuffer可变字符串,方法为synchronized,StringBuilder可变字符串,方法非synchronized
 
2.       finally、final、finalize的区别
finally在try-cache-finally中使用; ......

jct 模板通过json 从java 之间得到值的一个简单例子

0.本例子是基于jQuery的
1.引入jct包
<!-- 引入jct包 -->
<script type="text/javascript" src="${ctx }/js/jct.js"></script>
<script type="text/javascript" src="${ctx }/js/dateutils.js"></script>
2.通过ajax 传递参数给java
 &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号