设为首页 收藏本站
查看: 255|回复: 0

[经验分享] java在tomcat里实现计划任务定时生成SiteMap

[复制链接]

尚未签到

发表于 2017-2-6 11:39:02 | 显示全部楼层 |阅读模式
  站想要让搜索引擎搜到,必须设置好keywords,description,title,做好SEO优化,同时sitemap.xml也是不可缺少的
  通过Google,得到一些帮助,把自己做的整理一下:
  第一、对文件进行查找:

public class FileDemo {
File myDir;
File[] contents;
List fileList;
Iterator currentFileIt;
File currentFile;
String path;
/**
* 无参的构造函数
* */
public FileDemo() {
path = new String("");
fileList = new ArrayList();
}
/**
* 有参的构造函数
* */
public FileDemo(String path) {
this.path = path;
fileList = new ArrayList();
}
/**
* 设置要查看的文件路径
*/
public void setPath(String path) {
this.path = path;
}
/***************************************************************************
* 返回当前目录的路径
*/
public String getDirectory() {
return myDir.getPath();
}
public void refreshList() {
if (this.path.equals(""))
path = "c:\\";
myDir = new File(path);
fileList.clear();
contents = myDir.listFiles();
// 重新装入路径下文件
for (int i = 0; i < contents.length; i++) {
fileList.add(contents);
}
currentFileIt = fileList.iterator();
}
/**
* 指到下一个条目
*/
public boolean nextFile() {
while (currentFileIt.hasNext()) {
currentFile = (File) currentFileIt.next();
return true;
}
return false;
}
/**
* 返回当前指向的文件对象的文件名称
*/
public String getFileName() {
return currentFile.getName();
}
/**
* 返回当前指向的文件对象的文件尺寸
*/
public String getFileSize() {
return convertFileSize(currentFile.length());
}
/**
* 转换文件尺寸为指定格式。
*/
private String convertFileSize(long size) {
int divisor = 1;
String unit = "bytes";
if (size >= 1024 * 1024) {
divisor = 1024 * 1024;
unit = "MB";
} else if (size >= 1024) {
divisor = 1024;
unit = "KB";
}
if (divisor == 1)
return size / divisor + " " + unit;
String aftercomma = "" + 100 * (size % divisor) / divisor;
if (aftercomma.length() == 1)
aftercomma = "0" + aftercomma;
return size / divisor + "." + aftercomma + " " + unit;
}
/**
* 返回文件的最后修改日期
*/
public String getFileTimeStamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(new Date(currentFile.lastModified()));
return dateString;
}
/**
* 返回文件是不是一个目录
*/
public boolean isDirectory() {
return currentFile.isDirectory();
}
}
  第二、创建一个任务类,继承TimerTask

public class XMLParese extends TimerTask{
private ServletContext context;
public XMLParese(ServletContext context){
this.context=context;
}
@Override
public void run() {
// TODO Auto-generated method stub
createSiteMap();
}
public void createSiteMap() {
String priority = "0.75";// 级 别
String changefreq = "daily";// "weekly";//频 率
String xmlpath = "e:/sitemap.xml";// sitemap名称以及位置
String homeurl = "http://www.jiujiajiu.cn"; // 栏目首页
String []directory={"promotion","news","brand","goods","services","shop","winelive"};
FileDemo fp = new FileDemo();
try {
Document document = DocumentHelper.createDocument();
Element urlsetElement = document.addElement("urlset");
urlsetElement.addAttribute("xmlns ",
"http://www.sitemaps.org/schemas/sitemap/0.9"); // "xmlns
// "必须要有空格,否则会报错
urlsetElement.addAttribute("xmlns",
"http://www.sitemaps.org/schemas/sitemap/0.9");
urlsetElement.addAttribute("xmlns:xsi",
"http://www.w3.org/2001/XMLSchema-instance");
urlsetElement.addAttribute("xsi:schemaLocation",
"http://www.sitemaps.org/schemas/sitemap/0.9 " +
"http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
//创建url根元素
Element urlElement ;
//为url根元素创建loc网页地址,lastmod更新时间,changefreq更改频率和priority级别
Element locElement ;
Element lastmodElement;
Element changefreqElement;
Element priorityElement;
fp.setPath("D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\");
fp.refreshList();
while (fp.nextFile()) {
if (!fp.isDirectory()) {
homeurl="http://www.jiujiajiu.cn/";
String f=fp.getFileName();
String fname=f.substring(f.lastIndexOf("."));
if((fname.equals(".html")||fname.equals(".htm")) && !f.equals("login.html")){
urlElement = urlsetElement.addElement("url");
locElement = urlElement.addElement("loc");
lastmodElement = urlElement.addElement("lastmod");
changefreqElement = urlElement.addElement("changefreq");
priorityElement = urlElement.addElement("priority");
//导航赋值
homeurl = homeurl + fp.getFileName();
locElement.setText(homeurl);
lastmodElement.setText(fp.getFileTimeStamp());// 这里时间是你更新时间,这里暂时统一
changefreqElement.setText(changefreq);
priorityElement.setText(priority);
}
}
}
//各个目录下的文件
for(int i=0;i<directory.length;i++){
fp.setPath("D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\"+directory+"\\");
fp.refreshList();
while (fp.nextFile()) {
homeurl="http://www.jiujiajiu.cn/"+directory+"/";
urlElement = urlsetElement.addElement("url");
locElement = urlElement.addElement("loc");
lastmodElement = urlElement.addElement("lastmod");
changefreqElement = urlElement.addElement("changefreq");
priorityElement = urlElement.addElement("priority");
homeurl = homeurl + fp.getFileName();
locElement.setText(homeurl);
lastmodElement.setText(fp.getFileTimeStamp());// 这里时间是你更新时间,这里暂时统一
changefreqElement.setText(changefreq);
priorityElement.setText(priority);
}
}
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
xmlpath)));
writer.write(document);
writer.close();
document = null;
// 格式化
formatXMLFile(xmlpath, "UTF-8");
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 格式化XML文档,并解决中文问题
* @param xmlpath:xml文件路径
* @param charSet:格式化的字符集
* @return
*/
public static boolean formatXMLFile(String xmlpath, String charSet) {
boolean returnValue = false;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(xmlpath));
XMLWriter output = null;
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(charSet);
output = new XMLWriter(new FileWriter(new File(xmlpath)), format);
output.write(document);
output.close();
document = null;
saxReader = null;
returnValue = true;
} catch (Exception ex) {
ex.printStackTrace();
}
return returnValue;
}
}
   第三、创建一个任务监听类,实现ServletContextListener 接口

public class TimerListener implements ServletContextListener {
// 设置启动时间为23点;
private static final int hours = 23;
private static final int minutes = 0;
private static final int seconds = 0;
private Timer timer = null;
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
public void contextInitialized(ServletContextEvent event) {
timer=new Timer(true);
event.getServletContext().log("定时器已启动");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, minutes);
calendar.set(Calendar.SECOND, seconds);
//SiteMap生成
//间隔时间1天生成一次
timer.schedule(new XMLParese(event.getServletContext()),calendar.getTime(),
1*24*60*60*1000);
}
}
   第四、在web中添加一个监听器

       web.xml里的配置

<!-- 定时器 -->
<listener>
<listener-class>timer.TimerListener</listener-class>
</listener>
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-338310-1-1.html 上篇帖子: Tomcat NIO源代码分析(三) -- Protocol和Processor 下篇帖子: 解决RAR等文件在Tomcat下无法下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表