2021SC@SDUSC
目录
一、Pinger
1.Pinger
ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。
JPress中定义了一个Pinger接口,用于检测某个数据是否可到达目的站。
public interface Pinger { public void ping(PingData data); }
JPress中有两个类实现了Pinger接口,他们分别是BaiduPinger和GooglePinger,其UML类图如下。
2.BaiduPinger
先观察BaiduPinger中的主要代码。
public class BaiduPinger implements Pinger { private static final String xml = "" + "<?xml version=\"1.0″ encoding=\"UTF-8″?> \n" + "<methodCall> \n" + "<methodName>weblogUpdates.ping</methodName> \n" + "<params> \n" + "{template}" + "</params> \n" + "</methodCall>"; private static final String template = "<param><value><string>{data}</string></value></param> \n"; private static final String pingUrl = "http://ping.baidu.com/ping/RPC2"; @Override public void ping(PingData data) { String dataString = Util.replace(xml, template, data); String respose = HttpUtil.httpPost(pingUrl, dataString); if (respose != null && respose.contains("<int>0</int>")) { //success } else { //error log.error("baidu ping error:" + respose); } } }
BaiduPinger重写 了Pinger接口的ping方法。它会先把需要ping的数据和模板替换到xml字符串中,再向"页面不存在_百度搜索"地址发出post请求,携带的参数是dataString。如果我们能接收到信息并且回应的信息不包括"<int>0</int>"字符串,那么就说明该地址是可联通的。若请求失败,那么将失败记录到log日志中。
3.GooglePinger
public class GooglePinger implements Pinger { private static final String xml = "" + "<?xml version=\"1.0″ encoding=\"UTF-8″?> \n" + "<methodCall> \n" + "<methodName>weblogUpdates.extendedPing</methodName> \n" + "<params> \n" + "{template}" + "</params> \n" + "</methodCall>"; private static final String template = "<param><value><string>{data}</string></value></param> \n"; private static final String pingUrl = "http://blogsearch.google.com/ping/RPC2"; @Override public void ping(PingData data) { String dataString = Util.replace(xml, template, data); String respose = HttpUtil.httpPost(pingUrl, dataString); System.out.println(respose); } }
GooglePinger的ping方法比BaiduPinger更为简单,可能是国内一般不用Google的原因,GooglePinger的ping方法没有对返回的数据进行判断,只是简单的打印出来。也可以看到,Pinger在JPress中的用处可能就是检测主机是否联网。
二、Seo
1.BaiduSeoProcesser
SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是让其在行业内占据领先地位,获得品牌收益。很大程度上是网站经营者的一种商业行为,将自己或自己公司的排名前移。
JPress中有专门进行搜索引擎优化的类,它负责对某些站点的搜索引擎优化。
private static boolean process(String postUrl, String site, String token, String... urls) { StringBuilder pushData = new StringBuilder(); for (String url : urls) { pushData.append(url).append("\n"); } String url = postUrl.replace("{site}", site).replace("{token}", token); String response = HttpUtil.httpPost(url, pushData.toString()); if (response != null) { JSONObject json = JSON.parseObject(response); Integer successCount = json.getInteger("success"); if (successCount != null && successCount > 0) { return true; } LogKit.error("push or update is error : " + response); } return false; }
可以发现,它的process方法中,会将url集合作为数据,将postUrl中的site参数替换成自己site参数,向url发送了post请求,再通过回应的json数据,如果有“success”字段,就认为该请求优化成功,否则失败。