发表时间:2009-07-03
最后修改:2009-07-03
最近在用Heritriex+Lucene做搜索引擎的项目,中间有一个功能要实现类似于百度和谷歌中"网页快照"的功能;
秀一下我自己的做法吧!
(1):页面中的处理很简单;
var url = "webSnap?url="+url+"&fresh="+Math.random();//我这个是提交给了servlet了。
window.open(url);
(2):servlet的处理方式:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
//得到页面传递过来的url
String urlAddress = JspUtils.getParameter(request, "url", "");
//把提交过来的网页地址直接定位到本地抓取磁盘中对应的页面
String conLocalAddress = getLocalAddress(urlAddress);
//获取本地抓取的页面中的编码方式
String charset = BaeeqUtil.getCharset(new File(conLocalAddress));
response.setContentType("text/html;charset="+charset+"");
//通过字符流的形式读文件
String localStr = FileRead(conLocalAddress);
PrintWriter out = response.getWriter();
//直接响应输出
out.write(localStr);
}
/**
* 读磁盘中某个文件
* @param fname
* @return String
*/
public String FileRead(String fname) {
String content = new String();
try {
FileReader fr = new FileReader(fname);
BufferedReader br = new BufferedReader(fr);
String str = new String();
while((str = br.readLine()) != null) {
content +=str;
}
br.close();
fr.close();
} catch(FileNotFoundException e) {
System.out.println("Connt find " + e);
} catch(IOException e) {
System.out.println("Error reading input file" + e);
}
return content;
}
/**
* 获得字符编码
* @param htmlFile
* @return
*/
public static String getCharset(File htmlFile){
String str = loadFileToString(htmlFile);
String regex = "charset=(\\w+\\d?)";
Pattern pattern = Pattern.compile(regex);//编译正则
Matcher matcher = pattern.matcher(str);//产生正则匹配对象。
if(matcher.find()){
String s = matcher.group(1);
System.out.println(s);
return s;
}
return "UTF8";
}
/***
* 得到本地磁盘上的mirror的地址
* @param printStr
* @return
*/
public String getLocalAddress(String printStr) {
return BaeeqUtil.switchUrl2Path(printStr, txtMirrorPath);
}
/**
* 测试方法
* @param args
* @return void
*/
public static void main(String[]args) {
String demo = "http://bbs.club.sina.com.cn/tableforum/App/index.php?tree=0&bbsid=272&subid=0";
System.out.println(BaeeqUtil.switchUrl2Path(demo, "e:\\"));
}
用这个方法做的网页快照。不知道大家还有其他的什么好的办法了没。欢迎指点……………………