📄 hotwebworkthread.java
字号:
package com.ct.hotweb.getter;
import java.io.*;
import java.util.*;
import org.apache.commons.httpclient.*;
import com.ct.hotweb.bean.*;
import com.ct.hotweb.util.*;
import com.ct.hotweb.dao.*;
/**
* hotweb工作线程
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class HotWebWorkThread extends Thread {
private HotWebWorkManager manager;
private SearchKeyStack stack;
public HotWebWorkThread(
HotWebWorkManager manager,
MultiThreadedHttpConnectionManager httpManager,
SearchKeyStack stack) {
this.manager = manager;
this.stack = stack;
}
public void run() {
ArrayList keyList = new ArrayList();
ArrayList pathList = new ArrayList();
ArrayList sameList = new ArrayList();
int connCount = 0;
Random rand = new Random();
SearchKeyDAO keyDAO = new SearchKeyDAO();
CategoryDAO catDAO = new CategoryDAO();
while (!stack.isEmpty() && !manager.isKilled() && !stack.isKilled()) {
try {
SearchKey key = (SearchKey) (stack.pop());
if (null == key) {
continue;
}
boolean fail = false;
//重试次数
int count = 0;
ArrayList blockVarList = null;
Category cat = null;
cat = catDAO.getCategory("" + key.getParentID());
{
count++;
HotWebGetter hwg =
new HotWebGetter(
manager.getHttpClient(),
manager.getHotWebGetterConfig(),
key.getName(),
manager.getBlockAnalyzer());
try {
blockVarList = hwg.getHotWeb().getBlocksVar();
} catch (Exception e1) {
//stack.push(key);
//Thread.sleep(1000);
//continue;
Thread.sleep(3000);
//continue;
}
}
//save to db
//remove old record
keyDAO.deleteHotWebInfo(key);
//add new record
if (blockVarList != null)
for (int i = 0; i < blockVarList.size(); i++) {
HotWebInfo hwi = new HotWebInfo();
HashMap vars = (HashMap) blockVarList.get(i);
hwi.setContent(
Utils.uncharsetChange(
(String) vars.get("Content"),
manager.getHtmlCharset()));
hwi.setParentId(key.getId());
hwi.setTitle(
Utils.uncharsetChange(
(String) vars.get("SiteTitle"),
manager.getHtmlCharset()));
hwi.setUrl(
Utils.uncharsetChange(
(String) vars.get("SiteUrl"),
manager.getHtmlCharset()));
keyDAO.addHotWebInfo(hwi);
}
//get search key info
HashMap map = new HashMap(1);
map.put(
"SearckKeyName",
Utils.charsetChange(
key.getName(),
manager.getHtmlCharset()));
keyList.add(map);
//get search key path
map = new HashMap(2);
/*
map.put("PathPartName", "首页");
map.put(
"PathPartUrl",
GetterHelper.getCategoryUrl(manager, cat));
pathList.add(map);
*/
StringTokenizer st = new StringTokenizer(cat.getPath(), "/");
while (st.hasMoreTokens()) {
map = new HashMap(2);
String partId = st.nextToken();
Category pathCat = catDAO.getCategory(partId.trim());
map.put(
"PathPartName",
Utils.charsetChange(
pathCat.getName(),
manager.getHtmlCharset()));
map.put(
"PathPartUrl",
GetterHelper.getCategoryUrl(manager, pathCat));
pathList.add(map);
}
//get same level keyinfo
List sameKeys =
keyDAO.getSameLevelSearchKey("" + key.getParentID());
String keyId = "" + key.getId();
Category pc = catDAO.getCategory("" + key.getParentID());
for (int i = 0; i < sameKeys.size(); i++) {
SearchKey tmp = (SearchKey) sameKeys.get(i);
if (keyId.equals("" + tmp.getId()))
continue;
map = new HashMap(2);
map.put(
"SameKeyName",
Utils.charsetChange(
tmp.getName(),
manager.getHtmlCharset()));
map.put(
"SameKeyUrl",
GetterHelper.getKeyUrl(manager, pc, tmp));
sameList.add(map);
}
String content =
generate(
manager.getHtmlTemplate(),
keyList,
pathList,
blockVarList,
sameList,
new HashMap());
outputStaticHtml(cat, key, content);
keyList.clear();
pathList.clear();
sameList.clear();
//从任务中去除
try {
if (blockVarList != null && blockVarList.size() > 0)
keyDAO.removeError("" + key.getId());
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
System.out.println(
"hotweb thread generate error: " + e.getMessage());
//e.printStackTrace();
}
}
}
public void outputStaticHtml(Category cat, SearchKey key, String content) {
File f;
BufferedOutputStream bos = null;
String fileName = GetterHelper.getKeyFileName(manager, key);
String path = GetterHelper.getSearchKeyPath(manager, cat, key);
f = new File(path);
if (!f.exists())
f.mkdirs();
path += fileName;
f = new File(path);
if (f.exists())
f.delete();
try {
bos = new BufferedOutputStream(new FileOutputStream(f));
bos.write(content.getBytes(manager.getHtmlCharset()));
bos.flush();
key.setLastGenerateTime(
Utils.dateFormat(new Date(System.currentTimeMillis())));
new SearchKeyDAO().updateSearchKey(key);
} catch (Exception e) {
System.out.println("output static html error. " + e.getMessage());
} finally {
try {
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String generate(
TemplateAnalyzer template,
ArrayList headVars,
ArrayList pathVars,
ArrayList bodyVarArrays,
ArrayList sameVars,
HashMap footVars) {
String htmlContent = "";
//generate head
htmlContent
+= HtmlGenerateUtils.generateBlocks(template.getBlock(0), headVars);
//generate path
htmlContent
+= HtmlGenerateUtils.generateBlock(
template.getBlock(1),
HtmlGenerateUtils.EMPTY_VARS);
htmlContent
+= HtmlGenerateUtils.generateBlocks(template.getBlock(2), pathVars);
htmlContent
+= HtmlGenerateUtils.generateBlocks(
template.getBlock(3),
headVars);
//generate same keys
if (sameVars != null && sameVars.size() > 0) {
htmlContent
+= HtmlGenerateUtils.generateBlock(
template.getBlock(4),
HtmlGenerateUtils.EMPTY_VARS);
htmlContent
+= HtmlGenerateUtils.generateBlocks(
template.getBlock(5),
new HashMap(),
template.getBlock(6),
sameVars,
template.getBlock(7),
new HashMap(),
manager.getSimilarColumn());
htmlContent
+= HtmlGenerateUtils.generateBlock(
template.getBlock(8),
HtmlGenerateUtils.EMPTY_VARS);
}
//generate body
if (bodyVarArrays != null && bodyVarArrays.size() > 0) {
htmlContent
+= HtmlGenerateUtils.generateBlock(
template.getBlock(9),
new HashMap());
htmlContent
+= HtmlGenerateUtils.generateBlocks(
template.getBlock(10),
bodyVarArrays);
htmlContent
+= HtmlGenerateUtils.generateBlock(
template.getBlock(11),
new HashMap());
}
//generate foot
htmlContent
+= HtmlGenerateUtils.generateBlock(template.getBlock(12), footVars);
return htmlContent;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -